如何在我的代码中使用事件内部生成的变量(Leflet 层数组)later.on
How to use a variable (array of Leflet Layers) generated inside of a Event in my code later.on
我有一个事件,在地图上绘制一个多边形后生成一个 Leaflet 图层数组,其中包含位于多边形上的兴趣点。此事件运行正常。
关键是我想将这个层数组保存在变量中的某个位置,以便稍后在我的代码中使用它。我认为这是一个简单的问题,但我是 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
数组。
编辑
- 在地图上直接显示图层:
var lyrPoi = L.geoJSON(jsnPoi,{coordsToLatLng:reproject, pointToLayer:returnPoiMarkerOsm}).addTo(map);
- 遍历数组并将其添加到地图中:
allPOIs.forEach((layer)=>{
layer.addTo(map);
});
图层加两次没问题
我有一个事件,在地图上绘制一个多边形后生成一个 Leaflet 图层数组,其中包含位于多边形上的兴趣点。此事件运行正常。
关键是我想将这个层数组保存在变量中的某个位置,以便稍后在我的代码中使用它。我认为这是一个简单的问题,但我是 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
数组。
编辑
- 在地图上直接显示图层:
var lyrPoi = L.geoJSON(jsnPoi,{coordsToLatLng:reproject, pointToLayer:returnPoiMarkerOsm}).addTo(map);
- 遍历数组并将其添加到地图中:
allPOIs.forEach((layer)=>{
layer.addTo(map);
});
图层加两次没问题