我正在使用Leaflet 1.0.3和一些插件,包括Leaflet.ajax。我的L.geo.ajax调用正在工作并返回geojson对象,但坐标是相反的。我创建了一个函数来解决这个问题:
var convertLatLng = function (latlng) {
var temp = latlng[y];
latlng[y] = latlng[x];
latlng[x] = temp;
convertedLatLng = latlng;
return convertedLatLng;
console.log('this function is running')
}
但我的问题是我不知道把它放在哪里。我是否在geoJson调用中运行它?如果是的话,在哪里?这是ajax调用的片段:
var geojson = L.geoJson.ajax('http://www.iotwf.com/deployment_map/json', {
pointToLayer: function (feature, latlng) {
convertLatLng(latlng);
...
},
onEachFeature: function(feature, layer) {
...
}
});
我也对其他可能解决问题的建议持开放态度。
答案 0 :(得分:0)
欢迎来到SO!
首先确保你的坐标确实颠倒了。
请注意,GeoJSON格式需要[longitude, latitude]
,而Leaflet通常需要[latitude, longitude]
,在L.geoJSON()
工厂(和插件L.geoJson.ajax()
)的情况下除外,它会自动读取GeoJSON顺序并以正确的坐标构建图层。
如果您的坐标仍然相反,那么相应的修正显然可以直接纠正数据源中的顺序(或任何服务输出您的数据),以便您获得实际符合的GeoJSON数据。这将解决许多未来的麻烦。
如果那是不可能的,那么你的脚本中确实可以尝试一种解决方法。
最合适的方法可能是使用L.geoJSON
工厂的coordsToLatLng
选项。
更改其default implementation,您会得到类似的内容:
L.geoJson.ajax(url, {
coordsToLatLng: function (coords) {
// latitude , longitude, altitude
//return new L.LatLng(coords[1], coords[0], coords[2]); //Normal behavior
return new L.LatLng(coords[0], coords[1], coords[2]);
}
});