Ich versuche, gegebenes lat / long mit einer Entfernung zu berechnen und nur die Zeilen zurückzugeben, die in diese kreisförmige Entfernung fallen (Datenbank hat auch lat / long-Koordinaten). Was ich nicht weiß, ist, wie ich das machen würde. Ich benutze derzeit Native SQL und habe einfachen Text mit der hairsine-Formel, die dies berechnet, und wenn ich richtig bin, ist es nicht möglich, die hairsine-Formel mit dem CriteriaBuilder zu machen. Ich möchte jedoch die gleichen Ergebnisse mit dem CriteriaBuilder erhalten. Ich habe versucht, die Hibernate-räumliche Abhängigkeit zu verwenden, aber ich bekomme es nicht so, wie ich es möchte. Ich habe auch Tutorials wie dieses gefolgt.
Die von mir verwendete Datenbank ist MySQL.
Hibernate Version 4.3.10.
Auch dieses Tutorial hat mich nicht weit gebracht Mit JPA Kriterien Api und Hibernate räumliche 4 zusammen
Wie würde ich also eine CriteriaBuilder-Abfrage mit MySQL mit einem gegebenen Breitengrad / Länge und Entfernung erstellen und nur die Zeilen abrufen, die in diesen Bereich fallen, und sie mit den in der Datenbank gespeicherten Breiten- / Längenkoordinaten vergleichen.
CriteriaBuilder
ist für solche komplexen Abfragen nicht stark genug. Aber du kannst es trotzdem mit diesem Trick machen:
Es sollte auch ziemlich schnell gehen. Wobei ich anmerken muss, dass mysql nicht wirklich für solche Anwendungsfälle wie Distanzberechnungen geeignet ist.
Ich habe folgendes versucht und es funktioniert.
%Vor% radius
in Meilen. ?1, ?2, ?3
sind Parameter Platzhalter.
Es braucht eine Berechnung, um den Abstand von latitude
& amp; %Code%. Sie können longitude
nicht von database native function
aufrufen.
Ich habe dies in der Vergangenheit getan, indem ich das Rechteck wie oben vorgeschlagen abgefragt und dann die Entfernungsberechnung für diese Ergebnisse durchgeführt habe. Da Sie bereits einen guten Teil der Daten eliminiert haben sollten, sind diese Berechnungen weniger aufwendig. Da dies nur numerische Bereichsabfragen sind, benötigt es auch keine merkwürdigen Plugins oder Integrationen und sollte ziemlich schnell Ergebnisse liefern, wenn Sie die Lat- und Long-Spalten indizieren.
siehe: Gegeben GPS Koordinaten, wie finde ich nahegelegene Sehenswürdigkeiten oder Points-of-Interest?
Diese Seite beschreibt die Haversine-Formel in SQL. Ich würde immer noch in Betracht ziehen, die Bounding Box als Where-Klausel zu verwenden, so dass die DB diese Berechnung nicht für jede Zeile in der Tabelle durchführt. Ссылка