首页 > 解决方案 > 为特定距离范围内的项目过滤 PointField 的查询集字段不正确

问题描述

我想为特定范围内的项目过滤查询集。这就是我的模型的样子

class modelEmployee(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
    location = models.PointField(srid=4326,max_length=40, blank=True,null=True) 
    objects = GeoManager()

现在这就是我运行过滤器命令的方式。退回 90 英里特定范围内的物品。

qset = modelEmployee.objects.filter(location__distance_lte=(someLocation, D(mi=90)))

结果返回一个项目,其距离实际上是 223.732 英里,它不应该返回。

这些是这两个项目的位置

location A - lat: 47.628641 and long: -117.402997

location B - lat: 47.618337 and long: -122.205341

两者的黑白距离实际上是 223.732 英里。我一定是过滤错了。关于我可能出错的地方有什么建议吗?

标签: djangodjango-modelsgeospatialgeodjango

解决方案


从文档地理空间查询中,您应该使用dwithin

您的示例应该像这样使用它:

qset = modelEmployee.objects.filter(location__dwithin=(someLocation, D(mi=90)))


推荐阅读