Запрос расстояния GeoDjango, взвешенный по рейтингу

Я использую GeoDjango/PostGIS и имею модель Business, которая имеет физическое местоположение и рейтинг. Я хотел бы выполнить запрос, чтобы найти «ближайшие» компании с высоким рейтингом. Как мне это сделать? Чтобы сделать это более конкретным, предположим, что для заданного местоположения я хочу найти предприятия, отсортированные по рейтингу / (1 + расстояние). Каков наилучший способ сделать это?

from django.contrib.gis.db import models
class Business(models.Model):
     name = models.CharField(max_length=255)
     rating = models.IntegerField()
     address = models.PointField()

person saurabh    schedule 08.03.2012    source источник


Ответы (1)


Я не думаю, что вы можете сортировать по минимальному расстоянию в geodjango, но вы можете фильтровать по расстоянию и получать только те, которые находятся рядом с вашей точкой, а затем упорядочивать по рейтингу.

from django.contrib.gis.geos import *
pnt = Point(954158.1, 4215137.1, srid=32140)
pnt.buffer(23) #radius
business = Business.objects.filter(address__intersects=pnt).order_by('rating')

В postgis вы можете получить то, о чем просите, с помощью простого запроса:

SELECT name, rating, 
ST_Distance(the_geom,ST_GeomFromEWKT('SRID=4326;POINT(19.232 91.00)') AS minDist 
FROM business ORDER BY minDist,rating;
person Francisco Valdez    schedule 08.03.2012