类别:

地理空间函数

ST_CONTAINS

如果一个 GEOGRAPHYGEOMETRY 对象完全位于另一个相同类型的对象内,则返回 TRUE。

更严格地说,当且仅当 g2 的任何点都不位于 g1 外部,且 B 的内部至少有一个点位于 A 内部时,对象 g1 才包含对象 g2。有关“包含”含义的详细信息,请参阅 维度扩展的 9 交叉点模型 (DE-9IM) (link removed)。

尽管 ST_COVERS 和 ST_CONTAINS 可能看起来类似,但这两个函数有细微的区别。有关“覆盖”和“包含”之间差异的详细信息,请参阅 维度扩展的 9 交叉点模型 (DE-9IM) (link removed)。

备注

此函数不支持使用 GeometryCollection 或 FeatureCollection 作为输入值。

小技巧

您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务

另请参阅:

ST_WITHINST_COVERSST_COVEREDBY

语法

ST_CONTAINS( <geography_expression_1> , <geography_expression_2> )

ST_CONTAINS( <geometry_expression_1> , <geometry_expression_2> )
Copy

实参

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))');
Copy
SELECT ST_CONTAINS(g1, g2) 
    FROM geospatial_table_01;
+---------------------+
| ST_CONTAINS(G1, G2) |
|---------------------|
| True                |
+---------------------+
Copy

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);
    
    Copy
    +--------------------------------+------------------------+------------------------------------+-------------------------------+
    | ST_CONTAINS(POLY, POLY_INSIDE) | ST_CONTAINS(POLY,POLY) | ST_CONTAINS(POLY,LINE_ON_BOUNDARY) | ST_CONTAINS(POLY,LINE_INSIDE) |
    |--------------------------------+------------------------+------------------------------------+-------------------------------|
    | True                           | True                   | False                              | True                          |
    +--------------------------------+------------------------+------------------------------------+-------------------------------+
    
    Copy
语言: 中文