Osmdroid覆盖物添加API功能介绍----基本功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28656671/article/details/85158760

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));

效果图:
效果图

扫描二维码关注公众号,回复: 4633723 查看本文章
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);

效果图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_28656671/article/details/85158760