我正在使用leaflet.draw,当创建一个矩形时,我使用layer.toGeoJSON()获取矩形数据,然后使用ajax将其保存到数据库中。
之后,当用户再次显示地图时,我正在加载以前保存的数据,并使用L.GeoJSON.geometryToLayer()
将它们推送到为leaflet.draw保留的featureGroup中。问题是我之前创建的矩形现在是leaflet.draw的真正多边形。
geoJson规范中不存在“矩形”,所以我可以理解。
现在,在geojson的“属性”中,我知道前一个形状是一个矩形,其中“type”属于。
我的问题是:有没有办法在leaflet.draw的观点中强制将形状变成矩形?
提前致谢!
答案 0 :(得分:6)
我遇到了同样的问题,并提出了一个对我有用的解决方案,虽然它不是最优雅的方法。
使用leaflet.draw我收到一个新图层,我在其上调用layer.toGeoJSON()将矩形保存到我的数据库中。在刷新页面时,我将GeoJSON表示从我的数据库中拉回来并将其存储为:
var geojson = JSON.parse(geojson_string);
我首先尝试的是从点构建我自己的Rectangle并将其添加到drawingItems。
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);
这成功创建了一个Rectangle,leaflet.draw识别并允许编辑工具正常工作。