Leaflet 获取传单中单击的所有图层的所有功能
我在用传单。有没有人建议使用一个函数来返回用户单击的所有层的所有特性 例如,我有一个点图层和一个多边形图层。当用户单击某个点时,我希望显示该点的属性以及该点下方的多边形。如果用户仅单击多边形,则应仅显示多边形的属性 提前感谢您提供的任何帮助Leaflet 获取传单中单击的所有图层的所有功能,leaflet,Leaflet,我在用传单。有没有人建议使用一个函数来返回用户单击的所有层的所有特性 例如,我有一个点图层和一个多边形图层。当用户单击某个点时,我希望显示该点的属性以及该点下方的多边形。如果用户仅单击多边形,则应仅显示多边形的属性 提前感谢您提供的任何帮助 从传递到click处理程序的事件中单击的捕获点 创建点的边界框(L.latLngBounds) 在地图中的每个可见层中循环。\u层 查找要素图层:如果图层是要素图层,则它具有\u layers属性;每个要素一个图层 循环遍历每个要素图层中的每个要素,并获取或
click
处理程序的事件中单击的捕获点L.latLngBounds
)地图中的每个可见层中循环。\u层
\u layers
属性;每个要素一个图层//创建映射
var map=L.map('map').setView([39.5,-0.5],5);
//设置OSM层
var baseLayer1=L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'{
maxZoom:18,
名称:“基层1”
}).addTo(地图);
函数clickHandler(e){
var clickBounds=L.latLngBounds(e.latlng,e.latlng);
var intersectingFeatures=[];
用于(地图中的变量l.\u图层){
var overlay=地图。_层[l];
如果(覆盖层){
用于(覆盖层中的变量f.\u层){
var feature=叠加层[f];
var界;
if(feature.getBounds)bounds=feature.getBounds();
否则,如果(特征){
边界=L.latLngBounds(特征。_latlng,特征。_latlng);
}
如果(边界&&单击边界。相交(边界)){
相交特征。推(特征);
}
}
}
}
//如果至少找到一个功能,请显示它
if(相交特征.长度){
var html=“Found features:“+intersectingFeatures.length+”
“+intersectingFeatures.map(函数(o)){
返回o.properties.type
}).join(“
”);
map.openPopup(html,e.latlng{
偏移量:L点(0,-24)
});
}
}
map.on(“单击”,clickHandler);
//添加一些标记
功能createMarker(纬度、液化天然气){
var标记=L.标记([lat,lng]);
marker.on(“单击”,clickHandler);
marker.properties={
类型:“点”
};//添加一些伪属性;通常是geojson
返回标记;
}
var markers=[createMarker(36.9,-2.45),createMarker(36.9,-2.659),createMarker(36.83711,-2.464459)];
//创建组以保留标记,它将作为覆盖添加
var overlay=L.featureGroup(标记).addTo(地图);
//显示特征
map.fitBounds(overlay.getBounds(){
最大缩放:11
});
//为形状或任何东西创建另一层
var circle=L.circle([36.9,-2.45],2250{
颜色:“红色”,
填充颜色:“#f03”,
填充不透明度:0.5
});
在('click',clickHandler'上画圆圈);
circle.properties={
类型:“圆”
};
var overlay2=L.featureGroup([圆圈]).addTo(地图)代码>
#地图{
高度:400px;
}
除了@nothing是必要的响应外,请参阅(多边形中的点)了解传单顺便说一句,这也是一个非常有用的技巧,用于在不使用标记群集插件时解决功能之间的歧义(如果多个匹配项而不是一个匹配项)。好的,因此解决方案并不完美。虽然JSFIDLE场景可行,但多边形(cirlce)非常小。此过程不测量“在多边形中单击”,而是测量“在多边形的方形边界框中单击”。它可能适用于多边形中的点函数。是的,你是对的,这可能不像非正方形几何体那样理想。我使用这种技术进行自己的自定义搜索(在搜索栏中键入一些数据,然后在可见层中搜索属性与搜索匹配的记录,然后显示“功能结果”列表)。但是,如果您使用Toni BCN发布的内容(多边形中的点插件)来扩充我的解决方案,您可以验证该点是否位于与边界框相交的多边形之一中-这仍然可以减少问题空间(需要测试的多边形更少)。在第6步之后,测试多边形中的点(或任何形状)。您是否有机会尝试在要素层中循环的技巧?