【问题标题】:Geodjango with Mysql coordinates/polygons precision具有 Mysql 坐标/多边形精度的 Geodjango
【发布时间】:2011-10-15 20:00:39
【问题描述】:

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

感谢您的帮助

【问题讨论】:

    标签: python mysql django polygon geodjango


    【解决方案1】:

    引用贾斯汀布朗的话:

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

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

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

    【讨论】:

    • 我同意。 PostgreSQL 是唯一严肃的选择。我只是出于同样的目的从 mysql 迁移到 postGIS,安装/管理和查询并不是很困难。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-03-15
      • 2017-02-23
      • 2012-07-05
      • 2012-11-01
      • 2016-04-27
      • 2017-11-04
      • 1970-01-01
      • 2021-12-05
      • 2016-09-03
      相关资源
      最近更新 更多