Django 的 GEOS API 中的几何交集不再有效

问题描述

我使用 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 对象,但您从未将其放入数据库中。