我遇到了同样的问题,并提出了一个对我有用的解决方案,尽管它不是最优雅的方法。
使用 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 识别并允许编辑工具正常工作的矩形。