You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用Google Maps Direction API出现(0.0,0.0)附近标记问题求助

解决Google Maps Direction API折线解码出现大量(0.0,0.0)标记的问题

我一眼就看出你折线解码函数里的几个关键问题,这些问题直接导致了解析出来大量无效的(0.0,0.0)坐标:

问题根源

  1. index变量未在每个折线字符串解析前重置:你把index定义在整个函数的开头,处理完一个polyline字符串后,index已经指向该字符串的末尾,下一个字符串解析时会从这个错误位置开始读取,自然会算出无效坐标。
  2. lat和lng未在每个折线字符串解析前重置:每个step的polyline是基于自身起点的相对偏移量,不是全局累计值。你延续之前的lat/lng值,会让后续坐标计算完全偏离正确轨道。
  3. 遍历polyline列表时跳过了最后一个元素:0 until polylineArrayList.size-1这个范围会漏掉最后一个polyline字符串,同时写法也不够直观易读。

修复后的解码函数

private fun decodePoly(polylineArrayList: ArrayList<String>): List<LatLng> {
    val poly = ArrayList<LatLng>()
    
    // 直接遍历每个折线字符串,避免索引范围错误
    for (encoded in polylineArrayList) {
        val len = encoded.length
        var index = 0 // 每个字符串解析前重置index
        var lat = 0   // 每个字符串解析前重置基准纬度
        var lng = 0   // 每个字符串解析前重置基准经度
        
        while (index < len) {
            var b: Int
            var shift = 0
            var result = 0
            do {
                b = encoded[index++].toInt() - 63
                result = result or (b and 0x1f shl shift)
                shift += 5
            } while (b >= 0x20)
            val dlat = if (result and 1 != 0) (result shr 1).inv() else result shr 1
            lat += dlat
            
            shift = 0
            result = 0
            do {
                b = encoded[index++].toInt() - 63
                result = result or (b and 0x1f shl shift)
                shift += 5
            } while (b >= 0x20)
            val dlng = if (result and 1 != 0) (result shr 1).inv() else result shr 1
            lng += dlng
            
            val p = LatLng(lat.toDouble() / 1E5, lng.toDouble() / 1E5)
            poly.add(p)
        }
    }
    return poly
}

额外优化建议

在你的onSuccess方法里,收集polyline的代码可以简化成更简洁的写法,避免多层嵌套循环:

val polylineArrayList = googleDirectionData?.routes?.flatMap { route ->
    route.legs.flatMap { leg ->
        leg.steps.map { step -> step.polyline.points }
    }
} ?: arrayListOf()

这样修改后,解码出来的坐标就不会出现大量(0.0,0.0)的无效点了,路线绘制应该能正常显示。

内容的提问来源于stack exchange,提问作者Antoine REY

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:34:02