Wie erstelle ich ein einfaches Frontend für eine PostGIS-Datenbank?

21

Meine Organisation sammelt viele Umgebungsüberwachungsdaten (Stromfluss, Wasserchemie usw.), von denen die meisten derzeit in Excel gespeichert sind. Ich möchte alles in eine Datenbank einbinden - wahrscheinlich PostGIS -, aber ich möchte, dass die Daten für Personen zugänglich sind, die keine Kenntnisse der Grundlagen der Datenbasis haben (kein SQL oder ähnliches).

Ich hätte gerne ein einfaches Front-End für meine Datenbank, in dem der Benutzer eine interessierende Überwachungsstation, einen variablen Typ (z. B. die Nitratkonzentration des Stroms) und ein Zeitintervall auswählt. Die Datenbank würde dann die angeforderten Daten im CSV-Format zurückgeben, die der Benutzer auf seinen Computer herunterladen könnte. In einer idealen Welt würde das Front-End eine anklickbare Karte aller Überwachungsstationen anzeigen. Wenn dies jedoch einfacher ist, ist zunächst eine Dropdown-Liste der verfügbaren Sites ausreichend. Ich denke, dieses Front-End wäre wahrscheinlich eine Website, muss es aber nicht sein.

Wie schwierig ist das bitte und welche Möglichkeiten habe ich? Ich bin in keiner Weise ein Experte für Datenbanken, aber ich verfüge über solide Kenntnisse in Desktop GIS und schreibe gerne einfache Python-Skripte und spiele mit PostGIS-, SpatiaLite- und ESRI Personal-Geodatabases. Ich habe noch nie eine Webentwicklung oder ein Web-GIS durchgeführt, bin aber sehr lernbegierig.

Ich habe gestern einen Teil der hervorragenden OpenGeo-Tutorials durchgesehen . Dieser Ansatz sieht vielversprechend aus, und zumindest kann ich jetzt sehen, wie meine Daten auf einer Website angezeigt werden. Was für mich weniger offensichtlich ist, ist, wie der Benutzer die Datenbank abfragen und die Ergebnisse zurückerhalten kann.

Meine Frage: Welche Art von Softwarestruktur sollte ich mir für ein solches Projekt überlegen? z.B

PostGIS + GeoServer + Something else?

Welche anderen Optionen stehen mir zur Verfügung, nach denen ich suchen sollte?

Eine einfache, aber funktionale Lösung wäre zunächst vorzuziehen: Wenn ich einen grundlegenden Prototypen zusammenstellen kann, kann ich damit rechtfertigen, dass ich mehr Zeit damit verbringe, zu lernen, wie man Dinge „richtig“ macht. Open Source ist auch eine Voraussetzung, da ich kein Budget dafür habe, bis ich einige Vorteile nachweisen kann.

Vielen Dank!

JamesS
quelle
2
Wenn Sie die Map weglassen, können Sie all dies mit Apache & PHP erledigen. Sie müssen nur ein Eingabeformular für das PHP-Skript erstellen, das die Daten aus PostGIS abruft. (Sie können PHP durch Python ersetzen.) ... Aber dann wäre dies keine Frage für GIS.SE
underdark
Vielen Dank an alle, die geantwortet haben! Dies sind alles hilfreiche Antworten und Sie haben mir eine Menge Dinge gegeben, die ich nachverfolgen kann. Ich würde gerne alle akzeptieren, aber ich habe @canisrufus die Punkte gegeben, da ich seinen letzten Absatz als sehr nützlich empfand und noch nie auf web.py gestoßen bin. GeoDango sieht auch super aus. Prost!
JamesS
@jamesS Ich wollte meinen letzten Absatz erweitern, aber er schien zu Unrecht vom Thema abzulenken. Wenn Sie Fragen haben oder einen längeren Monolog zur Einrichtung wünschen, können Sie mich hier im Chat kontaktieren.
Canisrufus
@JamesS Irgendwelche Fortschritte? Ich habe gerade mit der Entwicklung eines Django-Projekts begonnen
Luca Moiana,
Hallo @Luca Moiana. Als Prototyp folgte ich den Ratschlägen in der unten akzeptierten Antwort mit web.py, Apache und PostGIS (aber meine Website enthielt am Ende keine Karte). Einige Jahre später haben wir das hydrologische Informationssystem CUAHSI eingeführt , was großartig ist. Das Einrichten ist etwas aufwendig, bietet jedoch eine breite Palette von Tools zum Speichern, Suchen, Erkunden, Analysieren und Visualisieren von Umgebungsdaten.
JamesS

Antworten:

13

Wenn Sie sich bereits mit Python und SQL auskennen, ist es nicht allzu schwierig, eine Website mit einem Python-Webframework zu erstellen. Zwei einfache - cherry.py und web.py - kommen in den Sinn. Ich denke, es ist mehr Arbeit, sich in Djangos objektrelationalem Mapper zurechtzufinden, als es wert ist.

Python verfügt über eine Bibliothek mit dem Namen psycopg2 (http://initd.org/psycopg/) und ein Tutorial ( http://wiki.postgresql.org/wiki/Psycopg2_Tutorial ), mit dem Sie problemlos Abfragen für PostGRESQL / PostGIS ausführen können. Es gibt auch ein CSV-Modul (http://docs.python.org/library/csv.html), mit dem Sie Ihre CSV-Datei ganz einfach aus dieser Abfrage erstellen können.

Wie andere Leute bereits sagten, fügt das Erstellen einer Karte im Front-End eine Menge Komplexität hinzu. Sie benötigen OpenLayers, um die Karten anzuzeigen, und MapServer oder GeoServer, um Kartenbilder aus Ihrer Datenbank (oder anderen Datenquellen) zu erstellen. Das wäre wahrscheinlich besser als zweiter Schritt.

Momentan scheint "alles", was Sie brauchen, eine Webseite zu sein: ein Formular, mit dem Sie auswählen können, welche Abfrageparameter Sie benötigen. Wenn Sie auf "Submit" klicken, werden die Abfrageparameter an den Server gesendet (Apache ist eine gute Wahl). Anschließend wird Ihr Skript ausgeführt, das die Datenbank abfragt, eine entsprechende CSV-Datei erstellt und an den Browser zurückgegeben. Einfach so;)

canisrufus
quelle
2
Sie MÜSSEN MapServer / GeoServer nicht verwenden, um Bilder zu erstellen. Sie können die Daten auch direkt aus PostGIS abrufen und als Vektordaten auf Ihrer Karte anzeigen. Abhängig von der Komplexität Ihrer Daten können Sie jedoch eine beträchtliche Datenmenge übertragen. Es hängt von der Situation ab. Wenn Sie sie als Vektordaten anzeigen, können Sie auf ein Objekt klicken, um dessen Daten anzuzeigen / zu bearbeiten.
Mr_Chimp
Oh, das ist ein guter Punkt. Mein Anliegen war die Hintergrundebene, aber man könnte einfach Google Maps oder OSM oder ähnliches verwenden. Eigentlich halte ich die Vektorebene im Allgemeinen für eine schönere Lösung (für den Benutzer), aber Sie weisen darauf hin, dass es Einschränkungen gibt. Und natürlich wäre der einfachste Weg, die Vektoren zu übertragen, wenn MapServer oder GeoServer sie
bereitstellen
Wie immer geht es darum, das richtige Werkzeug für den Job zu verwenden. Da JamesS bereits über eine PostGIS-Datenbank verfügt, kann er die Daten auch direkt von dort abrufen. Wenn ich nichts vergesse, wäre das Einrichten von MapServer / whatever nur ein zusätzlicher Schritt (obwohl dies normalerweise natürlich der schnellste Weg ist).
Mr_Chimp
8

GeoDjango

Es ist ziemlich einfach einzurichten und bietet einige grundlegende Funktionen. Es ist Python, also sind Sie zumindest mit der Sprache vertraut. Es kann für Ihre Bedürfnisse übertrieben sein. Wenn Sie die Site jedoch erweitern möchten, steht Ihnen ein ausgereiftes Framework zur Verfügung, auf dem Sie aufbauen können.

Sean
quelle
5

Wenn Sie keine Karte erstellen möchten / müssen. Alles was Sie brauchen ist ein Webserver und eine Programmiersprache (ich bevorzuge Apache, weil es einfach zu benutzen und einzurichten ist, aber es gibt andere Möglichkeiten) und dann Postgres mit PostGIS oder einer anderen Datenbank.

Wenn Ihre Excel-Dateien gut formatiert sind, sollte der Import der Daten in die Datenbank einfach sein. Sie können ein Skript schreiben, das die INSERT-Anweisungen generiert. Die von Ihnen beschriebenen Abfragen klingen so, als wären sie auch überschaubar.

Wenn Sie den Mapping-Teil machen möchten, wären Apache, GeoServer und OpenLayers eine einfache und kostenlose Lösung. Wie Sie wissen, kann GeoServer PostGIS für WMS oder andere Ausgabeformate problemlos verwenden. Sie müssen lediglich einen Speicher hinzufügen, der eine Verbindung zu PostGIS herstellt, und anschließend Layer aus den Tabellen in PostGIS hinzufügen.

Andere kostenlose Mapping-Tools, die Sie sich ansehen können, sind Mapserver und MapGuide. MapGuide Open Source macht einige ziemlich coole Sachen, aber es ist komplizierter und die Dokumentation ist ein wenig im Rückstand.

MySQL hat auch eine räumliche Erweiterung, aber nicht so viele räumliche Merkmale und Funktionen wie PostGIS.

Wenn Sie mit Python vertraut sind, würde ich GeoDjango anschauen ... Ich weiß nicht viel darüber persönlich, aber ich habe gute Dinge gehört

Nate
quelle
4

Eine Übersicht über das Design und die Entwicklung von Web-Mapping-Anwendungen sowie einen vollständig dokumentierten Quellcode für eine auf Google Maps und einer räumlich-zeitlichen Datenbank PostgreSQL / PostGIS basierende Web-Mapping-Anwendung finden Sie in meiner kürzlich erschienenen Diplomarbeit in Informatik: Entwurf und Entwicklung eines Prototyps für die Verwaltung, Analyse und Bereitstellung von raum-zeitlichen Umweltvektordaten mithilfe der Open Source-Technologie. Allgemeiner Rahmen und Fallstudie zum Grundwassermanagement in Küstengebieten. "

Die Dissertation kann heruntergeladen werden unter http://www.giscience.it/it/pdf/DissertationMscComputerScience_CrestazEzio_Supervisors.pdf

Ezio
quelle