我正在使用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()
答案 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;