我使用的是leaflet.draw,当创建一个矩形时,我使用layer.toGeoJSON()获取矩形的数据,然后使用ajax将其保存到数据库中。
在此之后,当用户再次显示地图时,我将加载以前保存的数据,并使用L.GeoJSON.geometryToLayer()将它们推入为leaflet.draw保留的featureGroup中
问题是我之前创建的矩形现在是leaflet.draw的一个真正的多边形。
"Rectangle“在geoJson规范中是不存在的,所以我可以理解。
现在,在geojson的“属性”中,我知道之前的形状是一个矩形,带有"type“属性。
我的问题是:从leaflet.draw的角度看,有没有一种方法可以将形状强制为矩形?
提前感谢!
发布于 2015-02-04 04:57:24
我遇到了同样的问题,并想出了一个对我有效的解决方案,尽管这不是最优雅的方法。
使用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()所需的坐标对颠倒了(一个是lng,另一个是lng,lat ),这导致创建矩形的位置完全错误。为了解决这个问题,我首先构造了一个GeoJSON层,这会产生一个多边形,然后使用该表示的边界来构造我的矩形。
var geojson_layer = L.GeoJSON.geometryToLayer(geojson);
var rect = L.rectangle(geojson_layer.getBounds());
drawnItems.addLayer(rect);这将成功创建一个矩形,leaflet.draw可以识别该矩形,并允许编辑工具正常工作。
https://stackoverflow.com/questions/19976063
复制相似问题