5

我正在使用leaflet.draw,当创建一个矩形时,我正在使用layer.toGeoJSON() 获取矩形的数据,然后我使用ajax 将它保存到一个数据库中。

之后,当用户再次显示地图时,我正在加载以前保存的数据,并使用 L.GeoJSON.geometryToLayer() 将它们推送到为 leaflet.draw 保留的 featureGroup

问题是我之前创建的矩形现在是leaflet.draw 的真实多边形。

geoJson 规范中不存在“矩形”,所以我可以理解。

现在,在geojson的“属性”中,我知道以前的形状是一个矩形,带有“类型”属性。

我的问题是:有没有办法在 leaflet.draw 的角度强制将形状变成矩形?

提前致谢 !

4

1 回答 1

6

我遇到了同样的问题,并提出了一个对我有用的解决方案,尽管它不是最优雅的方法。

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

var geojson = JSON.parse(geojson_string);

我首先尝试的是从这些点构建我自己的Rectangle并将其添加到 drawItems。

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);

这成功地创建了一个 Leaflet.draw 识别并允许编辑工具正常工作的矩形。

于 2015-02-03T20:57:24.460 回答