osmdroid6.0.1跟5.0多版本变更还有有点大的,重构了不少接口。支持缩放到厘米级。第一次升级还是挺多地方都是红色。

osmdroid 官网:https://github.com/osmdroid/osmdroid

代码仓库:http://repo1.maven.org/maven2/org/osmdroid/

代码仓库里面有最新的库,还有很多相关的库,官方demo等等。

android osmdroid 加载常用离线地图格式(开源的在线地图)
android osmdroid 加载离线地图map格式以及地图网格绘制
android 开源库osmdroid绘制点线面(比例尺,缩小放大,导航图标等)

osmdroid 在线加载谷歌瓦片(谷歌地图瓦片地址解释)

这上面这几个测试时根据osmdroid 5.6.5测试的。

osmdroid 6.0.1加载天地图在线矢量和影像数据


1、看看变更

(1)设置缩放级别的接口参数变成double类型,之前的是int类型。支持最大级别29级。

(2)在6.0以上版本去掉了MapTile这个类,所以在线加载瓦片地图的TileURL有点改变

(3)默认开启自动缩放的按钮。就是图下


这个在以前是没有,现在有。我觉得是很烦事情,后面会说怎么去掉这个的显示。

(4)还有一些关联库的变动,如下图


(5)更好支持geopackage的titledao和featuredao

2、部分常用配置的代码

package com.osmdroid.sample.util;

import android.app.Activity;
import android.content.Context;
import android.location.LocationManager;
import android.util.DisplayMetrics;

import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ScaleBarOverlay;
import org.osmdroid.views.overlay.compass.CompassOverlay;
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider;
import org.osmdroid.views.overlay.gestures.RotationGestureOverlay;
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider;
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;

public class CustomsOsmdroidMapConfig {

    //地图旋转
    private RotationGestureOverlay mRotationGestureOverlay;
    //比例尺
    private ScaleBarOverlay mScaleBarOverlay;
    //指南针方向
    private CompassOverlay mCompassOverlay = null;
    //设置导航图标的位置
    protected MyLocationNewOverlay mLocationOverlay;
    //是否地图旋转
    protected boolean mbRotation = false;

    public CustomsOsmdroidMapConfig() {
    }

    public void InitMapOverlays(MapView mapView, Activity context) {
        mapView.setDrawingCacheEnabled(true);
        mapView.setMaxZoomLevel(29.0);
        mapView.setMinZoomLevel(5.0);
        mapView.getController().setZoom(12.0);
        mapView.setUseDataConnection(true);
        mapView.setMultiTouchControls(true);// 触控放大缩小
        mapView.getOverlayManager().getTilesOverlay().setEnabled(true);
        //禁止自动出现放大,缩小的按钮 osmdroid 6.0以后才有的
        mapView.setBuiltInZoomControls(false);

        if (mbRotation) {
            //地图自由旋转
            mRotationGestureOverlay = new RotationGestureOverlay(mapView);
            mRotationGestureOverlay.setEnabled(true);
            mapView.getOverlays().add(this.mRotationGestureOverlay);
        }

        //比例尺配置
        final DisplayMetrics dm = context.getResources().getDisplayMetrics();
        mScaleBarOverlay = new ScaleBarOverlay(mapView);
        mScaleBarOverlay.setCentred(true);
        mScaleBarOverlay.setAlignBottom(true); //底部显示
        mScaleBarOverlay.setLineWidth(2);
        mScaleBarOverlay.setMaxLength(1.5F);
        mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 2, dip2px(context, 60));
        mapView.getOverlays().add(this.mScaleBarOverlay);

        //指南针方向
        mCompassOverlay = new CompassOverlay(context, new InternalCompassOrientationProvider(context), mapView);
        mCompassOverlay.enableCompass();
        mapView.getOverlays().add(this.mCompassOverlay);

        //设置导航图标
        //自已重写了MyLocationNewOverlay
        this.mLocationOverlay = new CustomsMyLocationOverlay(new GpsMyLocationProvider(context), mapView);
        mapView.getOverlays().add(this.mLocationOverlay);
        mLocationOverlay.enableMyLocation();
    }

    public MyLocationNewOverlay getmLocationOverlay(){
        return mLocationOverlay;
    }

    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    public void onPause() {
        mCompassOverlay.disableCompass();
        mLocationOverlay.disableFollowLocation();
        mLocationOverlay.disableMyLocation();
        mScaleBarOverlay.enableScaleBar();
    }

    public void onResume(){
        mLocationOverlay.enableFollowLocation();
        mLocationOverlay.enableMyLocation();
        mScaleBarOverlay.disableScaleBar();
    }
}

关于禁止自动出现缩放按钮的代码就是这个了

        //禁止自动出现放大,缩小的按钮 osmdroid 6.0以后才有的
        mapView.setBuiltInZoomControls(false);

3、记得权限

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />

如果使用gps定位,记得location权限,还有手机开启gps功能。

4、官方解释版本更新

http://osmdroid.github.io/osmdroid/Upgrade-Guide.html

翻译:

版本6.0.0有一些重大的变化。我建议在发布更新之前对您的应用程序进行广泛的测试。
生命周期的变化。MapView现在有一个onPause和onResume。这些调用被传递到所有覆盖类。总的来说,这是为了减少osmdroid-android用户需要正确处理开始/停止罗盘和gps传感器的样板代码量。这段代码都包含在这些覆盖层中。总之,您可以删除应用程序中与启动/停止GPS或Compass覆盖相关的任何代码,并使用mapView.onPause()和mapview . onrecse()调用来替换它。
如果您以前使用的是geopackage支持库,那么将会更改几个类和包的名称。影响应该是最小的,但是期望一些发现和替代工作。
在IConfigurationProvider接口中添加了几个新字段。如果你已经写好了自己的作品,那就准备做一些工作吧(这是次要的)。如果你延长了DefaultConfigurationProvider,然后你应该ok。
MapView和MapController有一些变化,这些都不应该被破坏。这些方法包括将当前缩放级别和动画设置为缩放级别。影响应该是最小的。
对于浮点缩放,覆盖的自定义实现可能需要进行一些调整。
期望更高的内存使用,因为增加了地图的内存缓存。以前的版本使用了平均50-60MB的ram来运行。v6可以使用大约100MB。
在回收器中MapView现在被支持,并在API16+设备上运行。这集的默认值view.setHasTransientState MapView创建时(真正的)。如果这导致问题,你可以选择这个设置通过新的IConfiguration # setMapViewRecyclerFriendly(布尔)设置
从AAR库的清单中删除了权限。xml,因此您可能需要根据您的使用场景更新apk的清单文件。
允许硬件加速现在应该可以在所有设备上支持,但是仍然存在一些使用多边形的性能问题(要在v6.1中解决)
的各种废弃方法OpenStreetMapsTileProviderConstants已被移除。替换电话现在在IConfigurationProvider中。
仅提供咨询,此版本将osmdroid-android的方法计数增加到3000左右。
LatLonGridlineOverlay已被弃用,支持LatLonGridlineOverlay2,它具有更简洁、更简单的集成。

更多相关文章

  1. 如何在android地图中使用TextWatcher显示带标题的搜索标记并隐藏
  2. 如何设置webview的初始缩放/宽度
  3. Button点击缩放动画效果
  4. Android开发学习之ImageView手势拖拽、缩放、旋转
  5. Android如何缩放应用中的字体大小
  6. Android实现非本地图片的点击效果
  7. android中一些能在国外使用的第三方地图
  8. Android开源代码解读の地图照片应用Panoramio的实现详解(六)
  9. Android百度地图定位定到了海里,定到了非洲

随机推荐

  1. 阿里云也有 IDEA 插件 Cloud Toolkit
  2. 芋道 Spring Cloud Alibaba 注册中心 Nac
  3. pytest测试入门篇(ExitCode退出码)
  4. 芋道 Spring Boot 自动配置原理
  5. 芋道 Spring Boot 热部署入门
  6. 芋道 Spring Boot MyBatis 入门
  7. 芋道 Spring Boot 消除冗余代码 Lombok
  8. 芋道 Spring Boot 数据库连接池入门
  9. Caused by: java.lang.IllegalStateExcep
  10. RocketMQ 源码解析 —— 调试环境搭建