编辑:我重新格式化了问题,因为有人向我指出问题不在 Mapbox API 中。
几天前,一个使用 mapbox 匹配 API 和 Leaflet.js 的应用程序开始在地球的另一边绘制折线。
虽然它自己看起来应该是这样的路径,但传单将它描绘在另一个大陆上。Mapbox 匹配 API 按照 GEOJson 标准返回响应:
{
"code": "Ok",
"type": "FeatureCollection",
"features": [{
"type": "Feature",
"geometry": "e`s`YmyazuAg`@y]uo@ej@eQcOkFkEyCeCaYmUuFoMkWgOo[_ReGqDoGyDmVaPaU|RoDlDsa@z`@sTdSXJf@j@??Jr@Mp@ML[Z}@ZiAHgAK]MaJzJsUbWkSxRyHpHuLhLuFzFqDrDq[`\\oPrPyK|KmU|TuLzKyClCr@ZZf@Fj@Ij@e@b@zn@fZ}Zf]gCdKmHxQErC[jV",
"properties": {
"confidence": 0.45413768894813844,
"distance": 1366.4,
"duration": 243.3,
"matchedPoints": [
[13.658131, 45.532583],
[13.659851, 45.534127],
[13.661445, 45.535438],
[13.662397, 45.535398],
[13.663582, 45.534237],
[13.666378, 45.531441],
[13.666457, 45.529215]
],
"indices": [0, 1, 2, 3, 4, 5, 6]
}
}]
}
使用下面的代码使用 leaflet.js 绘制图层会导致在错误位置绘制多段线。
L.mapbox.mapmatching(geojson, options, function (error, layer) {
layer.addTo(map);
layer.setStyle({
color: '#3c8dbc',
weight: 4,
opacity: 0.8
});
//fit bounds to added layer
map.fitBounds(layer.getBounds());
结果是:
虽然折线本身是应有的,但位置却不是。我推测问题是传单期望坐标格式为 [纬度,经度],而 Mapbox 匹配 API 返回 GEOJson 格式,即 [经度,纬度]。
我应该在绘制之前手动切换响应的坐标还是我做错了?
谢谢。
编辑2:看来问题实际上是不同的格式。有关它的更多信息可以在这篇文章中找到 更改返回对象中坐标的顺序非常繁琐,因此非常适合解决这个问题。