2012-04-22 4 views
6

Ich versuche, das Problem von "Finde den Punkt von Interesse in Ihrer Nähe" in Java zu lösen. , d.h. ich habe eine Anzahl von Breitengrad, viele Punkte von Interesse. Und ich möchte die in etwa 800 Metern finden. Vorausgesetzt, ich kenne meinen aktuellen Lat und Log.In Memory-Datenbank unterstützt Spatial Query

Mein Problem ist, diese Anwendung muss stand alone sein. Daher kann ich mich nicht auf eine räumliche Datenbankabfrage verlassen, um die Ergebnisse z.B. mit mysql ich gefunden habe, dies nützlich zu sein: http://xebee.xebia.in/2010/10/28/working-with-geolocations/

Derzeit kann ich nicht in memeory db finden, die spatital Abfragen unterstützt. Ich würde mit einem R-Baum so etwas wie http://jsi.sourceforge.net/ verwenden

Aber ich weiß, dass wird nicht so richtig geben die Tatsache, dass es eine Rectange eher als eine zirkelförmige Suche verwendet.

Haben irgendwelche Empfehlungen?

Antwort

1

Eigentlich ist die jsi-Bibliothek (http://jsi.sourceforge.net) ziemlich perfekt für dieses Problem. Es wurde geschrieben, um dieses genaue Szenario zu unterstützen.

Bei der Suche nach nahegelegenen Rechtecken (oder Punkten) können Sie eine maximale Entfernung angeben, und die Ergebnisse werden in der Reihenfolge der zunehmenden Entfernung zurückgegeben.

Es unterstützt nicht die Abfrage "jeden Punkt im Umkreis von 800m zurückzugeben", aber in der Praxis werden Sie eine Grenze wollen. Die jsi-Bibliothek unterstützt also die nützlichere Methode, "die nächsten 50 Punkte innerhalb eines Radius von 800 m zurückzugeben".

Wenn Sie wirklich jeden Punkt innerhalb eines Radius möchten, können Sie die Anzahl der Punkte auf eine große Zahl erhöhen und eine NearestN-Abfrage ausführen oder eine Schnittpunktabfrage durchführen und nach Entfernung in Ihrem eigenen Code filtern.

1

Es gibt eine In-Memory-Datenbank namens Altibase, die Spatial-Funktionen unterstützt. Es beachtet die OGC-Spezifikation. Sie können davon Gebrauch machen.