Javascript 查找在传单中创建的最新图层的传单id

Javascript 查找在传单中创建的最新图层的传单id,javascript,leaflet,leaflet.draw,Javascript,Leaflet,Leaflet.draw,我正在使用传单向图层组“drawnitems”添加图层 我需要找到传单ID的图层创建后立即使用上述代码创建。这是一个循环。我正在添加多个层 我的目标是将用户编辑过的形状保存到数据库中。这些形状是先前创建的,然后存储在数据库中,然后在地图上渲染。为此,我计划使用分配给每个形状的传单id,然后使用“draw:edited”事件中的一些逻辑查找相应的db条目。好的,只需获取添加的最新图层的id,您可以执行以下操作: for(layer of polyLayers) { dra

我正在使用传单向图层组“drawnitems”添加图层

我需要找到传单ID的图层创建后立即使用上述代码创建。这是一个循环。我正在添加多个层


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

好的,只需获取添加的最新图层的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

好的,要获得添加的最新图层的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

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

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

只需获取您最近创建的图层的
\u单张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);
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).
let polygon=L.polygon([],{color:'red'});
//这样添加
让layer=polygon.addTo(this.draurementslayer);
//或者这样(是一样的)
this.drawermentslayer.addLayer(多边形);
console.log(panelPolygon.\u传单\u id)//n
>>47(在我的例子中)。

只需获取创建的最新图层的
\u传单\u 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).
let polygon=L.polygon([],{color:'red'});
//这样添加
让layer=polygon.addTo(this.draurementslayer);
//或者这样(是一样的)
this.drawermentslayer.addLayer(多边形);
console.log(panelPolygon.\u传单\u id)//n
>>47(在我的例子中)。

什么是“传单ID不稳定”?什么时候更改?我的意思是,如果您使用相同的数据库ID添加同一层两次,那么您将有两个不同的传单ID。我知道传单ID在每个会话中都会更改。但我的应用程序功能在一个会话内。什么是“传单ID不稳定”?什么时候更改?我的意思是,如果您使用相同的数据库ID添加同一层两次,那么您将有两个不同的传单ID。我知道传单ID在每个会话中都会更改。但是我的应用程序功能在一个会话内。它工作了吗?谢谢回答。我已经发布了我的答案。它有效吗?谢谢你的回答。我已经发布了我的答案。请描述,你改变了什么以及为什么,以帮助他人识别问题并理解此答案请描述,你改变了什么以及为什么,以帮助他人识别问题并理解此答案