【问题标题】:Querying polygons that contain 4 points查询包含 4 个点的多边形
【发布时间】:2017-03-22 10:45:13
【问题描述】:

我总是得到 4 个点,我想查询由多点定义的多边形是否包含这 4 个点。我正在使用 PostGIS 和 Postgres。

我也为此目的使用 OGR/GDAL。有人会为此目的使用 SQL 向我提供查询吗?

【问题讨论】:

  • 请定义“位于 4 点以内”。
  • 如果多边形在这 4 个点内。这 4 个点是相机点,所以我想知道该多边形是否在这 4 个点内,是否位于相机的视野中
  • 我需要包含这 4 个点的多边形。
  • 请注意,我使用的是 GDAl 2.1 ogr。所以我必须使用它支持的查询

标签: postgresql postgis gdal ogr


【解决方案1】:

这会检查点 (1 1)、(2 2)、(3 3) 和 (4 4) 是否都位于由 (0 0)、(10 0)、(10 10) 定义的多边形内, (0 10) 和 (0 0):

SELECT st_contains(
          st_polygon(
             st_linefrommultipoint(
                st_mpointfromtext(
                   'MULTIPOINT(0 0, 10 0, 10 10, 0 10, 0 0)'
                )
             ),
             0
          ),
          st_mpointfromtext(
             'MULTIPOINT(1 1, 2 2, 3 3, 4 4)'
          )
       );

所以要找到所有满足条件的多点,你可以使用类似的东西:

SELECT id
FROM multipoints
WHERE st_contains(
         st_polygon(
            st_addpoint(
               st_linefrommultipoint(
                  multipoints.geom
               ),
               st_startpoint(
                  st_linefrommultipoint(
                     multipoints.geom
                  )
               ),
               -1
            ),
            st_srid(multipoints.geom)
         ),
         st_mpointfromtext(
            'MULTIPOINT(1 1, 2 2, 3 3, 4 4)',
            8307
         )
      );

这假设多点不形成闭合多边形(即第一个点等于最后一个点)。

我在示例中使用了 SRID 8307,将其替换为您需要的那个。

【讨论】:

  • 谢谢,我是初学者,我可以从 GEOM 列中获取几何图形。我将如何在上面的 SQL 语句中设置它,我还想从表中选择“所有”多边形“而不仅仅是一个多边形
  • 我已经用建议扩展了答案。
  • FEHLER:对混合 SRID 几何图形的操作这就是我得到的。从区域中选择 gid st_contains(area.geom, st_mpointfromtext('MULTIPOINT(16.075 47.950, 16.249 47.914, 16.249 47.91411, 16.232 47.826)'));
  • lwpoly_from_lwlines: shell 必须关闭
  • 关于 SRID - 好吧,您必须对所有人使用相同的。关于未关闭:第一个点与最后一个点不同。
猜你喜欢
  • 2015-10-13
  • 2016-09-07
  • 1970-01-01
  • 2023-02-18
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2015-03-07
  • 2022-12-05
相关资源
最近更新 更多