2016-04-09 3 views
0

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?

+0

'% Geo.Point {Koordinaten: {Breite, Länge}}' sollte zu '% Geo.Point {Koordinaten: {Länge, Breite}}' umgedreht werden –

Antwort

2

Ich habe es herausgefunden.

Ich verwendete :geometry als meine Art in Migration. Sie müssen :geography

Verwandte Themen