地图覆盖物:折线(Polyline)与多边形(Polygon)完全指南
引言
矢量图形是地图业务的核心,无论是物流路线、行政区域还是电子围栏,都离不开它们。但这部分功能比 Marker 复杂得多,涉及几何算法、渲染性能和交互逻辑。
学习目标
- 掌握矢量图形创建:分清 Polyline(折线)和 Polygon(多边形)的区别,尤其是路径 path 的数据结构。
- 理解闭合与非闭合:明白为什么多边形必须首尾相连,而折线不需要,避免渲染异常。
- 精通样式定制:线条颜色、宽度、虚线样式、填充色、透明度,确保 UI 效果符合规范。
- 编辑与交互能力:如何实现拖拽编辑顶点?如何判断点在多边形内?这些是业务刚需。
- 性能与精度平衡:海量坐标点如何简化?如何避免自相交图形导致的渲染错误?
核心知识点结构
- 折线 Polyline:路径 path 数组,样式 strokeColor/strokeWeight/strokeStyle,支持编辑 Editing。
- 多边形 Polygon:闭合路径 Closed Path,填充 fillColor/fillOpacity,支持孔洞 Holes。
- 交互事件:点击 click,鼠标悬停 mouseover,编辑结束 endEdit。
- 几何算法:点在面内判断,距离计算,路径简化,性能优化。
核心原理与流程
矢量图形的本质是矢量路径数据,通过地图引擎投影到屏幕,再用 Canvas 或 SVG 绘制。
- 坐标投影:经纬度需要转换成屏幕像素。如果路径有 1000 个点,每次地图移动都要重新计算投影,这是卡顿的根源。
- 闭合逻辑:Polygon 要求首尾坐标一致(或者引擎自动闭合),否则填充区域会出错。Polyline 则是开放的。
- 渲染层级:矢量图形通常绘制在地图瓦片之上,Marker 之下(默认情况)。可通过 zIndex 调整,但大量矢量图形可能触发 GPU 加速或降级为 CPU 渲染。
实战代码详解
5.1 创建折线与多边形
// 1. 定义路径数据
const path = [
[116.397428, 39.90923],
[116.407428, 39.91923],
[116.387428, 39.91923]
];
// 2. 创建折线 Polyline
const polyline = new AMap.Polyline({
path: path,
strokeColor: "#FF33FF",
strokeWeight: 6,
strokeStyle: ,
: map
});
polygon = .({
: path,
: ,
: ,
: ,
: map
});


