Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 31, 2013 13:04:15

skyfantom
Зарегистрирован: 2013-04-08
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

GeoDjango сортировка по дистанции

Привет, читал-читал документацию по GeoDjango. Но так и не придумал.

models.py

class Vacancy(models.Model):
    lat = models.FloatField('Latitude', blank = True)
    lng = models.FloatField('Longitude', blank = True)

Как построить запрос, чтобы отсортировать в порядке близости, без ограничения по дальности дистанции?

Спасибо.

Офлайн

#2 Ноя. 6, 2013 15:59:38

hulygun
Зарегистрирован: 2012-08-25
Сообщения: 74
Репутация: +  2  -
Профиль   Отправить e-mail  

GeoDjango сортировка по дистанции

Возможно стоит вспомнить математику)))) Пусть lat1 и lng1 это координаты исходной точки, lat2 и lng2 координаты любой точки поверхности, а D - расстояние между этих 2х точек. ^2 - квадрат числа D^2 = |lat1-lat2|^2+|lng1-lng2|^2

В Вашем случае достаточно знать |lat1-lat2|+|lng1-lng2|, и чем меньше это число, тем ближе точки

Ну а дальше используйте где хотите... если во вьюхе, то сортируйте список через lambda

Офлайн

#3 Ноя. 8, 2013 23:21:49

leechuck
От:
Зарегистрирован: 2010-11-30
Сообщения: 44
Репутация: +  1  -
Профиль   Отправить e-mail  

GeoDjango сортировка по дистанции

используйте стандартный POINT а не отдельно координаты

как то так:

from django.contrib.gis.db import models
class Vacancy(models.Model):
     location = models.PointField()


запрос как то так:

point_from = Point(12.4604, 43.9420)
Vacancy.objects.all().distance(point_from, field_name='location').order_by('distance')

в общем, двигайтесь в таком направлении



Отредактировано leechuck (Ноя. 8, 2013 23:26:09)

Офлайн

#4 Ноя. 8, 2013 23:23:40

leechuck
От:
Зарегистрирован: 2010-11-30
Сообщения: 44
Репутация: +  1  -
Профиль   Отправить e-mail  

GeoDjango сортировка по дистанции

hulygun

круто ! :) а теперь представим …



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version