【问题标题】:Adding a polygon directly in Geodjango/PostGIS直接在 Geodjango/PostGIS 中添加多边形
【发布时间】:2010-12-03 00:31:17
【问题描述】:

我在搞乱 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 安装错误?

谢谢。

【问题讨论】:

    标签: postgis geodjango polygons point-in-polygon


    【解决方案1】:

    您的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'
    

    【讨论】:

      猜你喜欢
      • 2012-11-13
      • 2020-02-23
      • 2017-01-29
      • 2012-11-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      相关资源
      最近更新 更多