CriteriaBuilder-Radiusberechnung

9

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.

    
Mees Kluivers 14.04.2016, 12:08
quelle

3 Antworten

1

CriteriaBuilder ist für solche komplexen Abfragen nicht stark genug. Aber du kannst es trotzdem mit diesem Trick machen:

  1. Erstellen Sie eine MySQL-FUNKTION
  2. Rufen Sie diese FUNCTION auf, indem Sie CriteriaBuilder # function (..)

Es sollte auch ziemlich schnell gehen. Wobei ich anmerken muss, dass mysql nicht wirklich für solche Anwendungsfälle wie Distanzberechnungen geeignet ist.

    
dit 18.05.2016, 09:18
quelle
3

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.

    
Nikson Kanti Paul 18.05.2016 03:36
quelle
0

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. Ссылка

    
Fiid 18.05.2016 00:40
quelle

Tags und Links