【问题标题】:Point on a polygon boundary using postgis & geodjango使用 postgis 和 geodjango 在多边形边界上点
【发布时间】:2012-11-13 14:30:11
【问题描述】:

我在表格中有点数据和多面数据。如何使用 postgis 和 geodjango 找到位于多面边界上的点?

【问题讨论】:

    标签: postgis geodjango


    【解决方案1】:

    geodjango 方面我无法为您提供帮助,但我可以为您提供 PostGIS 查询。

    SELECT ST_Contains(ST_Boundary(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))')),
                                   ST_GeomFromText(points.g))
    FROM UNNEST(ARRAY['POINT(1 1)', 'POINT(0 1)']) points (g)
    

    关键是使用ST_Boundary获取多边形的边界并检查是否包含点。

    【讨论】:

      【解决方案2】:

      我猜你可以只使用 PostGIS SQL:

      SELECT points,area from points_table,area WHERE 
      area_geometry && points 
      AND ST_Contains(area_geometry,points)
      

      【讨论】:

      • 我不相信这就是提问者的意思。这将找到多边形包含的点,我相信不包括边界上的点。见ST_Contains。此外,我认为 && 边界框检查是多余的; ST_Contains 已经做了边界框检查。
      • 刚刚确认 ST_Contains 排除了边界上的点。尝试以下查询:SELECT ST_Contains(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'), ST_GeomFromText(g)) FROM UNNEST(ARRAY['POINT(1 1)', 'POINT(0 1)']) t (g)
      【解决方案3】:

      使用 ST_Covers 它包含自己的边界。但要小心,在这种情况下,一个点可以包含在许多(多)多边形中。

      SELECT ST_Covers(ST_GeomFromText('POLYGON((1 1,0 0, -1 1, 1 1))'),
                                     ST_GeomFromText(points.g))
      FROM UNNEST(ARRAY['POINT(1 1)', 'POINT(0 1)', 'POINT(0 0.5)']) points (g)
      

      【讨论】:

        猜你喜欢
        • 2021-05-22
        • 2010-12-03
        • 1970-01-01
        • 2018-09-22
        • 1970-01-01
        • 2018-11-12
        • 2013-10-03
        • 2017-01-29
        • 2012-11-01
        相关资源
        最近更新 更多