2017-04-21 49 views
0

我正在使用Leaflet 1.0.3和一些插件,包括Leaflet.ajax。我的L.geo.ajax調用正在工作並返回geojson對象,但是,座標是相反的。我創建了一個函數來解決這個問題:單張:如何交換從ajax調用接收的座標

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

歡迎來到SO!

首先確保您的座標確實相反。

注意,GeoJSON格式導出預計[longitude, latitude],而單頁通常期望[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]); 
    } 
}); 
+0

謝謝您的答覆。它仍然沒有工作,但我想知道,如果只是因爲我不知道如何使用新返回COORDS作爲一個功能pointToLayer的經緯度?努力吧! –

+0

不幸的是,我無法控制我給出的json,所以我必須使用這個工作。 –

+0

好的!有用!基本上如你所說。我添加了一個妨礙其正常工作的錯字。再次感謝!! –