GeoDjango距离查询按评级加权

时间:2012-03-08 03:09:26

标签: django-models postgis 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()

1 个答案:

答案 0 :(得分:0)

我认为你不能按照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;