SSukha 地图开发者文档

在地图上绘制

6.1 点标记与信息窗

Marker marker = map.addMarker(new MarkerOptions()
    .position(new LatLng(21.67623, 100.02228)).title("门店").rotateAngle(0));
marker.setPosition(new LatLng(21.677, 100.023));
marker.setRotateAngle(90);
marker.showInfoWindow();
// marker.setVisible(false); marker.remove();

position 必填;旋转角按顺时针屏幕角度归一化至 0–360。setInfoWindowAdapter 支持自定义信息窗 View。图片通过 BitmapDescriptorFactory.fromBitmap(bitmap) 或 fromResource(context, resourceId) 转成图标后交给 MarkerOptions.icon / Marker.setIcon。矢量资源先绘制为 Bitmap;避免每次定位都重新构建图标。

6.2 折线、面与圆

LatLng a = new LatLng(21.67623, 100.02228);
LatLng b = new LatLng(21.678, 100.024);
LatLng c = new LatLng(21.680, 100.022);
Polyline line = map.addPolyline(new PolylineOptions().add(a, b, c)
    .color(0xff1268e5).width(5));
Polygon polygon = map.addPolygon(new PolygonOptions().add(a, b, c)
    .fillColor(0x221268e5).strokeColor(0xff1268e5));
Circle circle = map.addCircle(new CircleOptions().center(a).radius(100)
    .fillColor(0x221268e5).strokeColor(0xff1268e5));

折线至少 2 点,面至少 3 点;圆半径单位米。更新图形使用对应 setPoints、setCenter、setRadius,删除用 remove()。已删除对象不再复用。

6.3 三点弧线

Arc arc = map.addArc(new ArcOptions()
    .point(new LatLng(21.676, 100.020), new LatLng(21.679, 100.022),
           new LatLng(21.676, 100.024))
    .strokeColor(0xff1268e5).strokeWidth(5));
// arc.remove();

三点依次为起点、经过点、终点;三点应能定义有效弧线。底层通过几何采样显示,不承诺与其他厂商的曲线插值完全一致。

6.4 热力图

HeatmapTileProvider heat = new HeatmapTileProvider.Builder()
    .data(java.util.Arrays.asList(new LatLng(21.676, 100.022),
                                 new LatLng(21.677, 100.023)))
    .radius(20).opacity(0.6).build();
TileOverlay heatLayer = map.addTileOverlay(new TileOverlayOptions().tileProvider(heat));
// 更新 heat.setData(newPoints) 后调用 heatLayer.clearTileCache()。
// heatLayer.remove();
参数 默认 / 范围 说明
data / weightedData 必填其中之一 点集合 / WeightedLatLng 权重点集合
radius 20;10–50 像素 热力核显示半径
opacity 0.6;0–1 透明度
gradient SDK 默认渐变 Gradient 颜色及分段位置

6.5 点聚合

java.util.List<ClusterItem> items = new java.util.ArrayList<>();
items.add(() -> new LatLng(21.676, 100.022));
items.add(() -> new LatLng(21.6761, 100.0221));
ClusterOverlay clusters = new ClusterOverlay(map, items, 60, context);
clusters.setMaxZoom(20);
clusters.setOnClusterClickListener((marker, members) -> report(members.size()));
// clusters.setData(updatedItems); clusters.onDestroy();

clusterRadius 是屏幕网格边长,1–1024 物理像素,不是点间严格距离半径。输入最多 20000 项;setMaxZoom 范围 0–24,默认 20,达到后逐点显示。setClusterRenderer 返回自定义 Drawable。大规模数据仍需目标机性能测试,不保证任意机型固定帧率。

6.6 绘制与编辑

MouseTool tool = new MouseTool(map);
tool.setOnDrawListener(overlay -> report(overlay));
tool.polyline(new PolylineOptions().color(0xff1268e5).width(5));
// 用户逐点点击;宿主的完成按钮调用 tool.finish(),撤销调用 tool.undo()。

PolylineEditor editor = new PolylineEditor(map, line);
editor.open();
// editor.addMidpoint(0); editor.close(); editor.destroy();

MouseTool 支持 marker、polyline、polygon、circle、rectangle。Android 线/面显式 finish();圆与矩形两次点选完成。线面编辑支持顶点拖动和边中点插入;面包含闭合边。close(false) 保留已完成图形,close(true) 同时删除工具创建的图形;工具 destroy 不等于删除目标图形。map.clear() 会释放地图上的工具。