2013-11-14 64 views
3

我使用leaflet.draw,當創建一個矩形時,我使用layer.toGeoJSON()獲取矩形的數據,然後將其保存到數據庫中使用ajax。告訴leaflet.draw一個geojson多邊形是一個矩形

之後,當用戶再次顯示在地圖上,我加載以前保存的數據,並把它們推到了使用L.GeoJSON.geometryToLayer leaflet.draw保留的featureGroup()

問題是我的以前創建的矩形現在是leaflet.draw的真正多邊形。

「矩形」在geoJson規範中不存在,所以我可以理解。

現在,在geojson的「屬性」中,我知道以前的形狀是一個矩形,「類型」attribut。

我的問題是:有沒有辦法強制一個形狀爲leaflet.draw的角度矩形?

在此先感謝!

+0

我正在做同樣的事情。你解決了嗎?還有一個問題:你如何在GeoJSON輸出中包含SRS信息 – jorgeas80

+0

我沒有解決問題atm :( – user1815190

+0

爲什麼你將它添加到爲leaflet.draw保留的featureGroup?爲什麼不把它添加爲geojson覆蓋? – sfletche

回答

4

我遇到了同樣的問題,想出了一個適用於我的解決方案,雖然它不是最優雅的方法。

使用leaflet.draw我收到一個新圖層,我將其調用layer.toGeoJSON()將矩形保存到我的數據庫。在頁面的刷新,我拉那以GeoJSON表示回從我的數據庫,並與存放:

var geojson = JSON.parse(geojson_string); 

我試了一下第一是建立從點我自己Rectangle並將其添加到drawnItems。

var bounds = L.latLngBounds(geojson.geometry.coordinates); 
var rect = L.rectangle(bounds); 
drawnItems.addLayer(rect); 

此代碼沒有拋出錯誤,但它也沒有在地圖上顯示矩形。經過進一步調查,我發現layer.toGeoJSON()輸出的座標對和L.latLngBounds()所需的座標對相反(即一個是[lat,lng],另一個是[lng,lat]),要創建的矩形,但完全在錯誤的位置。爲了解決這個問題,我首先將該圖層構建爲一個GeoJSON圖層,並生成一個多邊形,然後使用該圖像的邊界來構造我的Rectangle。

var geojson_layer = L.GeoJSON.geometryToLayer(geojson); 
var rect = L.rectangle(geojson_layer.getBounds()); 
drawnItems.addLayer(rect); 

這成功創建了一個Rectangle,Leaflet.draw可識別並允許編輯工具正常工作。

相關問題