微信小程序map组件的polyline必须为合法WGS84经纬度对象数组,格式为{latitude: number, longitude: number},需经坐标系转换、类型校验与节流控制,否则导致线不渲染或卡顿。

直接用 polyline 数组,别碰 encodedPolyline,否则 iOS 上线宽颜色全失效。
polyline 必须是合法经纬度对象数组
微信小程序原生 map 组件只认 polyline 字段,且每个点必须严格为 { latitude: number, longitude: number }。字符串、null、undefined 或坐标越界(纬度超出 ±90、经度超出 ±180)都会导致整条线不渲染,且无任何错误提示。
- 后端返回的坐标如果是字符串,务必用
parseFloat()转成数字 - 高德/百度 SDK 返回的 GCJ-02 坐标不能直传,得先转 WGS84(微信强制要求)
- 轨迹点顺序必须按时间正序排列,否则折线会乱跳
避免在 onRegionChange 里更新 polyline
这个事件只响应用户拖动缩放地图,和定位数据完全无关。很多人误以为“地图动了就要重画线”,结果发现 setData 后线没变——因为根本没新坐标进来。
- 真正驱动轨迹更新的是定位流:用
uni.getLocation或后台定位uni.startLocationUpdateBackground - iOS 需用户手动授权「始终允许」,Android 要声明
ACCESS_BACKGROUND_LOCATION权限 - 频繁 setData 会卡顿,建议每 3–5 秒合并一次点位,或用节流控制
路线规划要用服务端 API,不是前端画线
如果需求是“从 A 到 B 的驾车路线”,polyline 只负责渲染,路径计算必须调用腾讯或高德的 WebService 接口。前端不能自己算最短路。
- 腾讯示例 URL:
https://apis.map.qq.com/ws/direction/v1/driving/?from=39.98,116.30&to=39.99,116.32&key=YOUR_KEY - 高德示例 URL:
https://restapi.amap.com/v3/direction/driving?origin=116.30,39.98&destination=116.32,39.99&key=YOUR_KEY - 拿到返回的
steps或paths[0].points后,再拆成polyline[0].points数组传给 map
最容易被忽略的是坐标系转换和 setData 频率控制:WGS84 是硬性门槛,而高频 setData 在低端机上会直接让地图卡死不动。这两点不处理,其他都白搭。


















