版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28656671/article/details/85158760
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));
效果图:
扫描二维码关注公众号,回复:
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);
效果图