Wie kann ich den Globus in kleine Gitter unterteilen, sodass ich jeden Breiten-/Längenort einem Gitter zuordnen kann?[geschlossen]

StackOverflow https://stackoverflow.com/questions/1824790

Frage

Um die nächstgelegenen Standorte zu berechnen, die durch Breiten- und Längengrade dargestellt werden, habe ich darüber nachgedacht, die Karte in kleine Gitter zu unterteilen, etwa 100 x 100 Meter große Gitter.Im Wesentlichen würde jeder Punkt einem Raster zugeordnet werden.

Mir ist klar, dass ich stattdessen auch räumliche Indizes mit MySQL usw. verwenden könnte, aber ich plane, eine nicht relationale Datenbank wie Cassandra zu verwenden, bei der es schwierig wäre, räumliche Objekte zu indizieren, und daher könnte eine Art Rasternäherungstechnik hilfreich sein.

Was wäre der beste Weg, ein solches Rastersystem zu erstellen und die zweidimensionalen räumlichen Standorte darauf abzubilden?

Edit1:Es könnte in Ordnung sein, wenn die Gitter nicht vollkommen gleichmäßig sind, insbesondere um die Pole herum.

War es hilfreich?

Lösung

Rechteckraster kann eine vernünftige Schätzung, sondern nur über einen relativ kleinen Bereich, der nicht zu nahe an den Polen. Eine Voll Globus Lösung erfordert einen anderen Ansatz.

Andere Tipps

Mapping aus den zweidimensionalen räumlichen Koordinaten auf Ihren räumlichen Index / geohash ist ein interessantes Problem. Sie könnten sehen diese Artikel über Quadtrees, geohashes und Hilbert-Kurve . Die Hilbert-Kurve ist eine raumfüllende Kurve, die Örtlichkeit zur Verfügung stellt; für Ihre Zwecke bedeutet das, dass in der Nähe Elemente in dem eindimensionalen räumlichen Index in einem zweidimensionalen Raum in die Nähe sein.

Das Ziel (wie von anderen Responder beschrieben) ist die Anzahl der Abfragen zu minimieren notwendig, den Raum in Frage zu decken, ohne Tonnen von unnötigen Daten vom Server anfordern. Wie Sie die Zuordnung von 2-D-Raum zu einem 1-d-Index tun wird, dieses Ziel beeinflussen.

Ohne Ihre genaue Anwendungsanforderungen zu wissen, Geohashing könnte eine geeignete Technik sein: http: //en.wikipedia. org / wiki / Geohash

"Es ist eine hierarchische räumliche Datenstruktur, den Raum in Eimer Gitterform unterteilt. Geohashes bieten Eigenschaften wie beliebige Genauigkeit und die Möglichkeit, nach und nach Zeichen vom Ende des Codes zu reduzieren ihre Größe (und verliert allmählich Präzision). "

Entfernen

Sie können kein rechteckiges Raster erstellen, das einen Globus gleichmäßig abbildet.Wenn das Raster einheitlich sein muss, müssen Sie stattdessen Dreiecke verwenden.Generell bezweifle ich jedoch, dass dies Ihr Problem lösen wird.Was Sie brauchen, ist ein 2D Oktbaum (Dies ist ein Google-Suchlink;Schauen Sie sich die Bilder an, um eine einfache Vorstellung davon zu bekommen, wie das funktioniert.Sie müssen Ihre Koordinaten in Hierarchien unterteilen (z. B. Nord/Süd/Ost/West des Ursprungs für die erste Ebene und dann zwischen 90 Grad usw.).

Dann können Sie ein paar Auswahlvorgänge durchführen, die schnell das kleinste Rechteck ergeben, das vorhandene Koordinaten enthält.Jetzt können Sie die Größe des Rechtecks ​​überprüfen.Wenn es < 100 m ist, haben Sie eine Lösung gefunden.Andernfalls stehen Ihnen nur wenige Positionen zur Prüfung zur Verfügung (normalerweise eine).

Google für „Octree SQL-Datenbank“ für Implementierungen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top