osmdroid 7.2.1基础测试

时间:2021-07-14
本文章向大家介绍osmdroid 7.2.1基础测试,主要包括osmdroid 7.2.1基础测试使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

osmdroid7.2.1跟6.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测试的。

osmdroid7.2.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 InitMap Overlays(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);
 
        //指南针方向

        www.yedom.cn
        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、记得权限
   
   
   
   
   
   
   
   
如果使用gps定位,记得location权限,还有手机开启gps功能。

4、官方解释版本更新www.yedom.cn

翻译:

版本6.0.0有一些重大的变化。我建议在发布更新之前对您的应用程序进行广泛的测试。
生命周期的变化。MapView现在有一个onPause和onResume。这些调用被传递到所有覆盖类。总的来说,这是为了减少osmdroid-android用户需要正确处理开始/停止罗盘和gps传感器的样板代码量。这段代码都包含在这些覆盖层中。总之,您可以删除应用程序中与启动/停止GPS或Compass覆盖相关的任何代码,并使用mapView.onPause()和mapview . onrecse()调用来替换它。
如果您以前使用的是geopackage支持库,那么将会更改几个类和包的名称。影响应该是最小的,但是期望一些发现和替代工作。
在IConfigurationProvider接口中添加了几个新字段。如果你已经写好了自己的作品,那就准备做一些工作吧(这是次要的)。如果你延长了DefaultConfigurationProvider,然后你应该ok。
MapView和MapController有一些变化,这些都不应该被破坏。这些方法包括将当前缩放级别和动画设置为缩放级别。影响应该是最小的

原文地址:https://www.cnblogs.com/yedomcn/p/15009427.html