2012-03-08 161 views
0

我正在使用GeoDjango/PostGIS,并有一个名为Business的模型,该模型具有物理位置和评级。我想运行一个查询来查找“最接近”的高评分企业。我该怎么做呢?为了使它更具体,假设给定位置,我想查找按评分/(1 +距离)排序的商家。什么是最好的方式去做这件事?GeoDjango距离查询按等级加权

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

回答

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;