过滤PointField的查询集字段,以查找特定距离范围内的项目是否不正确

Mis*_*tyD 5 django django-models geospatial geodjango

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

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()
Run Code Online (Sandbox Code Playgroud)

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

qset = modelEmployee.objects.filter(location__distance_lte=(someLocation, D(mi=90)))
Run Code Online (Sandbox Code Playgroud)

结果返回一个物品,其距离实际为223.732英里,它不应该返回.

这些是两个项目的位置

location A - lat: 47.628641 and long: -117.402997

location B - lat: 47.618337 and long: -122.205341
Run Code Online (Sandbox Code Playgroud)

两者的距离实际为223.732英里.我必须过滤它错了.关于我可能出错的地方的任何建议?

Gab*_*Muj 6

从docs geo空间查询中你应该使用dwithin

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

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