Geodjango与MySQL坐标/多边形精度
我创建了一个使用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)来判断一个点是否在这些多边形内部。