告诉leaflet.draw,一个GeoJSON多边形是一个矩形。

6
我正在使用leaflet.draw,当创建一个矩形时,我使用layer.toGeoJSON()获取矩形的数据,然后使用ajax将其保存到数据库中。之后,当用户再次显示地图时,我会加载先前保存的数据,并使用L.GeoJSON.geometryToLayer()将它们推入为leaflet.draw保留的featureGroup中。
问题是我之前创建的矩形现在成了leaflet.draw中的实际多边形。
“矩形”在geoJson规范中不存在,所以我可以理解这一点。
现在,在geojson的“属性”中,我知道之前的形状是一个带有“type”属性的矩形。
我的问题是:是否有办法从leaflet.draw的角度强制使形状成为矩形?
提前感谢!

我正在做同样的事情。你解决了吗?还有一个问题:你是如何在GeoJSON输出中包含SRS信息的? - Jorge Arévalo
我目前还没有解决这个问题 :( - user1815190
你为什么要将它添加到leaflet.draw保留的featureGroup中?为什么不只将其作为geojson叠加层添加? - sfletche
1个回答

7

我遇到了同样的问题,并想出了一个适合我的解决方案,虽然它不是最优雅的方法。

使用 leaflet.draw ,我接收一个新图层,在此调用 layer.toGeoJSON() 方法将矩形保存到数据库中。在页面刷新时,我从数据库中获取该 GeoJSON 表示,并将其存储为:

var geojson = JSON.parse(geojson_string);

我首先尝试的是根据点构建自己的矩形,并将其添加到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 层,这会产生一个多边形,然后使用该表示法的边界来构建我的矩形。
var geojson_layer  = L.GeoJSON.geometryToLayer(geojson);
var rect = L.rectangle(geojson_layer.getBounds());
drawnItems.addLayer(rect);

这成功地创建了一个矩形,leaflet.draw 可以识别并允许编辑工具正确地工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接