Leaflet:如何交换从ajax调用中收到的坐标

时间:2017-04-21 17:57:50

标签: javascript ajax leaflet coordinates

我正在使用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) {
 
    ...
    }
    });

我也对其他可能解决问题的建议持开放态度。

1 个答案:

答案 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]);
    }
});