如何使用 Python 中的 NetworkX 从点云中创建图形以进行寻路?

问题描述 投票:0回答:0

我想在 Python 中使用 NetworkX 从点云中创建一个图形用于寻路。点云位于 .las 文件中,并按可行走点(地面、楼梯等)和不可行走点(墙壁、建筑物等)进行分类。现在问题是点云被减少到点到点之间的平均距离为 0.5 米。这意味着当我在图表中创建连接所有可步行点的边时,可能会创建一个直接穿过一堵小墙的连接。现在我的问题是,如何创建一个只包含不与墙相交的边的图形?我想从所有可步行点(平均距离 0.5 m)和所有不可步行点创建一个图表,然后删除所有相交边。我在 QGIS 中对此进行了模拟,并制作了屏幕截图以添加到问题中。可步行网络为蓝色,不可步行网络为红色。输出应该类似于绿色网络。

problem: edges of the network span over walls (red)

result: Network whitout intersections with not walkable network

我试图删除所有相交的边:

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)
python networkx graph-theory path-finding point-clouds
© www.soinside.com 2019 - 2024. All rights reserved.