查找在Leaflet中创建的最新图层的传单ID

时间:2016-11-03 06:38:43

标签: javascript leaflet leaflet.draw

我正在使用小册子draw library

向图层组“drawitems”添加图层
drawnItems.addLayer(L.polygon(polygon));

我需要在创建时立即找到使用上面代码创建的图层的传单ID。这发生在一个循环中。我正在添加多个图层。

我的目标是将用户编辑的形状保存到数据库中。这些形状先前已创建,然后存储在数据库中,然后在地图上呈现。为此,我计划使用分配给每个形状的leaflet id,然后使用“draw:edited”事件中的一些逻辑找到相应的db条目。

4 个答案:

答案 0 :(得分:2)

只需添加最新图层的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。

答案 1 :(得分:0)

我解决了这个问题。我在地图上加载形状时,在数据库ID和传单形状id(leaflet_id)之间创建了一个“hashmap”。然后在“draw:edited”中,我找到了用户在“key”= leaflet_id的帮助下编辑的对象的数据库id。因此,我能够将用户所做的更改保存在同一个数据库记录中。

答案 2 :(得分:0)

var polygon = new L.Polygon([
                [51.51, -0.1],
                [51.5, -0.06],
                [51.52, -0.03]
            ]);
polygon.options.id = 1;
drawnItems.addLayer(polygon);

答案 3 :(得分:0)

就像创建最新图层的_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).