在地图上绘制
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() 会释放地图上的工具。