MSDK 集成三方地图

2024-08-05
暂无评分

本篇文档将指导用户如何接入三方地图,使用 DJI MapWidget 统一对地图管理。

如何集成三方地图

我们以接入高德地图为例介绍如何集成三方地图,跳转可以获取完整的代码示例open in new window

  1. 创建文件夹

参考图示创建 amap 文件夹以及子目录,文件夹创建位置与文件夹名称没有限制。

  1. 方法实现
.
└── amap
    ├── annotations
    ├── map
    ├── place
    ├── provider
    └── utils
annotations
标注
参考示例实现
DJICircle、DJIGroupCircle、DJIMarker、DJIPolygon、DJIPolyline
map
地图操作
参考示例实现
DJIBaseMap:地图的操作如点击长按事件
TextureMapView:主要对地图View的生命周期进行控制
DJIProjection:主要负责屏幕坐标与地理坐标的转换
DJIUiSettings:主要负责地图自带的一些控件:比例尺等
手势:是否允许旋转
place
地图检索
参考示例实现
IInternalPlacesClient、PoiSearch.OnPoiSearchListener
provider
新增地图
参考示例实现
MapProvider

常用地图相关操作

  1. 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();
  1. 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();
  1. 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();
  1. Polygon的操作
DJIMap mMap;
  
// 添加
DJIPolygon plg = mMap.addPolygon(new DJIPolygonOptions().addAll(points)
                .strokeColor(mColorTransparent)
                .strokeWidth(4f)
                .fillColor(fillColor));
// 移除
pig.remove();
  1. 旋转地图(本质上是旋转 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));
  1. 投影操作
DJIMap mMap;
Point point; // 屏幕上的点坐标
  
// 从屏幕上一点获取地图上的坐标
DJIProjection projection = mMap.getProjection();
DJILatLng p = projection.fromScreenLocation(point);
  
// 从地图上的坐标获取屏幕上的点
DJIProjection projection = mMap.getProjection();
Point p = projection.toScreenLocation(marker.getPosition());
  1. 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));
若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。