- 类别:
ST_CONTAINS¶
如果一个 GEOGRAPHY 或 GEOMETRY 对象完全位于另一个相同类型的对象内,则返回 TRUE。
更严格地说,当且仅当 g2 的任何点都不位于 g1 外部,且 B 的内部至少有一个点位于 A 内部时,对象 g1 才包含对象 g2。有关“包含”含义的详细信息,请参阅 维度扩展的 9 交叉点模型 (DE-9IM) (link removed)。
尽管 ST_COVERS 和 ST_CONTAINS 可能看起来类似,但这两个函数有细微的区别。有关“覆盖”和“包含”之间差异的详细信息,请参阅 维度扩展的 9 交叉点模型 (DE-9IM) (link removed)。
备注
此函数不支持使用 GeometryCollection 或 FeatureCollection 作为输入值。
小技巧
您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务。
语法¶
ST_CONTAINS( <geography_expression_1> , <geography_expression_2> )
ST_CONTAINS( <geometry_expression_1> , <geometry_expression_2> )
实参¶
geography_expression_1
不是 GeometryCollection 或 GEOGRAPHY 的 FeatureCollection 对象。
geography_expression_2
不是 GeometryCollection 或 GEOGRAPHY 的 FeatureCollection 对象。
geometry_expression_1
不是 GeometryCollection 或 GEOMETRY 的 FeatureCollection 对象。
geometry_expression_2
不是 GeometryCollection 或 GEOMETRY 的 FeatureCollection 对象。
返回¶
BOOLEAN。
使用说明¶
对于 GEOMETRY 对象,如果两个输入 GEOMETRY 对象具有不同的 SRIDs,该函数会报告错误。
示例¶
GEOGRAPHY 示例¶
该示例展示了 ST_CONTAINS 函数的简单用法:
create table geospatial_table_01 (g1 GEOGRAPHY, g2 GEOGRAPHY); insert into geospatial_table_01 (g1, g2) values ('POLYGON((0 0, 3 0, 3 3, 0 3, 0 0))', 'POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))');SELECT ST_CONTAINS(g1, g2) FROM geospatial_table_01; +---------------------+ | ST_CONTAINS(G1, G2) | |---------------------| | True | +---------------------+
GEOMETRY 示例¶
下面的查询显示了使用 ST_CONTAINS 的几个示例。请注意 ST_CONTAINS 是如何确定的:
多边形包含自身。
多边形不包含其边界上的 LineString。
SELECT ST_CONTAINS(poly, poly_inside), ST_CONTAINS(poly, poly), ST_CONTAINS(poly, line_on_boundary), ST_CONTAINS(poly, line_inside) FROM (SELECT TO_GEOMETRY('POLYGON((-2 0, 0 2, 2 0, -2 0))') AS poly, TO_GEOMETRY('POLYGON((-1 0, 0 1, 1 0, -1 0))') AS poly_inside, TO_GEOMETRY('LINESTRING(-1 1, 0 2, 1 1)') AS line_on_boundary, TO_GEOMETRY('LINESTRING(-2 0, 0 0, 0 1)') AS line_inside);
+--------------------------------+------------------------+------------------------------------+-------------------------------+ | ST_CONTAINS(POLY, POLY_INSIDE) | ST_CONTAINS(POLY,POLY) | ST_CONTAINS(POLY,LINE_ON_BOUNDARY) | ST_CONTAINS(POLY,LINE_INSIDE) | |--------------------------------+------------------------+------------------------------------+-------------------------------| | True | True | False | True | +--------------------------------+------------------------+------------------------------------+-------------------------------+