为适配Google Maps API,给多边形坐标数组添加lat和lng字段
问题分析与解决方案:Google Maps Polygon坐标格式转换错误
你离正确答案真的只差一步!核心问题出在对map()方法的理解上——它不会修改原数组,而是返回一个全新的转换后数组,但你没有把这个返回值赋值给path,所以原数组还是保持最初的二维数组格式,自然不符合Google Maps API的要求。
修正后的代码:
let path = [[59.523341487842316, -9.193736158410616], [59.535126839526605, -9.175282560388155], [59.529311101819324, -9.147215925256319], [59.51395167489177, -9.158202253381319], [59.51139973569412, -9.190560422936983], [59.521402457849575, -9.174424253503389], [59.50946015912328, -9.207211576501436]]; // 将map返回的新数组重新赋值给path,覆盖原数组 path = path.map(e => ({lat: e[0], lng: e[1]})); console.log(path); // 现在输出就是你期望的带lat/lng字段的对象数组了 // 构造多边形 var geoFences = new google.maps.Polygon({ paths: path, strokeColor: '#FF0000', strokeOpacity: 0.8, strokeWeight: 2, fillColor: '#FF0000', fillOpacity: 0.35 });
关键细节解释:
map()是JavaScript中的纯函数,它遍历原数组的每个元素,执行你定义的回调函数(这里是把二维数组转成带lat/lng的对象),最终生成一个新数组返回,但不会改变原数组的内容。你之前的代码只是运行了转换,但没把结果存下来,所以path还是原来的样子。- 如果不想修改原数组,也可以新建一个变量来存转换后的结果,比如:
这样原数组还能保留下来做其他用途。const formattedPath = path.map(e => ({lat: e[0], lng: e[1]})); // 之后在Polygon里用paths: formattedPath
内容的提问来源于stack exchange,提问作者Steve Flynn
相关产品推荐
相关产品推荐

