Angesichts der zunehmenden NoSQL- Bewegung und der Tatsache , dass Datenbanken wie MongoDB eine neue Perspektive für die flexible Speicherung von Daten für GIS bieten. Wie lassen sich Linien und Polygone am besten in JSON-Dokumenten speichern, um 2D-Indizes und räumliche Funktionen zu nutzen?
24
Antworten:
GeoJSON hier sind die SPECs .
Hier ist ein Beispiel für eine Linie und ein Polygon:
quelle
Eine Sache, die zu beachten ist, ist, dass MongoDBs Unterstützung für räumliche Datentypen für jede ernsthafte räumliche Suche entsetzlich schlecht ist, und dies gilt allgemein für NoSQL, als ich das letzte Mal nachgesehen habe. Ich mag GeoCouch nicht so sehr, aber es hat noch viel zu tun.
GeoJSON ist ein fantastisches Format, aber um die begrenzten (NUR PUNKT) räumlichen Indizes in Mongo zu nutzen, benötigen Sie eine räumlich indizierte Sammlung, die nur einen Datensatz für jeden Punkt des Polygons mit einem zusätzlichen Wert für die Datensatz-ID Ihres Polygons enthält In einer anderen Sammlung lebender räumlicher Datensatz. Verwenden Sie dann eine Bounding-Box-Abfrage, um Datensatz-IDs von einer abzurufen und von der anderen auszuwählen, und emulieren Sie so effektiv einen Join.
Sie könnten hacky werden und nur die Ecken des Begrenzungsrahmens als Punkte für Ihre Datensätze verwenden, aber dann kann die Suche nach Begrenzungsrahmen fehlschlagen und insgesamt werden einige ziemlich ineffiziente Entwurfsmuster erzwungen und alle Arten von Verantwortlichkeiten werden dem Entwickler unangemessen auferlegt.
Als Referenzimplementierung können Sie auf diesen Code verweisen, der auf dem diesjährigen Esri Developer Summit vorgestellt wurde.
Ich war überhaupt nicht zufrieden mit der räumlichen Unterstützung der verschiedenen NoSQL-Datenbanken. Sie reichen nur für die Suche nach dummen Punktwolken aus. Dies ist sinnvoll, wenn man bedenkt, dass die meisten Apps, die diese Funktion verwenden, nur Pins auf einer Google-Karte in einem Browser ablegen. PostGIS wird auf absehbare Zeit immer noch das beste Open-Source-Arbeitspferd für die Verwaltung von Geodaten sein.
quelle
Das ist einfach nicht wahr,
"Um räumliche Indizes in Mongo nutzen zu können, benötigen Sie eine räumlich indizierte Sammlung, die nur einen Datensatz für jeden der Punkte des Polygons enthält. Ein zusätzlicher Wert für die Datensatz-ID Ihres räumlichen Datensatzes, der in einer anderen Sammlung lebt, lautet dann a Bounding-Box-Abfrage zum Abrufen von Datensatz-IDs aus einer [Sammlung] und Auswählen von [Datensatzdaten] aus der anderen [Sammlung], um einen Join effektiv zu emulieren. "
Ich habe USGS-Punktdaten in einer einzelnen Mongo-Sammlung mit Datensätzen gespeichert, die wie folgt aussehen:
Ich bin in der Lage, Bounding-Box-Abfragen für diese Daten durchzuführen, die den gesamten Datensatz zurückgeben (ohne dass eine weitere Sammlung erforderlich ist).
Abfrage:
Antwort:
Mongo bietet auch die Möglichkeit, Suchen nach nächsten Nachbarn sowie nach Punkten in Polygonen durchzuführen. Dies ist auf mongodb.org gut dokumentiert
quelle