Nehmen wir an, ich habe zwei Längen- und Breitengrade. (zum Beispiel (10.786377, 106.700292), (10.787126, 106.725805)). Ich weiß, das sind 2,789 km voneinander entfernt.Wie mache ich eine st_distance Abfrage in Metern mit zwei Elixier Geo.Point Standorten?
Ich habe eine Funktion
def within(latitude, longitude, radius) do
point2 = %Geo.Point{coordinates: {latitude, longitude}}
query = from post in Post, where: st_distance(post.location, ^point2) < ^radius, select: post
Repo.all(query)
end
Die radius
Einheit nicht Meter.
Mit unseren beiden ursprünglichen Punkte, das ist der kleinste Abstand ich den anderen Punkt schließen bekommen konnte:
Post.within(10.786377, 106.700292, 0.025523999)
Das etwa ist ~ 109.26 km pro Einheit hier. 1 Grad bei 106,700292 Länge ist 111601 m x 0,025523999 = 2,848 m, die in der Nähe der bekannten 2,789 km Unterschied ist.
Gibt es eine Möglichkeit zur Abfrage basierend auf Metern, nicht Grad auf einer gegebenen Breite?
'% Geo.Point {Koordinaten: {Breite, Länge}}' sollte zu '% Geo.Point {Koordinaten: {Länge, Breite}}' umgedreht werden –