osmdroid 6.0.1基础测试

osmdroid 6.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,它具有更简洁、更简单的集成。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值