2012-03-08 78 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;