Como converter recursos simples de linha em rede topológica?

12

usando Gdal / OGR, existe uma maneira de converter uma camada de linha shp, kml ou PostGIS em uma rede de nós e segmentos para que possa ser usada em pacotes como o networkx?

dassouki
fonte
2
Provavelmente vale a pena notar que, embora o OGR e o NetworkX digam que apóiam GML, o primeiro se refere Geography Markup Languageenquanto o último é Graph Modelling Language.
fmark 5/08/10

Respostas:

2

A julgar pela lista networkx de formatos de gráficos importáveis e formatos suportados pelo GDAL , duvido que essa conversão seja possível.

underdark
fonte
isso é um negócio ruim. Então, como posso fazer uma análise de rede?
dassouki
@dassouki - Inicie um projeto de código aberto! Está na minha lista, mas no momento. Gostaria da oportunidade de colaborar com isso, se outros estiverem interessados.
fmark 5/08/10
@fmark já tem transpotools.com
dassouki
@dassouki - Parece emocionante! Em que estágio está o projeto? A página inicial diz TranspoTools Will be here shortly. Existe algum código no repositório de códigos do google? Tudo o que pude ver estava vazio.
fmark
@dassouki - Apenas para confirmar, não sei muito sobre o campo de análise de transporte (meu interesse em GIS não está muito além do cálculo da distância da rede nesta fase), mas ficaria feliz em colaborar em uma ogr2networkxferramenta de tipo.
fmark 5/08/10
2

Você não mencionou especificamente que tipo de análise de rede deseja fazer, mas se estiver interessado em rotear, há algumas opções:

PgRouting http://pgrouting.postlbs.org/ trabalha com dados no PostGIS para fazer análise de roteamento. Ele suporta os algoritmos Dijkstra de caminho mais curto, caminho mais curto A *, estrela cadente de caminho mais curto e vendedor ambulante (TSP). Também faz cálculos de distância de condução. Uma lista de exemplos de aplicativos usando o PgRouting pode ser encontrada em http://pgrouting.postlbs.org/wiki/pgRoutingDemo PgRouting, no aplicativo Ride the City http://www.ridethecity.com/.

O projeto OpenRouter http://wiki.osgeo.org/wiki/OpenRouter. Este projeto parece interessante, mas não particularmente maduro neste momento.

(Desculpas pelos URLs citados, mas não tenho cred o suficiente para postar> 1 URl ...)

DavidF
fonte
+1 para você. Estou pensando em me afastar dos dados do openstreet e postgis devido a limitações de dados e ao fato de que estamos descartando o postgis por enquanto. Geralmente, fornecemos nossos próprios dados que são muito melhores que o Openstreet, mas, ao mesmo tempo, não queremos nos limitar ao pgrouting. A outra questão é que, digamos, queremos implementar uma coleta de lixo compatível com python ou arcgis ou com problemas de carteiro chinês ou vendedor da Traveler.
Dassouki 5/08
Você já viu o SpatiaLite? Isso daria a você um banco de dados espacial OpenSource que, se baseado em arquivo e independente de plataforma. Eu nunca usei isso, mas parece que não há capacidade de roteamento com SpatiaLite < gaia-gis.it/spatialite/spatialite-network-2.3.1.html >
davidf
Além disso, obrigado por trazer o NetworkX à minha atenção. Parece um módulo Python muito legal.
davidf
2

Eu acho que a resposta depende. A maioria dos formatos GIS não inclui explicitamente informações de adjacência (por exemplo, não há indicadores em um .shp cheio de recursos de linha simples para indicar que dois recursos compartilham um ponto de extremidade comum), que é um diferencial para lê-los diretamente em uma rede.

De uma olhada rápida no código, parece que o pacote de rede de utilitários vinculado pelo scw redescobrirá essas informações apenas se os terminais forem idênticos bit a bit. Isso pode ser bom o suficiente para a maioria das necessidades, incluindo a sua! (Eu posso estar errado sobre isso, já que foi apenas uma espiada superficial.)

Para algo mais robusto - por exemplo, você pode criar novos nós na rede onde duas arestas se cruzam ou gostaria de lidar com perturbações que tornam os pontos de extremidade sobrepostos muito ligeiramente diferentes - você precisará procurar uma abordagem que inspeciona a geometria mais profundamente.

Fiz algo semelhante com o Boundary Generator para recuperar informações de adjacência de rede dos polígonos: plataforma errada, linguagem e primitivo geométrico para você, infelizmente. No entanto, pode ser interessante saber como abordar problemas de robustez.

Dan S.
fonte
+1 ... Não sei o que você quer dizer com plataforma errada? Entendo sua explicação, e realmente impressiona não poder converter os dados em nós e pesos. os únicos dois programas que fazem isso a partir de arquivos SHP são TransCAD e EMME2 / 3
dassouki
Por "plataforma errada", quis dizer apenas que o Boundary Generator foi escrito para o ambiente ArcGIS, pelo menos por enquanto. :) Precisaria de alguma adaptação para trabalhar com o OGR. (Também seria necessário um pouco de código novo para descobrir pontos de extremidade coincidentes de linhas, em vez de arestas coincidentes de polígonos. Eu poderia adicionar isso à próxima versão se / quando tiver tempo. Parece que poderia ser muito útil .)
Dan S.
0

Há algum código geodjango no MarineMap que pode ser adaptável à tarefa.

fmark
fonte
legal, podemos discutir isso para cumprir seu objetivo de ogr2netx ahmed em elegantdesigns.ca
dassouki