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