To pytanie jest bardziej związane z zasobami, których mógłbym jeszcze nie zidentyfikować, chociaż przeszukiwałem internet od jakiegoś czasu.
W projekcie pracuję w tej chwili, muszę uruchomić algorytm najkrótszej ścieżki na wykresie przedstawiającym pokoje biurowe, korytarze, schody, windy i trasy między budynkami.
W przypadku warstwy prezentacji pomyślałem o użyciu skryptów Python z MapServer, ale teraz zastanawiam się, jak zbudować wykres z (plików kształtów przekonwertowanych na) db wygenerowanych z OpenEV bazy danych postGIS, aby łatwo było dodawać i usuwać krawędzie lub wagi lub informacje o punktach później.
Dla Pythona istnieje moduł o nazwie NetworkX że zajmuje się wykresami i chociaż kwestia ta została wychowana w Stack Exchange Network tutaj , wykres Staram się budować nie jest digraph ale undirectional jeden.
Aktualizacja: 5 dni temu sieć projektowa Ben Reilly została dodana do projektu networkX. Program Utilitynetwork tworzy ukierunkowany wykres na podstawie funkcji pliku kształtu.
Pytania pozostają otwarte dla podobnego podejścia do czytania funkcji z bazy danych postGIS.
Odpowiedzi:
NetworkX ma metodę konwersji ukierunkowanych wykresów na niekierowane .
Dodatkowo kod do odczytu pliku shapefile (lub katalogu plików shapefile) tak naprawdę nie musi generować ukierunkowanego wykresu, właśnie tego potrzebowałem w tym czasie. Nie próbowałem, ale zastępuję pojedynczą linię:
... może po prostu załatwić sprawę.
NetworkX wygląda na to, że będzie obsługiwał odczyt plików kształtów po wyjęciu z pudełka (z OGR) w wersji 1.4 ( funkcja ).
źródło
Czy zastanawiałeś się nad użyciem pgRouting?
http://www.pgrouting.org/docs/howto/topology.html#graphs-directed-undirected-reverse-costs
źródło
Nie jestem pewien, czy jesteś zainteresowany korzystaniem z innych frameworków lub czy już to rozwiązałeś, ale projekt Geodjango dodaje naprawdę ładne funkcje ORM do modeli danych GIS dla różnych baz danych obsługujących GIS, w tym postgres z zainstalowanymi powiązaniami PostGIS .
Link do Geodjango znajduje się tutaj: http://docs.djangoproject.com/en/dev/ref/contrib/gis/install/#overview
Zauważ, że Django jest strukturą internetową dla Pythona, geodjango zaczął edytować i wyświetlać dane GIS na potrzeby programowania stron WWW, ale daje także znacznie bardziej intuicyjny i potężny zestaw klas niż bezpośrednie wiązania pythonowe OGR (znacznie bardziej „pythoniczne” niż bezpośrednio „przekonwertowane ze składni C”, np. możesz bezpośrednio utworzyć klasę django.contrib.gis.geos.linestring.LineString zamiast tworzyć klasę ogr.Geometry ze stałą wkbLineString w konstruktorze).
W samouczku geodjango znajduje się: http://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/
Kroki potrzebne do skonfigurowania odczytu / zapisu z bazy danych Postgres są tak proste, jak użycie innych modeli python django, ból głowy polega na skonfigurowaniu geoprzestrzennej bazy danych. Aby załadować dane do bazy danych Postgres, zobacz odnośnik #layermapping w powyższym samouczku; jest to odwzorowanie pola między dostępnymi danymi w pliku kształtu na kolumny bazy danych, które są ustawione dla twojego modelu danych.
Zajmę co najmniej 2-3 godziny, aby przejrzeć samouczek i skonfigurować powiązania PostGIS i sprawdzić, czy to narzędzie GIS jest tym, czego szukasz.
Zauważ również, że jeśli masz bazę danych obsługującą GIS (np. Powiązania PostGIS dla pgsql), możesz wykonać „zawiera” „bezpośrednio” na danych geometrii bazy danych (linie / wielokąty) za pomocą funkcji przechowywanych w bazie danych (np .
ST_Contains(...)
: zobacz przykładowy SQL dla postgis / pgsql tutaj: http://postgis.refractions.net/docs/ch04.html#id2639062 ... i najlepsza część o Geodjango, jest to, że jest on zoptymalizowany do zrobienia tych wyszukiwań przestrzennych dla ciebie! .źródło