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.