Django nach Entfernung sortieren

9

Ich habe das folgende Modell:

%Vor%

Wie soll ich eine Abfrage nach Entfernung sortieren (Abstand ist unendlich)?
Arbeiten an PosgreSQL, GeoDjango, wenn es erforderlich ist.

Danke.

    
Rukomoynikov 31.10.2013, 10:27
quelle

4 Antworten

24

Zunächst ist es besser, ein Punktfeld zu erstellen, anstatt lat und lnt zu trennen:

%Vor%

Dann können Sie es so filtern:

%Vor%

Es gibt bereits einige Fragen in stackoverlow, besser, wenn Sie sie überprüfen würden.

    
cem 31.10.2013, 14:32
quelle
21

Die .distance(ref_location) wird in django & gt; = 1.9 entfernt. Sie sollten stattdessen eine Anmerkung verwenden.

%Vor%

Auch sollten Sie Ihre Suche mit dem dwithin -Operator eingrenzen, der den räumlichen Index verwendet, distance verwendet nicht den Index, der Ihre Abfrage verlangsamt:

%Vor%

siehe diesen Beitrag für eine Erklärung von location__dwithin=(geom, 0.02)

    
cleder 09.03.2016 15:53
quelle
18

Hier ist eine Lösung, die nicht erfordert, dass GeoDjango einen benutzerdefinierten Manager verwendet.

%Vor%

Verwenden Sie wie folgt:

%Vor%

Wenn Sie sqlite verwenden, müssen Sie irgendwo hinzufügen

%Vor%     
rphlo 06.10.2014 15:11
quelle
0

Wenn Sie gis nicht verwenden wollen / haben, ist hier eine Lösung (haversine distance fomula writer in django orm sql):

%Vor%

PS Ändern Sie Modelle, ändern Sie den Filter in order_by, ändern Sie das Schlüsselwort und parametrisieren Sie

PS2 Für sqlite3 sollten Sie sicherstellen, dass die Funktionen SIN, COS, RADIANS, ATAN2, SQRT

verfügbar sind     
404pio 13.06.2017 13:50
quelle

Tags und Links