Django models 按评级加权的GeoDjango距离查询

Django models 按评级加权的GeoDjango距离查询,django-models,postgis,geodjango,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) rat

我使用的是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()

我不认为你可以在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;