查询包含 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,请将其替换为您需要的。
我总是得到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,请将其替换为您需要的。