查询包含 4 个点的多边形

Querying polygons that contain 4 points

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

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

这将检查点 (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,请将其替换为您需要的。