问题描述
我使用 Django 的 GEOS API 有一段时间了,效果很好。我升级了我的项目中的一些东西,我拥有的一些代码确定点是否在多边形内不再有效。我已经把它提炼成这个,这说明了这个问题。
我设置了这个模型:
class TestPoint(models.Model):
name = models.CharField(max_length=64)
pickup_location = models.PointField(srid=4326)
然后我跑:
>>> from django.contrib.gis.geos import Point,polygon
>>> from mytest.models import TestPoint
>>> p1 = TestPoint(name="p1",pickup_location=Point(-118.4,33.9))
>>> p2 = TestPoint(name="p2",pickup_location=Point(-118.45,34))
>>> p3 = TestPoint(name="p3",pickup_location=Point(-118.3,34.02))
>>> p4 = TestPoint(name="p4",pickup_location=Point(-118.46,34.01))
>>> bBox = (-118.5,34,-118,34.5)
>>> poly = polygon().from_bBox(bBox)
>>> poly.srid = 4326
>>> hits = TestPoints.objects.filter(pickup_location__within=poly)
>>> hits
<QuerySet []>
我希望 hits
包含 3 个点,但正如您所见,它是空的。
我想知道他们是否改变了 from_bBox()
中的坐标顺序,但 the documentation 说它仍然是 (xmin,ymin,xmax,ymax)。
怎么回事?
解决方法
您没有将您的 TestPoint
保存到数据库中。您可以通过以下方式保存这些:
p1 = TestPoint.objects.create(name='p1',pickup_location=Point(-118.4,33.9))
通过使用:
p1 = TestPoint(name="p1",33.9))
您只需在 Django/Python 层创建一个 TestPoint
对象,但您从未将其放入数据库中。