Ich arbeite mit einer großen Anzahl von Punkten, die durch Breiten-/Längengradpaare repräsentiert werden (die Punkte sind nicht unbedingt eindeutig, es könnte mehrere Punkte in der Menge geben, die sich am selben Ort befinden). Die Punkte werden in einer Datenbank gespeichert.Wie kann ich eine effiziente Bereichssuche durchführen + mit Breiten-/Längengraddaten zählen?
Was ich tun muss, ist herauszufinden, wie man effektiv eine Suche durchführt, um die Anzahl der Punkte zu erhalten, die innerhalb eines bestimmten Radius (z. B. 25 Meilen) eines beliebigen Punktes liegen. Die Zählung muss nicht 100% genau sein - wichtiger ist, dass sie nur schnell und einigermaßen nahe an der korrekten Anzahl sein muss. Dies ist mit SQL möglich, indem eine Abfrage mit einer Trigonometrie in der WHERE-Klausel verwendet wird, um Punkte anhand ihrer Entfernung zu einem Referenzpunkt zu filtern. Leider ist diese Abfrage sehr, sehr teuer und Caching wird wahrscheinlich nicht viel Hilfe bieten, da die Standorte sehr verteilt sein werden.
Ich möchte letztendlich eine Art In-Memory-Struktur aufbauen, die diese Art von Operation effizient abwickeln kann - ein wenig Genauigkeit und Lebendigkeit der Daten abzutun (vielleicht nur einmal am Tag) als Gegenleistung für die Geschwindigkeit. Ich habe etwas über kd-Bäume geforscht, aber ich bin noch nicht klar darüber, wie gut dies auf Breiten-/Längengraddaten angewendet werden kann (im Gegensatz zu x, y-Daten in einer 2d-Ebene).
Wenn jemand irgendwelche Ideen oder Lösungen hat, die ich untersuchen sollte, würde ich es sehr schätzen - also danke im Voraus.
würde helfen, wenn Sie weitere Informationen auf der Plattform hat dir dabei das werde ... – alphadogg
[Diese zu kurz ist eine wirkliche Antwort auf sein] Wenn Sie ein kd-Baum verwenden wollten, müssten Sie Übersetzungs kartesische Distanzabfrage in einen Breiten- und Längengrad (oder mach einfach die Mathematik, um zu sehen, ob eine aufspaltende Breiten-/Längenebene deine Abfrage schneidet). – MSN