如何在传单中找到相邻的多边形
How to find adjacent polygons in leaflet
我正在使用传单,我想找到与所选图层相邻的所有图层。例如我有以下情况:
我想获取 adj1、adj2 和 adj3 图层,我尝试使用 intersection 和 contains 传单的方法,但它不起作用。对此有什么建议吗?
更新 1
layer.on('click', function(e) {
let isNeighboorAce = acesSelected.some(ace => { ace.poligon.getBounds().intersects(poligon.getBounds()) || ace.poligon.getBounds().contains(poligon.getBounds())});
if(isNeighboorAce) {
//Ci sono ace contigue quindi posso aggiungere
acesSelected.push(aceSelected);
layer.setStyle({fillOpacity: 0.4 , color: '#004691', weight: 3});
}
}
});
要知道两个多边形是否相邻,可以为每对点调用 getlatlngs method to get a list of points coordinates for each of them. Then use the distance 方法。如果对于任何一对,距离为 0,则 2 个多边形相邻。
编辑:
其实还是用pointToSegmentDistance比较好。因为2个相邻的多边形不一定共享一个点。在这种情况下,您循环遍历第一个多边形的所有线段(使用 getlatlngs)并计算到第二个多边形所有坐标的距离。
由于您似乎在处理行政边界的多边形,我更愿意使用 TopoJSON 来创建数据的拓扑表示。 (因为您可以合理保证边界将共享具有相同坐标的点)。
有很多方法可以解决这个问题。我建议准备邻接数据一次(使用topojson,提取每条边每侧的多边形ID信息,创建一个数据结构,将每个多边形的ID与数组相关联所有相邻的ID),并在Leaflet中加载两份数据(当前的GeoJSON数据,然后是邻接数据)。
我正在使用传单,我想找到与所选图层相邻的所有图层。例如我有以下情况:
我想获取 adj1、adj2 和 adj3 图层,我尝试使用 intersection 和 contains 传单的方法,但它不起作用。对此有什么建议吗?
更新 1
layer.on('click', function(e) {
let isNeighboorAce = acesSelected.some(ace => { ace.poligon.getBounds().intersects(poligon.getBounds()) || ace.poligon.getBounds().contains(poligon.getBounds())});
if(isNeighboorAce) {
//Ci sono ace contigue quindi posso aggiungere
acesSelected.push(aceSelected);
layer.setStyle({fillOpacity: 0.4 , color: '#004691', weight: 3});
}
}
});
要知道两个多边形是否相邻,可以为每对点调用 getlatlngs method to get a list of points coordinates for each of them. Then use the distance 方法。如果对于任何一对,距离为 0,则 2 个多边形相邻。
编辑: 其实还是用pointToSegmentDistance比较好。因为2个相邻的多边形不一定共享一个点。在这种情况下,您循环遍历第一个多边形的所有线段(使用 getlatlngs)并计算到第二个多边形所有坐标的距离。
由于您似乎在处理行政边界的多边形,我更愿意使用 TopoJSON 来创建数据的拓扑表示。 (因为您可以合理保证边界将共享具有相同坐标的点)。
有很多方法可以解决这个问题。我建议准备邻接数据一次(使用topojson,提取每条边每侧的多边形ID信息,创建一个数据结构,将每个多边形的ID与数组相关联所有相邻的ID),并在Leaflet中加载两份数据(当前的GeoJSON数据,然后是邻接数据)。