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

Geometric intersection in Django's GEOS API no longer working

我使用 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.<b>objects.create(</b>name='p1', pickup_location=Point(-118.4, 33.9)<b>)</b>

通过使用:

p1 = <s>TestPoint(name="p1", pickup_location=Point(-118.4, 33.9))</s>

你只是在Django/Python层创建了一个TestPoint对象,但是你从来没有把它放到数据库中。