我想在 Python 中使用 NetworkX 从点云中创建一个图形用于寻路。点云位于 .las 文件中,并按可行走点(地面、楼梯等)和不可行走点(墙壁、建筑物等)进行分类。现在问题是点云被减少到点到点之间的平均距离为 0.5 米。这意味着当我在图表中创建连接所有可步行点的边时,可能会创建一个直接穿过一堵小墙的连接。现在我的问题是,如何创建一个只包含不与墙相交的边的图形?我想从所有可步行点(平均距离 0.5 m)和所有不可步行点创建一个图表,然后删除所有相交边。我在 QGIS 中对此进行了模拟,并制作了屏幕截图以添加到问题中。可步行网络为蓝色,不可步行网络为红色。输出应该类似于绿色网络。
我试图删除所有相交的边:
def remove_intersecting_edges(G1, G2):
# Loop over edges in G1
for u1, v1 in G1.edges():
# Create LineString object for edge
edge1 = LineString([G1.nodes[u1]['pos'], G1.nodes[v1]['pos']])
# Loop over edges in G2
for u2, v2 in G2.edges():
# Create LineString object for edge
edge2 = LineString([G2.nodes[u2]['pos'], G2.nodes[v2]['pos']])
# Check if edges intersect
if edge1.intersects(edge2):
#check if edges exists and thn remove (to avoid NetworkXError: The edge 0-1983 is not in the graph):
if G1.has_edge(u1, v1):
G1.remove_edge(u1, v1)
if G2.has_edge(u2, v2):
G2.remove_edge(u2, v2)