我正在使用传单绘图库将图层添加到图层组“drawnitems”
drawnItems.addLayer(L.polygon(polygon));
我需要在创建时立即找到使用上述代码创建的图层的传单 ID。这发生在一个循环中。我正在添加多个图层。
我的目标是将用户编辑的形状保存到数据库中。这些形状是先前创建的,然后存储在数据库中,然后在地图上呈现。为此,我计划使用分配给每个形状的传单 id,然后使用“draw:edited”事件中的一些逻辑找到相应的数据库条目。
我正在使用传单绘图库将图层添加到图层组“drawnitems”
drawnItems.addLayer(L.polygon(polygon));
我需要在创建时立即找到使用上述代码创建的图层的传单 ID。这发生在一个循环中。我正在添加多个图层。
我的目标是将用户编辑的形状保存到数据库中。这些形状是先前创建的,然后存储在数据库中,然后在地图上呈现。为此,我计划使用分配给每个形状的传单 id,然后使用“draw:edited”事件中的一些逻辑找到相应的数据库条目。
可以简单地获取添加的最新图层的 ID,您可以执行以下操作:
for(layer of polyLayers) {
drawnItems.addLayer(layer);
var leafletId = layer._leaflet_id
};
但我认为你的方法不是最好的解决方案,因为传单 ID 不稳定。最好动态创建图层变量并从存储图层的数据库中分配一个 ID。然后你可以通过它的数据库ID(例如myPolyLayers[idFromDataBase]
)获得每一层。做就是了:
var myPolyLayers = {};
for(layer of polyLayers) {
var id = Math.floor((Math.random() * 500) + 1); // The ID from the database
myPolyLayers[id] = layer
drawnItems.addLayer(layer);
//var leafletId = layer._leaflet_id
};
console.log(myPolyLayers[id]) // Get the layer with the ID given before
在这个片段中,我选择随机数的 ID 应该是您数据库中的 ID。
var polygon = new L.Polygon([
[51.51, -0.1],
[51.5, -0.06],
[51.52, -0.03]
]);
polygon.options.id = 1;
drawnItems.addLayer(polygon);
就像获取_leaflet_id
创建的最新图层一样简单,例如,如果我正在绘制多边形,例如:
let polygon = L.polygon([<my coords>], {color: 'red'});
// Added this way
let layer = polygon.addTo(this.drawElementsLayer);
// or this way (is the same)
this.drawElementsLayer.addLayer(polygon);
console.log(panelPolygon._leaflet_id) // n
>> 47 (in my eample case).
我解决了这个问题。在地图上加载形状时,我在数据库 ID 和传单形状 ID (leaflet_id) 之间创建了一个“哈希图”。然后在“draw:edited”中,我找到了用户在“key”=leaflet_id 的帮助下编辑的对象的数据库 id。因此,我能够将用户所做的更改保存在同一数据库记录中。