Mais

NetworkX: salvando o caminho mais curto de dados do OpenStreetMap como um formato amigável OGR

NetworkX: salvando o caminho mais curto de dados do OpenStreetMap como um formato amigável OGR


Estou usando este script para importar dados OSM para um modelo baseado em GIS.

Isso deve ser executado independentemente de qualquer pacote de software, como QGIS, PostGIS ou ArcGIS.

Em seguida, crio um caminho mais curto entre dois nós da seguinte maneira:

shortest_path = nx.shortest_path (G, source = u'879835512 ', target = u'879912131') result_graph = G.subgraph (shortest_path)

Gostaria de visualizar (kml?) Os resultados do caminho mais curto e armazená-los (shp?).

Tenho a sensação de que preciso usar owrite_shpmas acho que só funciona se você já usouread_shpo que eu não fiz desde que estou importando diretamente do OSM.

EDITAR 1:

Com base no comentário de @gene, adicionei o seguinte código:

para e em result_graph.edges (): p0x = result_graph.node [e [0]] ['lat'] p0y = result_graph.node [e [0]] ['lon'] p1x = result_graph.node [e [1 ]] ['lat'] p1y = result_graph.node [e [1]] ['lon'] edge.append (LineString ([(p0x, p0y), (p1x, p1y)])) nodes = [] para n em result_graph.nodes (): px = result_graph.node [e [0]] ['lat'] py = result_graph.node [e [0]] ['lon'] nodes.append ((px, py)) G2 = nx.DiGraph () G2.add_nodes_from (nós)

Eu não acho que estou no caminho certo ainda. como parece que eu preciso manter as coordenadas de alguma forma com meus nós / links


Eu tentei isso:

road_cat = 'rodovia | tronco | primário | secundário | terciário | estrada | residencial | serviço | motorway_link | trunk_link | primary_link | secondary_link | teriary_link' G = read_osm (download_osm (-122.33,47.60, -122.31,47.61, highway_cat)) shortest_path = networkx.shortest_path (G, source = u'1810752839 ', target = u'3393331431') parts = [] para i no shortest_path: node = G.node [i] parts.append ([float (node ​​['lon'] ), float (node ​​['lat'])]) w = shapefile.Writer (shapefile.POLYLINE) w.line (parts = [parts]) w.field ('FIRST_FLD', 'C', '40') w .field ('SECOND_FLD', 'C', '40') w.record (FIRST_FLD = 'Primeiro', SECOND_FLD = "Linha") w.save ('C: / lixo / linha')

RESULTADO:


Basta olhar para NetworkX: write_shp

Grava um networkx.DiGraph em dois shapefiles, arestas e nós. Espera-se que os nós e arestas tenham uma chave Well Known Binary (Wkb) ou Well Known Text (Wkt) para gerar geometrias. Também são aceitáveis ​​nós com uma chave numérica de tupla (x, y).

Você não precisa usarread_shpantes, mas você deve converter os nós e arestas do dígrafo para o formato WKT.

Para isso, você pode usar o Shapely


Assista o vídeo: Import Streets from OpenStreetMaps RU