1

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

感谢您的帮助

4

2 回答 2

2

引用贾斯汀布朗的话:

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

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

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

于 2011-07-29T12:13:24.837 回答
0

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

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

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

于 2011-09-16T13:49:48.937 回答