GeoDjango дистанционный запрос, взвешенный по рейтингу - PullRequest
0 голосов
/ 08 марта 2012

Я использую 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()

1 Ответ

0 голосов
/ 08 марта 2012

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

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;
...