Geodjango与Mysql坐标/多边形精度

时间:2011-07-29 10:02:09

标签: python mysql django polygon geodjango

我创建了一个使用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

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

引用Justin Bronn:

  

“MySQL是一个残缺的空间数据库......”

而不是包含它实际上执行bbcontains,并且以不可靠的结果而众所周知。 https://code.djangoproject.com/ticket/13430

我建议转到PostgreSQL 如果它不是一个选项,我没有答案。

答案 1 :(得分:0)

感谢您的帮助。最后,我使用了两阶段方法:

** - 第一步**是使用shape__contains检查结果列表

** - 第二步**是遍历这些结果并使用polygon.intersects(locationPoint)检查点是否在这些多边形内部