MSDK 集成三方地图
本篇文档将指导用户如何接入三方地图,使用 DJI MapWidget 统一对地图管理。
如何集成三方地图
我们以接入高德地图为例介绍如何集成三方地图,跳转可以获取完整的代码示例。
- 创建文件夹
参考图示创建 amap 文件夹以及子目录,文件夹创建位置与文件夹名称没有限制。

- 方法实现
.
└── amap
├── annotations
├── map
├── place
├── provider
└── utils
annotations 标注 | 参考示例实现 DJICircle、DJIGroupCircle、DJIMarker、DJIPolygon、DJIPolyline |
---|---|
map 地图操作 | 参考示例实现 DJIBaseMap:地图的操作如点击长按事件 TextureMapView:主要对地图View的生命周期进行控制 DJIProjection:主要负责屏幕坐标与地理坐标的转换 DJIUiSettings:主要负责地图自带的一些控件:比例尺等 手势:是否允许旋转 |
place 地图检索 | 参考示例实现 IInternalPlacesClient、PoiSearch.OnPoiSearchListener |
provider 新增地图 | 参考示例实现 MapProvider |
常用地图相关操作
- Marker 的操作
DJIMap mMap;
DJIBitmapDescriptor icon = DJIBitmapDescriptorFactory.fromResource(R.drawable.gs_user_annotation_image);
DJIMarker locMarker;
// 添加Marker
locMarker = mMap.addMarker(new DJIMarkerOptions()
.draggable(false)
.position(latLng)
.anchor(0.5f, 0.5f)
.icon(icon));
// 旋转Marker
locMarker.setRotation(rotation);
//移除
locMarker.remove();
- Circle的操作
DJIMap mMap;
DJICircle circle;
// 添加
DJICircle circle = mMap.addCircle(new DJICircleOptions()
.center(new DJILatLng(latLng))
.radius(radius)
.strokeWidth(5)
.strokeColor(unLimitStrokeColor)
.fillColor(unLimitFillColor));
// 移除
circle.remove();
- Polyline的操作
DJIMap mMap;
// 添加Polyline
DJIPolylineOptions options = new DJIPolylineOptions()
.width(width)
.color(color)
.geodesic(true)
.add(homeMarker.getPosition(), flyMarker.getPosition())
.ZIndex(655510);
DJIPolyline line = mMap.addPolyline(options);
// 更新Polyline
options.width(newWidth);
line.setOptions(options);
// 移除
line.remove();
- Polygon的操作
DJIMap mMap;
// 添加
DJIPolygon plg = mMap.addPolygon(new DJIPolygonOptions().addAll(points)
.strokeColor(mColorTransparent)
.strokeWidth(4f)
.fillColor(fillColor));
// 移除
pig.remove();
- 旋转地图(本质上是旋转 Camera)
DJIMap mMap;
float newBearing;
// 先获取当前Camera
DJICameraPosition p = mMap.getCameraPosition();
DJICameraPosition position = new DJICameraPosition.Builder()
.target(p.target)
.zoom(p.zoom)
.tilt(p.tilt)
.bearing(newBearing)
.build();
// 更新Camera
mMap.animateCamera(DJICameraUpdateFactory.newCameraPosition(position));
// 或者
mMap.moveCamera(DJICameraUpdateFactory.newCameraPosition(position));
- 投影操作
DJIMap mMap;
Point point; // 屏幕上的点坐标
// 从屏幕上一点获取地图上的坐标
DJIProjection projection = mMap.getProjection();
DJILatLng p = projection.fromScreenLocation(point);
// 从地图上的坐标获取屏幕上的点
DJIProjection projection = mMap.getProjection();
Point p = projection.toScreenLocation(marker.getPosition());
- DJILatLngBounds的使用
DJIMap mMap;
DJILatLngBounds.Builder builder = new DJILatLngBounds.Builder();
builder.include(locMarker.getPosition());
builder.include(flyMarker.getPosition());
builder.include(homeMarker.getPosition());
final DJILatLngBounds bounds = builder.build();
mMap.moveCamera(DJICameraUpdateFactory.newLatLngBounds(bounds, width, height, 10));