Ich bin ein ArcGIS Desktop-Benutzer, der zum ersten Mal in die Welt des Web-Mappings einsteigt. Nach den Ratschlägen, die ich hier auf GIS.SE gefunden habe, habe ich mit den kostenlosen Tutorials von OpenGeo begonnen .
Mir wurde jedoch klar, dass die meisten Demos und Beispiele auf Vektordaten ausgerichtet waren. Mein Hauptprojekt beinhaltet die Anzeige einer 300-Frame-Zeitreihe von 5000 x 5000 Pixel-Rastern. Auf meinem Desktop-Computer werden diese in einer einzelnen 16-Bit-Ganzzahl-BIP-Binärdatei mit 5000 x 5000 x 300 gespeichert, die ungefähr 8 GB beträgt. Mein Ziel ist es, auf eine Zelle (eines einzelnen Rasters in der Zeitreihe) klicken zu können und ein Diagramm mit den Werten dieses Pixels in der Zeitreihe mit 300 Elementen anzuzeigen. Die für jedes Zeitreihendiagramm verwendeten Rasterdaten müssen verlustfrei gespeichert werden, obwohl die angeklickten Overlay-Maps verlustbehaftete Caches sein können.
Gibt es etwas, das für dieses Projekt besser geeignet ist (für einen unerfahrenen Web-GIS-Entwickler) als OpenGeo? Oder sollte ich einfach mit diesem Setup weitermachen?
Als Referenz habe ich Programmiererfahrung in Python, Java und PHP. Ich habe nicht viel Erfahrung mit SQL. Dies ist ein offenes Projekt, daher habe ich genügend Zeit, um bei Bedarf neue Sprachen zu lernen. Ich habe bereits einen Webserver, obwohl ich wahrscheinlich den Host wechseln muss, da GoDaddy PostgreSQL ohne VPS nicht zu unterstützen scheint.
Danke für Ihre Hilfe!
EDIT: (13. Januar) Ich suche immer noch nach Informationen darüber, wie ein dreidimensionales 16-Bit-Ganzzahl-BIP-Raster am besten gespeichert und eine einzelne "Spalte" der Z-Achse effizient abgefragt werden kann. Ich möchte es nicht in ein 32-Bit-Format konvertieren (da dies die Dateigröße gegenüber der aktuellen 16-Bit-Form verdoppeln würde).
Antworten:
Das Abfragen eines solchen Rasters sollte keine großen Probleme aufwerfen. Sie können Binärdaten direkt in allen Programmiersprachen lesen, und der Zugriff ist schnell. Stellen Sie einfach sicher, dass Sie Ihre Daten in einem Dateiformat speichern, das alle Metadaten in einer separaten Datei enthält. BIP ist ein solches Format
Beispiel: In PHP wird davon ausgegangen, dass die Datei die Hauptreihenfolge der Zeilen hat (andernfalls wechseln Sie x und y), wobei $ x und $ y die Position in Ihrem Raster sind (ab 0), $ nx, $ ny und $ nz die Anzahl der Pixel in jede Dimension und $ nb die Anzahl der Bytes pro Gitterzelle:
Stellen Sie einfach sicher, dass Sie auf das rechte Pixel zugreifen: Beginnt die Zählung von oben links oder nicht, ...
Einige zusätzliche Informationen: Nachdem Sie die Daten gelesen haben, sollten Sie sie in Floats konvertieren. Z.B:
Falls Ihr Host das Hochladen großer Dateien nicht unterstützt, können Sie z. B. Ihre Bip-Datei in z. B. 8 Bip-Dateien aufteilen.
Weitere Informationen dazu, wie ich den Rest der Website gestalten würde: Da Ihre Daten statisch sind, können Sie mit gdal2tiles und Openlayern einen kleinen Mapviewer erstellen. http://www.gdal.org/gdal2tiles.html Da Sie sagen: "Ich brauche keine Skalierbarkeit - dieses Projekt dient hauptsächlich dazu, einigen Peer-Forschern einen einfacheren Zugriff auf meine Daten zu ermöglichen als das Senden einer 8-GB-Datei und Laden in ENVI. "Sie könnten möglicherweise sogar auf die Verwendung einer Webgis-Toolbox verzichten: Lassen Sie Ihre Benutzer einfach auf das Bild klicken und die Koordinaten abrufen: http://www.emanueleferonato.com/2006/09/02/click -image-and-get-Koordinaten-mit-Javascript /
(obwohl Sie einen Weg finden sollten, Ihr 5000x5000-Bild schön zu präsentieren)
quelle
Dies sieht nach drei getrennten Problemen aus: einem der Infrastruktur, einem der Architektur und einem der Ereignisbehandlung. Ich werde einen möglichen Ansatz darlegen, aber meine Antwort ist notwendigerweise allgemein.
Infrastruktur
Ich empfehle die Verwendung eines VPS-Hosting-Dienstes wie Linode (www.linode.com) für Ihren Server. Auf diese Weise erhalten Sie vollen (dh Root-) Zugriff auf einen professionell gewarteten Server - keine Sorge, dass der Strom ausfällt oder die Verbindung zum Internet unterbrochen wird.
Die Architektur
Hier gibt es so viele Möglichkeiten, dass es wirklich überwältigend sein kann. Als Beispiel führe ich einige Systeme mit GeoServer und OpenLayers aus. GeoServer wird von Tomcat 7 bereitgestellt. Das OpenLayers / jQuery-Frontend wird von Apache2 bereitgestellt. Sie können Postgres / PostGIS zum Speichern von Vektordaten einschließen, dies ist jedoch keine gute Option für Rasterdaten. Sie können auch ein Python-System mit Django oder sogar web.py (http://webpy.org/) für einen recht einfachen Controller einrichten. Mit GeoServer können Sie Rasterdaten in den folgenden Formaten speichern:
Handhabung des Events
Wenn der Benutzer auf die Karte klickt, möchten Sie an dieser Stelle ein Zeitreihendiagramm der Felddaten anzeigen. Richten Sie zunächst einen Controller ein, der in Python oder Java geschrieben sein kann und auf URL-Anforderungen mit einem Breiten- und Längengrad wartet. Dieser Controller gibt entweder ein statisches Image zurück, das auf dem Server gerendert wurde, oder JSON-Daten, die der Client (jQuery) in ein Diagramm umwandeln kann.
Um die XY-Daten auf der Karte abzurufen, verwenden Sie möglicherweise eine Funktion wie diese (siehe http://dev.openlayers.org/releases/OpenLayers-2.11/examples/click-handler.html ):
Ich hoffe das hilft.
quelle
Wenn ich Ihre Frage richtig verstehe, würde ich einen Zeit-WMS-Dienst erstellen, beispielsweise mit MapServer .
Auf diese Weise ist es einfach, das richtige Raster für jede Datumszeit anzuzeigen (mit einer GetMap-Anforderung) und die Werte für eine Zelle in einem bestimmten Datums- / Uhrzeitbereich anzufordern (mit einer GetFeatureInfo-Anforderung).
quelle