我创建了一个使用MySQL的geodjango数据库。
我的问题是,当我使用PolygonField添加新记录然后检查
对于一个点,如果它在这个多边形内,我得到一个错误的结果(我应该有更多的点)。我使用[Location.objects.filter(shape__contains='POINT(-0.058188 51.504289)')]
来检查多边形内部的一个点。
我的模特是:
class Location(models.Model):
locationId = models.IntegerField(unique=True)
shape = models.PolygonField(null=True, blank=True)
objects = models.GeoManager()
要将我的形状添加到我使用过的数据库中:
polygon = Polygon(((-0.076406999999999975,51.495287999999995),(-0.076412999999999953,51.495159000000008), …(-0.076406999999999975,51.495287999999995)))
请看这张图片http://i.stack.imgur.com/qRSnX.png 即使在geodjango admin的地图上,我们也可以看到这个多边形的边界不正确。
我使用这样的简单python脚本将我的结果与geodjango进行比较: http://geospatialpython.com/2011/01/point-in-polygon.html
感谢您的帮助
答案 0 :(得分:2)
引用Justin Bronn:
“MySQL是一个残缺的空间数据库......”
而不是包含它实际上执行bbcontains,并且以不可靠的结果而众所周知。 https://code.djangoproject.com/ticket/13430
我建议转到PostgreSQL 如果它不是一个选项,我没有答案。
答案 1 :(得分:0)
感谢您的帮助。最后,我使用了两阶段方法:
** - 第一步**是使用shape__contains检查结果列表
** - 第二步**是遍历这些结果并使用polygon.intersects(locationPoint)检查点是否在这些多边形内部