Cerchi alternative a pgRouting per il routing open source / analisi di rete?


35

Mi chiedevo se ci fossero alternative agli strumenti di pgRouting .

Pensandoci un po ', penso che l'unica alternativa sia usare R o RPY per fare l'analisi.

Fondamentalmente sto cercando di risolvere i problemi di routing basati su database non PostGIS. Poiché la maggior parte dei miei dati è effettivamente archiviata in un formato diverso; tuttavia, non è difficile da convertire. Sto scoprendo che pgRouting al mio stupido cervello sciocco è difficile da implementare. Quindi forse una soluzione non di database che posso facilmente modificare sarebbe l'ideale per me

Risposte:


21

[Modifica: questo è stato sostituito da nx_spatial che è disponibile da pypi (easy_install nx_spatial). L'importazione di shapefile è ora standard in networkx 1.4 ]

Sono stato un po 'delusi per la mancanza di strumenti di rete geometrici in ESRI Python GP API, così ho scritto qualcosa che carica Shapefiles e classi di entità geografiche in NetworkX grafici direzionali (digrammi).

È ancora in fase di elaborazione, ma potrebbe essere un buon punto di partenza per qualcosa che può aiutare con il tuo problema.

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

Campioni:

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]

La rete è ereditata da networkx.DiGraph, quindi tutte queste funzionalità sono disponibili.



5

C'è Flowmap , un pacchetto GIS di nicchia progettato per gestire i problemi di analisi della rete.

Se hai un caso d'uso abbastanza semplice, Quantum Navigator basato su QGIS potrebbe fare il trucco.

GRASS supporta anche l' analisi di rete , anche se potrebbe non valere la pena attrarre le cose all'interno dell'ambiente.


4

Se stai cercando una soluzione pitonica programmatica, dai un'occhiata a networkx


Qualche libreria per passare da .shpa networkx? Potrei costruirne uno io stesso in Python, ma non vorrei reinventare la ruota ...
fmark

4
Non è esattamente una corrispondenza 1: 1 poiché gli shapefile memorizzano i dati come semplici funzionalità, non come reti topologiche. Quindi devi prima conoscere / assumere alcune cose sul tuo set di dati di origine - principalmente che tutte le intersezioni sono nodi terminali per un linestring. Ecco un esempio dell'uso di geodjango per convertire funzioni semplici in un grafico networkx: code.google.com/p/marinemap/source/browse/lingcod/spacing/…
perrygeo

3

Puoi dare un'occhiata al progetto GraphHopper open source - un pianificatore di rotta veloce e flessibile. Provalo qui . Nota: sono l'autore


Sto garantendo GraphHopper in quanto è semplicissimo da configurare e utilizzare.
bugmenot123



2

Negli ultimi anni abbiamo anche svolto alcune ricerche, ma siamo ancora soddisfatti di pgRouting e riteniamo che sia la soluzione migliore per le nostre esigenze di routing GIS. Purtroppo non c'è molto in giro che io conosca (senza dover pagare migliaia di euro / dollari). Lavoriamo con Navtech -Data, che ha una rete perfetta con cui lavorare ma non è economica. Di tanto in tanto ci provavamo anche con OSM che funzionava bene ... ma creava sempre dei problemi e quindi non lo faceva mai in produzione.

Ci siamo anche imbattuti nel summenzionato progetto GraphHopper open source (alcune settimane fa) e pensiamo che abbia ottime prestazioni e possibilità. Per quanto ne so, hanno anche OSM Data in esecuzione all'interno del loro progetto.



1

Molti problemi di routing utilizzano l'algoritmo di Dijkstra per determinare il percorso più breve. È relativamente semplice codificare: http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

Inoltre, Guido van Rossum ha scritto un primo saggio sui grafici in Python. Il suo breve brano include un approccio per la struttura e la codifica dei dati di percorsi primitivi: http://www.python.org/doc/essays/graphs.html

Ci sono molti pacchetti di routing là fuori. Per scopi specificamente geografici, oltre a pgRouting, vengono in mente graphserver (http://bmander.github.com/graphserver/) e ESRI ArcGIS Network Analyst. La comunità di analisi dei social network ha un elenco di software di analisi dei grafici su: http://www.insna.org/software/index.html e http://www.insna.org/software/software_old.html . Molti di questi pacchetti sono open source e rilevanti in un contesto geografico. Per calcoli altamente sofisticati, robusti o complessi, vale la pena indagare sui pacchetti di programmazione lineare come CPLEX e Lindo Lingo.


il problema è che la maggior parte di queste soluzioni necessita di un sistema di nodi e collegamenti, e di solito i dati GIS non vengono archiviati in questo modo
dassouki,

1
L'analista di rete costa circa $ 2.500 e non è davvero interessato a fare un simile acquisto ora. Preferirei avere una soluzione
pitonica

2
Dijjkstra è per una grafica molto semplice. Per problemi di vita reale, di solito è un algoritmo molto pesante e lento. Inoltre, il software ESRI, poiché non è di origine aperta, è difficile da migliorare e viene lentamente lasciato indietro a favore di altri strumenti.
María Arias de Reyna Domínguez,

@dassouki tutti i dati GIS sono essenzialmente nodi e collegamenti, e strumenti come osm2pgrouting e altri script pgRouting in generale, convertono i dati GIS / spaziali esistenti nei nodi necessari e collegamenti e bordi che vengono utilizzati in pgRouting ...
DPSSpatial

1

Nella versione Alpha, ma sembra promettente:

GeoDaNet (Alpha) - Analisi del modello del punto spaziale su reti (basato sulla libreria Pyhon PySAL, concessa nel centro GeoDa).

( Diapositive , manuale , download .)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.