【问题标题】: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;
    

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2020-05-29
      • 2010-12-28
      相关资源
      最近更新 更多