Jak stworzyć prosty interfejs dla bazy danych PostGIS?

21

Moja organizacja zbiera wiele danych z monitorowania środowiska (przepływ strumienia, chemia wody itp.), Z których większość jest obecnie przechowywana w programie Excel. Chciałbym przenieść wszystko do bazy danych - prawdopodobnie PostGIS - ale potrzebuję danych, aby były dostępne dla osób bez znajomości zasad dotyczących baz danych (bez SQL lub czegoś podobnego).

Chciałbym mieć jakiś prosty interfejs dla mojej bazy danych, w którym użytkownik wybiera interesującą stację monitorowania, typ zmiennej (np. Stężenie azotanu w strumieniu) i przedział czasu. Baza danych zwróci następnie żądane dane w formacie csv, które użytkownik może pobrać na swój komputer. W idealnym świecie interfejs wyświetlałby klikalną mapę wszystkich stacji monitorujących, ale jeśli jest to łatwiejsze, dobrze byłoby zacząć od rozwijanej listy dostępnych stron. Wydaje mi się, że ten interfejs byłby prawdopodobnie stroną internetową, ale nie musi tak być.

Jak trudne jest to, proszę, i jakie są moje różne opcje? W żadnym wypadku nie jestem ekspertem w dziedzinie baz danych, ale mam solidne doświadczenie w Desktop GIS i cieszę się, że piszę proste skrypty Pythona i gram z PostGIS, SpatiaLite i osobistymi geobazami ESRI. Nigdy nie zajmowałem się tworzeniem ani tworzeniem stron internetowych GIS, ale chętnie się uczę.

Wczoraj spędziłem część na badaniu doskonałych tutoriali OpenGeo . To podejście wygląda obiecująco i przynajmniej mogę teraz zobaczyć, jak wyświetlać moje dane na stronie internetowej. Mniej oczywiste jest dla mnie to, w jaki sposób pozwalam użytkownikowi przesyłać zapytania do bazy danych i odzyskiwać wyniki.

Moje pytanie: o jakiej strukturze oprogramowania powinienem myśleć przy takim projekcie? na przykład

PostGIS + GeoServer + Something else?

Jakie inne opcje są dostępne, które powinienem zbadać?

Na początku preferowane byłoby proste, ale funkcjonalne rozwiązanie: jeśli mogę zbudować podstawowy prototyp, mogę go użyć, aby usprawiedliwić spędzanie więcej czasu na uczeniu się, jak robić rzeczy „właściwie”. Wymagane jest również oprogramowanie typu open source, ponieważ nie mam na to żadnego budżetu, dopóki nie udowodnię pewnych korzyści.

Dziękuję bardzo!

JamesS
źródło
2
Jeśli pominiesz mapę, możesz to wszystko zrobić za pomocą Apache i PHP. Musisz tylko utworzyć jeden formularz wejściowy dla skryptu PHP, który pobiera dane z PostGIS. (Możesz zastąpić PHP Pythonem.) ... Ale to nie byłoby pytanie dla GIS.SE
podmroku
Bardzo dziękuję wszystkim, którzy odpowiedzieli! To są pomocne odpowiedzi i dałeś mi wiele rzeczy do śledzenia. Chciałbym „zaakceptować” je wszystkie, ale podałem punkty @canisrufus, ponieważ uznałem jego ostatni akapit za bardzo przydatny i wcześniej nie natknąłem się na web.py. GeoDango też wygląda niesamowicie. Twoje zdrowie!
JamesS
@jamesS Chciałem rozwinąć mój ostatni akapit, ale zaczęło to wydawać się nieuzasadnione poza tematem. Jeśli masz pytania lub chcesz dłuższego monologu na temat konfiguracji, możesz mnie tutaj znaleźć na czacie.
canisrufus
@JamesS Jakiś postęp w tej sprawie? Pracując nad tymi samymi topami, właśnie zacząłem rozwijać projekt Django
Luca Moiana
Cześć @Luca Moiana. Jako prototyp zastosowałem się do porad zawartych w zaakceptowanej odpowiedzi poniżej, używając web.py, Apache i PostGIS (ale moja strona nie zawierała mapy na końcu). Kilka lat później przyjęliśmy hydrologiczny system informacyjny CUAHSI , który jest świetny. To wymaga trochę konfiguracji, ale oferuje szeroki zakres narzędzi do przechowywania, wyszukiwania, eksploracji, analizy i wizualizacji danych środowiskowych.
JamesS

Odpowiedzi:

13

Jeśli już znasz się na Pythonie i SQL, zbudowanie strony internetowej przy użyciu frameworka Python nie byłoby trudne. Przychodzą mi na myśl dwa proste - cherry.py i web.py. Myślę, że nauczenie się omijania obiektowego mapowania relacyjnego obiektów Django może być więcej pracy niż jest warte.

Python ma bibliotekę o nazwie psycopg2 (http://initd.org/psycopg/ oraz samouczek: http://wiki.postgresql.org/wiki/Psycopg2_Tutorial ), który umożliwia łatwe uruchamianie zapytań przeciwko PostGRESQL / PostGIS. Ma również moduł CSV (http://docs.python.org/library/csv.html), dzięki czemu tworzenie pliku CSV z tego zapytania jest dziecinnie proste.

Jak powiedzieli inni ludzie, tworzenie mapy na froncie dodaje ryz złożoności. Będziesz potrzebować czegoś takiego jak OpenLayers do wyświetlania map oraz czegoś takiego jak MapServer lub GeoServer do tworzenia obrazów map z bazy danych (lub innych źródeł danych). To byłoby prawdopodobnie lepsze jako drugi krok.

Na razie „wszystko” wydaje się, że potrzebujesz jednej strony internetowej: formularza, który pozwala wybrać żądane parametry zapytania. Naciskają „prześlij”, parametry zapytania są wysyłane na serwer (dobrym wyborem byłby Apache), który następnie uruchamia skrypt, który odpytuje bazę danych, tworzy odpowiedni plik CSV i zwraca go do przeglądarki. Proste jak py;)

canisrufus
źródło
2
Do tworzenia obrazów NIE POTRZEBUJESZ MapServer / GeoServer. Możesz po prostu pobrać dane bezpośrednio z PostGIS i wyświetlić je jako dane wektorowe na mapie. Jednak w zależności od złożoności danych możesz przenosić znaczną ilość danych. To zależy od sytuacji. Ponadto wyświetlanie ich jako danych wektorowych daje opcję kliknięcia obiektu w celu wyświetlenia / edycji jego danych.
Mr_Chimp
@mr_chimp Och, to dobra uwaga. Moją troską była warstwa tła, ale można po prostu użyć Google Maps, OSM itp. W rzeczywistości wydaje mi się, że warstwa wektorowa jest ogólnie lepszym rozwiązaniem (dla użytkownika), ale jak zauważyłeś, istnieją ograniczenia. I oczywiście najprostszym sposobem na przeniesienie wektorów byłoby
podanie
Jak zawsze chodzi o użycie odpowiedniego narzędzia do pracy. Ponieważ JamesS ma już bazę danych PostGIS, równie dobrze może po prostu pobrać dane stamtąd. O ile czegoś nie zapomnę, skonfigurowanie MapServer / cokolwiek byłoby tylko dodatkowym krokiem (choć normalnie oczywiście byłby to najszybszy sposób).
Mr_Chimp
8

GeoDjango

Jest dość łatwy, łatwy w konfiguracji i zyskuje podstawowe funkcje. To jest Python, więc przynajmniej znasz język. Może to być przesada dla twoich potrzeb. Ale jeśli kiedykolwiek chcesz rozbudować witrynę, masz dojrzałe ramy, na których można budować.

Sean
źródło
5

Jeśli nie chcesz / musisz utworzyć mapę. Wszystko czego potrzebujesz to serwer WWW i język programowania (wolę Apache, ponieważ jest łatwy w użyciu i konfiguracji, ale istnieją inne opcje), a następnie Postgres z PostGIS lub inną bazą danych.

Jeśli pliki programu Excel są ładnie sformatowane, importowanie danych do bazy danych powinno być proste. Możesz napisać skrypt, który może generować instrukcje INSERT. Zapytania, które opisujesz, brzmią tak, jakby można je również zarządzać.

Jeśli / kiedy chcesz wykonać część mapowania, Apache, GeoServer i OpenLayers byłyby prostym i darmowym rozwiązaniem. GeoServer (jak wiadomo) może łatwo używać PostGIS dla WMS lub innego formatu wyjściowego. Wystarczy dodać sklep, który łączy się z PostGIS, a następnie dodać warstwy z tabel w PostGIS.

Innymi bezpłatnymi narzędziami do mapowania, które można przeglądać, byłyby Mapserver i MapGuide. MapGuide Open Source robi całkiem fajne rzeczy, ale jest bardziej skomplikowany, a jego dokumentacja jest nieco opóźniona.

MySQL ma także rozszerzenie przestrzenne, ale nie ma tylu funkcji przestrzennych i funkcji, jakie wykonuje PostGIS.

Jeśli znasz język Python, spojrzałbym na GeoDjango ... osobiście niewiele o nim wiem, ale słyszałem dobre rzeczy

Nate
źródło
4

Omówienie zagadnień związanych z projektowaniem i tworzeniem aplikacji do tworzenia map internetowych, a także w pełni udokumentowany kod źródłowy aplikacji do tworzenia map środowiska w oparciu o Google Maps i czasoprzestrzenną bazę danych PostgreSQL / PostGIS, w mojej stosunkowo niedawnej pracy magisterskiej z informatyki: Zaprojektowanie i opracowanie prototypu dotyczącego przestrzenno-czasowego zarządzania wektorowymi danymi środowiskowymi, analizy i dostarczania z wykorzystaniem technologii Open Source. Ogólne ramy i studia przypadków skoncentrowane na zarządzaniu wodami podziemnymi na obszarach przybrzeżnych

Rozprawę można pobrać ze strony http://www.giscience.it/it/pdf/DissertationMscComputerScience_CrestazEzio_Supervisors.pdf

Ezio
źródło