稍后如何在我的代码中使用事件内部生成的变量Leflet图层数组

问题描述

我有一个事件,在地图上绘制多边形后会生成一个包含位于该多边形上的兴趣点的小叶图层阵列。此事件正常。

重点是,我想将此层数组保存在变量中的某个位置,以便以后在我的代码中使用它。我认为这是一个简单的问题,但我是Javascript和Leaflet的新手,无法找到解决方案。这是我的代码

mymap.on('pm:create',function(e){
                    var jsn = e.layer.toGeoJSON().geometry;
                    $.ajax({
                            url:'load_data_testing_osm.PHP',data: {id:'geojsonpol',geojsonpol:JSON.stringify(jsn)},type:'POST',success: function(response){
                                if (response.substring(0,5)=="ERROR"){
                                    alert(response);
                                } else {
                                    alert(response);
                                    jsnPoi = JSON.parse(response);
                                    var fromProjection = '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs';
                                    var toProjection = "+proj=longlat +ellps=wgs84 +datum=wgs84 +no_defs ";
                                    var lyrPoi = L.geoJSON(jsnPoi,{coordsToLatLng:reproject,pointToLayer:returnPoiMarkerOsm});
                                }
                            },error:function(xhr,status,error){
                                $('#divProjectAffected').html("ERROR: "+error);
                            }
                });
            });

稍后我想在代码中使用var lyrPoi

解决方法

您可以轻松创建全局变量:

var allPOIs = [];
mymap.on('pm:create',function(e){
                    var jsn = e.layer.toGeoJSON().geometry;
                    $.ajax({
                            url:'load_data_testing_osm.php',data: {id:'geojsonpol',geojsonpol:JSON.stringify(jsn)},type:'POST',success: function(response){
                                if (response.substring(0,5)=="ERROR"){
                                    alert(response);
                                } else {
                                    alert(response);
                                    jsnPoi = JSON.parse(response);
                                    var fromProjection = '+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs';
                                    var toProjection = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ";
                                    var lyrPoi = L.geoJSON(jsnPoi,{coordsToLatLng:reproject,pointToLayer:returnPoiMarkerOsm});
                                    lyrPoi.getLayers().forEach((layer)=>{
                                        allPOIs.push(layer)
                                    });
                                }
                            },error:function(xhr,status,error){
                                $('#divProjectAffected').html("ERROR: "+error);
                            }
                });
            });

ajax调用后,您将拥有一个包含所有图层的allPOIs填充数组。

修改

  1. 在地图上显示图层的透明度:
var lyrPoi = L.geoJSON(jsnPoi,pointToLayer:returnPoiMarkerOsm}).addTo(map);
  1. 遍历数组并将其添加到地图:
allPOIs.forEach((layer)=>{
     layer.addTo(map);
});

如果图层添加两次,这没问题。