Geodjango与MySQL坐标/多边形精度

1 投票
2 回答
754 浏览
提问于 2025-04-16 22:30

我创建了一个使用MySQL的geodjango数据库。

我遇到的问题是,当我添加一个包含多边形的记录后,检查一个点是否在这个多边形内时,得到的结果是错误的(返回的点比我预期的要多)。我使用了[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)))

请查看这张图片 https://i.stack.imgur.com/qRSnX.png。在geodjango的管理界面地图上,我们也可以看到这个多边形的边界并不在正确的位置。

我使用了一个简单的Python脚本来将我的结果与geodjango进行比较,脚本链接是:http://geospatialpython.com/2011/01/point-in-polygon.html

谢谢你的帮助。

2 个回答

2

引用Justin Bronn的话:

“MySQL是一个功能受限的空间数据库...”

它在执行包含查询时,实际上是执行了bbcontains,这个方法的结果常常不可靠。 https://code.djangoproject.com/ticket/13430

我建议你换用PostgreSQL。
如果不能换,我就没有其他建议了。

0

谢谢你的帮助。最后我采用了一个两步走的方法:

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

** - 第二步**是遍历这些结果,使用polygon.intersects(locationPoint)来判断一个点是否在这些多边形内部。

撰写回答