2013-11-14 41 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可识别并允许编辑工具正常工作。

相关问题