Ich frage mich, wie es möglich ist, riesige Mengen von lasergescannten Punktwolkendaten in PostGIS zu speichern, unter Berücksichtigung des Zeitaspekts für die Verarbeitung. Ich weiß, dass es Point
in PostGIS ein Geometrie-Objekt gibt . Aber meines Wissens speichert es jeden Punkt in einem neuen Tupel, was das Suchen nach einem bestimmten Punkt zu einem sehr langsamen Vorgang machen kann, wenn einige Millionen oder mehr von ihnen gespeichert sind.
Zu diesem Thema habe ich einen Artikel der HSR Rapperswill gefunden. Er schlägt vor , drei Möglichkeiten , um solche Daten zu speichern: Whole data in one tupel
, Each point in one tupel
oder Splitting Data into Blocks
die von Info-Tabellen Bezug genommen werden, halten die jeden Block erstreckt. Da der dritte Weg für das Auffinden gespeicherter Punkte am nützlichsten zu sein scheint, frage ich mich, ob jemand bereits einige Erfahrungen damit gemacht hat.
Das Papier finden Sie hier: http://wiki.hsr.ch/Datenbanken/files/pgsql_point_cloud.pdf
Last but not least bin ich über ein Projekt auf Github gestolpert, das sich mit Punktwolken-Manieren in PostgeSQL zu befassen scheint. Leider nicht viele Informationen darüber im Netz. Also die gleiche Frage hier: Hat jemand schon einige Erfahrungen damit gemacht? Ist es für solche Zwecke verwendbar?
Das Projekt finden Sie hier: https://github.com/pramsey/pointcloud
Ich würde mich auch über andere Vorschläge, Ideen oder Erfahrungen freuen, wenn es welche gibt. Aber ich muss zugeben, dass nichtkommerzielle Lösungen bevorzugt werden.
quelle
Antworten:
In Ihrer Frage steckt viel. Die kurze Antwort lautet: Ja, es ist durchaus möglich, riesige Punktwolkendaten in PostGIS zu speichern und für die Verarbeitung zu verwenden. Wir haben ein so vollständiges System aufgebaut, das dies ermöglicht.
Dieses Video ist mit seinen Zahlen etwas veraltet, aber wir hatten TBs von mobilen / terrestrischen und Luftdaten in Postgis, die über Python für die Verarbeitung im Back-End zugänglich waren, und ein Web-Front-End, das das 3D-Anzeigen und Herunterladen der Daten ermöglichte. https://vimeo.com/39053196
Es kommt wirklich darauf an, wie Sie die Daten in PostGIS speichern und wie Sie darauf zugreifen. Eine gute Lösung für Luftbilddaten könnte darin bestehen, die Daten in irgendeiner Weise zu gittern und aus Effizienzgründen Multipunkte zu verwenden. Wenn Sie jedoch mit mobilen oder terrestrischen Daten arbeiten, bei denen die Punktdichte zwischen 500 und 30000 Punkten pro Quadratmeter liegen kann, funktioniert dieser Ansatz nicht. Dann kommt es darauf an, Ihre Hardware und die Anzahl der gleichzeitig angemeldeten Benutzer zu überprüfen. Details dazu finden Sie in einigen unserer Veröffentlichungen unter http://www.mendeley.com/profiles/conor-mc-elhinney/
quelle
(Die Antwort basiert auf den obigen Kommentaren von mir und anderen. Ich habe sie nicht wirklich getestet.)
Speichern Sie die Punkte als MultiPointZM. Die beste Rastergröße hängt wahrscheinlich von den Zugriffsmustern ab, und Sie müssen diesbezüglich einige Tests durchführen. Ein reguläres Raster mit einem räumlichen Index sollte Abfragen ziemlich schnell machen. Wenn 3D-Zugriff wichtig ist, kann MultiPointZM 3D-blockbasiert (1) anstelle eines 2D-Ebenenrasters sein. Wenn Sie PostGIS> = 2.0 haben, können Sie &&& für schnelle 3D-Abfragen verwenden.
Sie können das Rastermuster auch in einer separaten Tabelle speichern. Dies kann nützlich sein, wenn Sie z. B. die Daten aktualisieren und überprüfen möchten, ob die MultiPointZM-Blöcke nach der Bearbeitung innerhalb ihrer Grenzen bleiben.
Das Speichern von Zeitstempeln oder anderen Daten ist jeweils nur für einen Block möglich. Einige Binär- / Kategoriedaten können jedoch gespeichert werden, indem jeder Block nach Attributen disaggregiert wird, wenn nicht zu viele Kategorien und / oder Attribute vorhanden sind.
Wenn Sie die Daten am Ende als separates PointZM speichern müssen, würde ein Fremdschlüssel in der Rastertabelle + B-Tree-Index das Laden nur der spezifischen Punkte (wahrscheinlich) erheblich beschleunigen, als nur die Tabelle direkt abzufragen, selbst mit einem räumlichen Wert Index.
(1) Wenn der Bereich der Z-Werte klein ist (es ist immerhin eine Straße), ist dies wahrscheinlich nicht sinnvoll.
quelle