Jak korzystać z PostGIS do obsługi złożonych przepływów pracy geoprzetwarzania?

12

Nasza organizacja rozważa przeniesienie przepływu pracy geoprzetwarzania do PostGIS. Obecnie używamy ArcGIS z mnóstwem niestandardowych narzędzi Python używanych w ModelBuilder. Przenosimy większość naszych danych do PostGIS, aby mogły być wykorzystywane przez różne aplikacje, a teraz pytamy, czy sensowne jest również tam przetwarzanie danych.

Przetwarzamy dane w celu zapewnienia zgodności z naszym oprogramowaniem. Klient kupuje nasze oprogramowanie, przekazuje nam swoje dane, a my przetwarzamy je w celu zoptymalizowania do wykorzystania w naszym oprogramowaniu. Wymaga to od nas zbudowania różnych narzędzi do obsługi różnych jakości danych wejściowych. Nie możemy oczekiwać danych w określonym formacie lub schemacie, dlatego budujemy narzędzia do mapowania pól wejściowych na pola wyjściowe, parsowania pojedynczych pól na wiele pól, scalania wielu zestawów danych itp. Wykonujemy również połączenia przestrzenne, przecięcia, przycinanie białych znaków i łączą pola i wiele innych typowych operacji. PostGIS wydaje się być w pełni zdolny do spełnienia wszystkich naszych potrzeb przetwarzania.

Czy dla tych z was, którzy korzystają z PostGIS do przetwarzania danych, czy macie jakieś porady dotyczące organizacji, narzędzi do wykorzystania itp.?

  • czy używasz go w połączeniu z przetwarzaniem Pythona QGIS?
  • czy ludzie używają Python ORM do przetwarzania nie-sieciowego? Skłaniam się ku korzystaniu z GeoDjango, ponieważ ma on Python ORM dla PostGIS. Nasz wstępny test wykorzystania PostGIS do przetwarzania danych zawiera wiele dużych bloków tekstowych SQL w kodzie Pythona i uważamy, że GeoDjango ORM może pomóc w tworzeniu bardziej zarządzalnego i czytelnego kodu. Istnieje również GeoAlchemy ORM, który współdziała podobnie z PostGIS i nie wydaje się być tak specyficzny dla sieci, jak Django.

Nie słyszałem o ludziach korzystających z PostGIS do geoprzetwarzania tak często, jak widzę ludzi używających QGIS lub ArcGIS, więc chcę wiedzieć, czy jest to porównywalna alternatywa.

Garbarz
źródło
1
Czy cały proces jest „zapleczem”? Nie jestem użytkownikiem Django ani GeoDjango, ale myślę o tych produktach tylko do tworzenia stron internetowych (i więcej problemów niż są warte, IMHO). Dlaczego nie tylko kilka skryptów powłoki lub języka Python działa w wierszu poleceń (oczywiście w Uniksie) lub okresowo przez „cron”? (Zawsze uważam, że mniej kliknięć-kliknięć jest zawsze lepsze). Prawdopodobnie chciałbyś je uporządkować systematycznie, przynajmniej poprzez przychodzący strumień danych. Ponadto Postgis może prawdopodobnie kroić i kroić twoje dane bez QGIS - jakie konkretne rodzaje operacji masz na myśli?
forkandwait,
1
Tak, nasze przetwarzanie jest backendem. Jednak w końcu będziemy mieli mapę internetową OpenLayers, aby klienci mogli przeglądać i edytować ich dane. Możemy używać Django do kont użytkowników i administratorów aplikacji. Jeśli tak, to pomyślałem, że może to być kolejny powód, aby przyjrzeć się GeoDjango do przetwarzania, nawet jeśli Django został zbudowany przede wszystkim dla stron internetowych. Ten Large Scale tworzenie z Django Django prezentacja sugeruje, że nie jest tylko dla stron internetowych: slideshare.net/dibau_naum_h/large-scale-processing-with-django
Tanner
1
Do pracy z backendem użyłbym PostGIS, małego ogr2ogr, języka skryptowego (Python, Ruby, Tcl, cokolwiek) i wiersza poleceń unix. Unikałbym mieszania Django z tym, z wyjątkiem utrzymywania bazy danych w możliwie jak największym stopniu. Następnie, jeśli potrzebujesz, umieść na nim fronton. Moją zasadą jest: mniej kliknięć = większa wydajność (chociaż analitycy GIS czują się bardziej komfortowo z bzdurami Clickey-Clickey ... Mam na myśli „intuicyjne interfejsy”).
forkandwait
Jeśli chodzi o udostępnianie slajdów - wygląda to na szalenie skomplikowane i może być odpowiednie, jeśli opodatkujesz swoją moc obliczeniową, starając się nadążyć, ale w przeciwnym razie koszmarne zarządzanie.
forkandwait
1
Kilka ogólnych pytań etlowych , które mogą ci się przydać : „ Porównania przestrzenne ETL ” i „ Czy są jakieś bezpieczne alternatywy dla fme?
RyanKDalton,

Odpowiedzi:

8

Bardzo lubię używać PostGIS do celów geoprzetwarzania.

Moje dwa główne resony to:

1) Wykonywanie skomplikowanych zadań w bazie danych jest często znacznie szybsze, ponieważ pomagasz planerowi zapytań wykonywać czynności we właściwej kolejności.

2) Po prostu zapisz wiersze sql użyte w pliku tekstowym i masz bardzo dobrą dokumentację tego, co zrobiłeś.

Mój obieg pracy, jeśli zadania obejmują wiele „kroków”, mogą wyglądać następująco:
1- Zbuduj części zapytania lub wszystkie w zależności od charakteru zadania
2- Przetestuj zapytanie na małej części zestawu danych, aby zobacz, jak to działa
3- Wykonaj poprawki, jeśli to konieczne
4- Uruchom zapytanie dla całego zestawu danych
5- Zapisz linie w pliku tekstowym z pewnymi notatkami.
Wszystko to często jest tak szybkie, jak uruchomienie ArcGIS i oczekiwanie na licencję z serwera licencji.

Nicklas Avén
źródło
5

Używamy PostGIS i pewnego rodzaju środowiska programowania Python do opracowanych przez nas usług sieciowych do geoprzetwarzania produkcji; bez zarzutów!

GeoDjango to świetny wybór, jeśli pracujesz głównie (lub wyłącznie) z funkcjami aplikacji internetowej. Nie obsługuje typu danych rastrowych PostGIS Raster ani PostGIS 2.0. Teraz jest dostarczany z najnowszą wersją Django. Możesz zrekompensować brak obsługi rastra i ogólną niezawodność, używając niestandardowych, surowych zapytań SQL w Django.

Aby uzyskać bardziej niezawodne aplikacje geoprzetwarzania, a zwłaszcza jeśli chcesz użyć modelu relacyjno-obiektowego, wypróbuj GeoAlchemy2. Oryginalna biblioteka GeoAlchemy, która rozszerza SQLAlchemy, zapewnia obsługę danych funkcji; GeoAlchemy2 rozszerza go , zapewniając (ograniczoną) obsługę nowego typu danych rastrowych w PostGIS 2.0.

A potem zawsze są powiązania Pythona dla GDAL i OGR!

Artur
źródło
YMMV, ale uważam, że biblioteki obiektowo-relacyjne tak naprawdę nie dodają niczego do zwykłego starego SQL. Jak powiedziałem w innym komentarzu, najciekawsze byłoby usłyszeć szczegóły.
forkandwait,
4
Potrafię opisać studium przypadku: serwis internetowy do generowania danych rastrowych dla modelu erozji po pożarze. Zasadniczo pewną liczbę rastrów należy podzielić i dodać do siebie. Wybrałem GeoAlchemy2 (GA2) do interfejsu z PostGIS, w którym przechowywane są dane. Korzystając z GA2, mogę tworzyć kompaktowe, wielokrotnego użytku zapytania PostGIS. Jedno zapytanie tworzy produkt „wypalonego pokrycia terenu” (przeklasyfikowanie pokrycia terenu, podzbiór). Produkt ten jest potrzebny do pewnego modelowania, ale jest także dodawany do innego rastra, warstwy gleby, w celu wytworzenia trzeciego produktu wyjściowego. GA2 pozwala mi mieszać, dopasowywać i serializować w Pythonie.
Arthur,
3

Chociaż jest to możliwe, trudno jest sobie wyobrazić, że chciałbyś wykonywać wiele geoprzetwarzania w silniku bazy danych lub frameworku internetowym. Polecam zajrzeć do bazowych bibliotek kodów - geos, proj.4 i gdal. Dla wszystkich trzech istnieją powiązania lub biblioteki Pythona. Inną opcją do zbadania jest wtyczka geoprzetwarzania Sextante do QGIS, ponieważ umożliwia budowanie modelu / przepływu pracy.

Kilka innych myśli:

Nie wykluczaj korzystania z PostGIS. Zapewnia dobre możliwości przechowywania i serwera, a także udostępnia niektóre funkcje geograficzne i proj.4 przez SQL. Dobrze gra również z innymi wymienionymi narzędziami: Django, QGIS i Python.

Oprócz możliwego wykorzystania wspomnianej wtyczki Sextante, QGIS jest dobry do wizualizacji, ma pewne narzędzia do pracy z postgres, a także zawiera konsolę Python.

Jeśli szukasz ORM i chcesz mieć interfejs internetowy, Django to zrobi. Jeśli nie przeszkadza ci mniej seksowny interfejs, strony administracyjne zapewnią ci interfejs CRUD przy stosunkowo niewielkim wysiłku - nawet edycję geometrii, jeśli używasz GeoDjango.

Scro
źródło
2
Chociaż zgodziłbym się, że nie używa się frameworka do wykonywania geoprzetwarzania, zdecydowanie nie zgadzam się, że nie używałby PostGIS (lub innego silnika bazy danych) do wykonywania geoprzetwarzania. Potrzebujemy specyfiki, aby przejść do przodu w dyskusji, ale wykonuję ogromną ilość wycinania / dzielenia geometrii i analizy punktowej za pomocą PostGIS i SQL.
forkandwait
2
@forkandwait Och, zgadzam się z Tobą na PostGIS. Mam jednak wrażenie, że używają wielu małych skryptów, które mogą łączyć w różne łańcuchy dla każdego projektu. Moim celem było skłonienie ich do zbadania bazowych bibliotek, aby mogli wybrać, które środowisko będzie najlepsze.
Scro,
3

Spójrz na ETL , w szczególności FME do operacji przestrzennych (lub GeoKettle o otwartym kodzie źródłowym ).

Naprawdę lubię korzystać z FME, ponieważ tworzy wizualny przepływ pracy, a ty możesz oddzielić logikę operacji przestrzennych, złączeń, scaleń ... wszystko, i możesz pracować z formatami innymi niż bazy danych i różnymi bazami danych ... Możesz robić dużo, łatwo i szybko. Jeśli masz doświadczenie w budowaniu modeli, szybko je zdobędziesz, a online jest mnóstwo dokumentacji.

Jedyną wadą FME jest to, że kosztuje. Ale myślę, że warto.

Alternatywą dla korzystania z FME jest prawdopodobnie GDAL i OGR wraz z być może Pythonem, aby powiązać to ze sobą. Lub, jak mówisz, robiąc to wszystko w PostgreSQL. Myślę, że ETL odgrywa istotną rolę w przeszukiwaniu danych przestrzennych i robi wiele, czego nie można zrobić tylko w bazie danych.

Nie korzystałem z niego, ale GeoServer zapewnia implementację WPS , nie korzystałem z tego, ale inni mogą komentować, w jaki sposób może to być przydatne?

Nie mogę komentować używania GeoDjango, ale myślałem, że to bardziej CMS, jak interfejs do przeglądania danych.

Alex Leith
źródło