我正在摆弄 Geodjango,我只想将一个简单的多边形字段添加到数据库中,然后在其上运行一个多边形点以确保一切正常。

这是我在views.py中的代码:

    #adding a polygon
    pe = PolygonExample.objects.create(name="uk_polygon", poly="POLYGON((58.768200159239576, -12.12890625, 58.49369382056807 1.1865234375, 49.18170338770662 -12.9638671875, 50.2612538275847 5.537109375))" )
    #doing the point-in-polygon check
    result = PolygonExample.objects.filter(poly__contains='POINT(52.696361078274485 -0.87890625)') 

这是我在 models.py 中的内容:

    class PolygonExample(models.Model):
      name = models.CharField(max_length=16, db_index=True)
      poly = models.PolygonField()
      objects = models.GeoManager()

但是当我尝试添加多边形(PolygonExample.objects.create)时,出现错误:“检查从 GEOS C 函数“GEOSWKTReader_read”返回的几何时遇到错误。

我添加多边形的代码是否错误?我不确定我是否理解如何直接插入纬度/经度坐标。

或者这是 GEOS 安装错误?

谢谢。

有帮助吗?

解决方案

你的 WKT 有几个问题:

  1. 坐标尺寸以空格分隔
  2. 坐标对(或元组)以逗号分隔
  3. 坐标顺序为 (x, y)——即 (lon, lat)

测试英国周围的多边形应该如下所示:

>>> wkt = "POLYGON((-12.12890625 58.768200159239576, 1.1865234375 58.49369382056807, 5.537109375 50.2612538275847, -12.9638671875 49.18170338770662, -12.12890625 58.768200159239576))"
>>> pe = PolygonExample.objects.create(name="uk_polygon", poly=wkt)
>>> result = PolygonExample.objects.filter(poly__contains='POINT(-0.87890625 52.696361078274485)')  # note x,y order here, too
>>> result[0].name
u'uk_polygon'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top