Osmdroid覆蓋物新增API功能介紹----基本功能
阿新 • • 發佈:2018-12-24
Osmdroid覆蓋物新增API功能介紹—基本功能
基本應用
Osmdroid通過MapView
的getOverlays()
方法獲取所有的覆蓋物集合,然後通過add()
方法新增到地圖上面。
Osmdroid中有一個Overlay
的覆蓋物介面。新增到MapView中的覆蓋物需要實現這個介面。
//built in zoom controls mMapView.setBuiltInZoomControls(true); //needed for pinch zooms mMapView.setMultiTouchControls(true); //scales tiles to the current screen's DPI, helps with readability of labels mMapView.setTilesScaledToDpi(true);
1,定位
Osmdroid提供了一個實現方式一個定位的覆蓋物實現類MyLocationNewOverlay.java
和定位功能的實現類GpsMyLocationProvider.java
類。具體的實現方式為:
//My Location //note you have handle the permissions yourself, the overlay did not do it for you mLocationOverlay = new MyLocationNewOverlay(new GpsMyLocationProvider(context), mMapView); mLocationOverlay.enableMyLocation(); //定位的圖示和方向旋轉 mLocationOverlay.setDirectionArrow(((BitmapDrawable)getContext().getResources().getDrawable(R.drawable.ic_location_pressed)).getBitmap(), ((BitmapDrawable)getContext().getResources().getDrawable(R.drawable.compass_mark)).getBitmap()); mMapView.getOverlays().add(this.mLocationOverlay);
檢視MyLocationNewOverlay.java
程式碼,可以設定是否繪製精度範圍。如下圖:
當GPS定位資訊中有方向旋轉角度的時候會繪製ArrowBitmap,而且繪製定位點圖片的時候有一定的偏移量。
效果圖:
定位的模式
//開啟跟隨模式
LocationOverlay.enableFollowLocation()
//關閉跟隨模式
LocationOverlay.disableFollowLocation()
如果Osmdroid提供的定位不滿足需求可以自定義一個。
2,小地圖
使用程式碼:
//Mini map mMinimapOverlay = new MinimapOverlay(context, mMapView.getTileRequestCompleteHandler()); mMinimapOverlay.setWidth(dm.widthPixels / 5); mMinimapOverlay.setHeight(dm.heightPixels / 5); mMapView.getOverlays().add(this.mMinimapOverlay);
3,線上圖層的Copyright顯示
//Copyright overlay
mCopyrightOverlay = new CopyrightOverlay(context);
//i hate this very much, but it seems as if certain versions of android and/or
//device types handle screen offsets differently
if (Build.VERSION.SDK_INT <= 10)
mCopyrightOverlay.setOffset(0, (int) (55 * dm.density));
mMapView.getOverlays().add(this.mCopyrightOverlay);
5,比例尺顯示
//map scale
mScaleBarOverlay = new ScaleBarOverlay(mMapView);
mScaleBarOverlay.setCentred(true);
//設定比例尺顯示的位置
mScaleBarOverlay.setScaleBarOffset(dm.widthPixels / 2, 10);
mMapView.getOverlays().add(this.mScaleBarOverlay);
ScaleBarOverlay
支援設定比例尺的單位,有metric, imperial, nautical
三種。還可以設定比例尺的文字畫筆,背景畫筆和尺子的畫筆
6,指南針顯示
//On screen compass
//sorry for the spaghetti code this is to filter out the compass on api 8
//Note: the compass overlay causes issues on API 8 devices. See https://github.com/osmdroid/osmdroid/issues/218
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) {
mCompassOverlay = new CompassOverlay(context, new InternalCompassOrientationProvider(context),
mMapView);
mCompassOverlay.enableCompass();
mMapView.getOverlays().add(this.mCompassOverlay);
}
InternalCompassOrientationProvider
是Osmdroid提供的方向資料提供者
7,地圖旋轉
//support for map rotation
mRotationGestureOverlay = new RotationGestureOverlay(mMapView);
//true地圖旋轉,false地圖不旋轉
mRotationGestureOverlay.setEnabled(true);
mMapView.getOverlays().add(this.mRotationGestureOverlay);
8,地圖點選事件
地圖的點選事件也是用Overlay
實現的
實現程式碼
final MapEventsReceiver mReceive = new MapEventsReceiver() {
@Override
public boolean singleTapConfirmedHelper(GeoPoint p) {
return false;
}
@Override
public boolean longPressHelper(final GeoPoint p) {
Toast.makeText("longPressHelper", Toast.LENGTH_LONG).show();
return true;
}
};
mMapView.getOverlays().add(new MapEventsOverlay(mReceive));
效果圖:
9,經緯度網格顯示
程式碼實現:
LatLonGridlineOverlay2 grids = new LatLonGridlineOverlay2();
grids.setBackgroundColor(Color.BLACK);
grids.setFontColor(Color.RED);
grids.setLineColor(Color.RED);
grids.setFontSizeDp((short)14);
mMapView.getOverlayManager().add(grids);
效果圖