2012-03-08 7 views
0

私はGeoDjango/PostGISを使用しており、物理的な場所と評価を持つBusinessというモデルを持っています。私は、「最も近い」高評価企業を探すためにクエリを実行したいと考えています。これはどうすればいいですか?より具体的には、場所が与えられたと仮定して、私はビジネスを評価/(1 +距離)でソートしたいと思っています。これについて最善の方法は何ですか?GeoDjango distance query ratingによって重み付けされています

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に分間隔で並べ替えることができないと思いますが、あなたは距離によってフィルタリングすることができ、かつ唯一のあなたのポイントの近くのものを取得した後、評価することによって順番。 PostGISので

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') 

あなたは、このような単純なクエリで求めているものを手に入れることができます:

SELECT name, rating, 
ST_Distance(the_geom,ST_GeomFromEWKT('SRID=4326;POINT(19.232 91.00)') AS minDist 
FROM business ORDER BY minDist,rating; 
関連する問題