我想使用Geodjango使用distance_lte
过滤由纬度和经度值组成的Point
对象。以下是我设置模型的方法:
class Point(models.Model):
latitude = models.FloatField()
longitude = models.FloatField()
objects = models.GeoManager()
class Thing(models.Model):
point = models.ForeignKey(Point)
objects = models.GeoManager()
我试图像这样过滤,但它没有奏效:
>>> from myapp.models import Thing, Point
>>> from django.contrib.gis.measure import D
>>> pnt = Point(37.7725205498, -122.408472587)
>>> z = Thing.objects.filter(point__distance_lte=(pnt,D(km=5)))
TypeError: Related Field has invalid lookup: distance_lte
我该怎么办? :
>>> z = Thing.objects.filter(point__distance_lte=(pnt,D(km=5)))
### or ###
>>> z = Thing.objects.filter(point__(latitude_longitude)__distance_lte=(pnt,D(km=5)))
感谢您的任何想法!
答案 0 :(得分:1)
使用GeoManager是必要的但不充分。必须告知数据库一个字段包含空间数据(包括要使用的坐标系统),以便它可以在查询时解释该数据,对其进行适当索引等。对于PostGIS,它通过{添加这些列来实现这一点。 {3}}。您的代码只在数据库中创建浮点字段。
因此,您最简单的方法是向Point
模型添加AddGeometryColumn stored procedure,在这种情况下,您的查找可能看起来更像point__point__distance_lte
或直接发送到Thing
模型取代ForeignKey字段(如果您仍想单独存储lat / long,则可能会重命名此字段)。