我使用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()
中坐标的顺序,但文档显示它仍然是(xmin,ymin,xmax,ymax(。
怎么回事?
您没有将TestPoint
保存到数据库中。您用保存这些
p1 = TestPoint.objects.create(name='p1', pickup_location=Point(-118.4, 33.9))
通过使用:
p1 =TestPoint(name="p1", pickup_location=Point(-118.4, 33.9))
您只需在Django/Python层创建一个TestPoint
对象,但从未将其放入数据库中。