Procurando alternativas ao pgRouting para roteamento de código aberto / análise de rede?


35

Fiquei me perguntando se existem alternativas para as ferramentas pgRouting .

Pensando um pouco sobre isso, acho que a única alternativa é usar R ou RPY para fazer a análise.

Basicamente, estou tentando resolver problemas de roteamento com base em bancos de dados não-PostGIS. Como a maioria dos meus dados é realmente armazenada em um formato diferente; no entanto, não é tão difícil de converter. Estou descobrindo que é difícil implementar o pgRouting para o meu cérebro idiota. Talvez uma solução que não seja de banco de dados que eu possa ajustar facilmente seria ideal para mim

Respostas:


21

[Edit: isso foi substituído pelo nx_spatial, que está disponível no pypi (easy_install nx_spatial). A importação de shapefiles agora é padrão na redex 1.4 ]

Estive tipo de desapontado com a falta de ferramentas de rede geométricas em Python GP API da ESRI, então eu escrevi algo que carrega Shapefiles e classes de recurso em NetworkX gráficos direcionais (dígrafos).

Ainda é um trabalho em andamento, mas pode ser um bom ponto de partida para algo que pode ajudar com seu problema.

http://bitbucket.org/gallipoli/utilitynetwork/

Amostras:

from utilitynetwork import Network

net = Network()

#load single file, method reqs OGR
net.loadshp("/shapefiles/test.shp")

#load directory full of shapefiles
net.loadshp("/shapefiles")

#load a feature class, req ESRI gp object, should work with shps as well
import arcgisscripting
gp = arcgisscripting.create(9.3)
net.loadfc("C:\somedb.gdb\featureclass", gp)

#Accessing node/edge data is done by the key value (the geometry as a tuple).
#access node data at x=4, y=2
nodekey = (4, 2)
net.node[nodekey]

A rede é herdada do networkx.DiGraph, portanto, toda essa funcionalidade está disponível.



5

Há o Flowmap , um pacote GIS de nicho projetado para lidar com problemas de análise de rede.

Se você tiver um caso de uso bastante simples, o Quantum Navigator baseado em QGIS poderá executar o truque.

O GRASS também suporta análise de rede , embora possa não valer a pena o atrito de configurar as coisas dentro do ambiente.


4

Se você está procurando uma solução pitônica programática, dê uma olhada no networkx


Alguma biblioteca para passar .shppara a redex? Eu poderia construir um eu mesmo em Python, mas eu diria que reinventaria a roda ...
— fmark 30/07/2010

4
Não é exatamente uma correspondência de 1: 1, pois os shapefiles armazenam dados como recursos simples, não como redes topológicas. Portanto, você precisa conhecer / assumir algumas coisas sobre seu conjunto de dados de origem primeiro - principalmente que todas as interseções são nós terminais para uma cadeia de linhas. Aqui está um exemplo do uso do geodjango para converter recursos simples em um gráfico da redex
— perrygeo

3

Você pode dar uma olhada no projeto GraphHopper de código aberto - um planejador de rotas rápido e flexível. Experimente aqui . Nota: eu sou o autor


Estou atestando o GraphHopper, pois é super simples de configurar e usar.
— bugmenot123



2

Também fizemos algumas pesquisas nos últimos anos, mas ainda estamos satisfeitos com o pgRouting e achamos que é a melhor solução para nossas necessidades de roteamento GIS. Infelizmente, não há muito por que eu conheça (sem ter que pagar milhares de euros / dólares). Trabalhamos com a Navtech -Data , que possui uma rede perfeita para trabalhar, mas não é barata. Também tentamos de tempos em tempos com o OSM, que funcionava bem ... mas sempre criava alguns problemas e, portanto, nunca entrava em produção.

Também descobrimos o projeto GraphHopper de código aberto mencionado acima (algumas semanas atrás) e pensamos que ele tem muito bom desempenho e possibilidades. Tanto quanto eu sei - eles também têm OSM Data em execução dentro de seu projeto.



1

Muitos problemas de roteamento usam o algoritmo de Dijkstra para determinar o caminho mais curto. É relativamente simples de codificar: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

Guido van Rossum também escreveu um ensaio inicial sobre gráficos em Python. Seu pequeno artigo inclui uma abordagem para estruturas de dados de rotas primitivas e codificação: http://www.python.org/doc/essays/graphs.html

Existem muitos pacotes de roteamento por aí. Para propósitos geográficos específicos, além do pgRouting, o graphserver (http://bmander.github.com/graphserver/) e o ESRI ArcGIS Network Analyst vêm à mente. A comunidade de análise de redes sociais possui uma lista de softwares de análise de gráficos em: http://www.insna.org/software/index.html e http://www.insna.org/software/software_old.html . Muitos desses pacotes são de código aberto e relevantes em um contexto geográfico. Para cálculos altamente sofisticados, robustos ou complexos, vale a pena investigar os pacotes de programação linear como o CPLEX e o Lindo Lingo.


o problema é que a maioria dessas soluções precisam de um sistema de nós e ligações, e os dados de GIS normalmente não é armazenado dessa forma
— dassouki

11
O analista de rede custa cerca de US $ 2.500 e não está realmente interessado em fazer essa compra agora. Eu prefiro ter uma solução pythônico
— dassouki

2
Dijjkstra é para gráficos muito básicos. Para problemas da vida real, geralmente é um algoritmo muito pesado e lento. Além disso, o software ESRI, como não é de código aberto, é difícil de melhorar e está lentamente sendo deixado para trás em favor de outras ferramentas.
— María Arias de Reyna Domínguez

@dassouki todos os dados GIS são essencialmente nós e links, e ferramentas como osm2pgrouting e outros scripts pgRouting em geral, convertem dados GIS / espaciais existentes nos nós e links e arestas necessários que são usados ​​no pgRouting ...
— DPSSpatial

1

Na versão Alpha, mas parece promissor:

GeoDaNet (Alpha) - Análise de padrões de pontos espaciais em redes (com base na biblioteca PySAL Ptyhon, concedida no centro GeoDa).

( Slides , manual , download .)


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.