1. 程式人生 > >Osmdroid覆蓋物新增API功能介紹----基本功能

Osmdroid覆蓋物新增API功能介紹----基本功能

Osmdroid覆蓋物新增API功能介紹—基本功能

https://github.com/osmdroid/osmdroid

基本應用

Osmdroid通過MapViewgetOverlays()方法獲取所有的覆蓋物集合,然後通過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);

效果圖
在這裡插入圖片描述