【问题标题】:GeoDjango distance query weighted by rating按评分加权的 GeoDjango 距离查询
【发布时间】:2012-03-08 03:09:25
【问题描述】:
我正在使用 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()
【问题讨论】:
标签:
django-models
postgis
geodjango
【解决方案1】:
我不认为您可以在 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;