1. 程式人生 > 其它 >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有一些變化,這些都不應該被破壞。這些方法包括將當前縮放級別和動畫設定為縮放級別。影響應該是最小的