类别:

地理空间函数

ST_DIMENSION

给定一个类型为 GEOGRAPHYGEOMETRY 的值,返回该值的“维度”。GEOGRAPHY 或 GEOMETRY 值的维度为:

地理空间对象类型

维度

Point/ MultiPoint

0

LineString / MultiLineString

1

Polygon/ MultiPolygon

2

GeometryCollection

集合的维度等于集合内所有值的最大维度。

如果 GeometryCollection 包含 Point(维度为 0)和 LineString(维度为 1),则 GeometryCollection 的维度为 1。

功能

Feature 的维度与 Feature 中地理空间对象的维度相同。

FeatureCollection

规则与 GeometryCollection 的规则相同。

返回值(0、1、2)对应“维度”一词的常见含义:多边形是二维对象,线是一维对象,点是零维对象。

语法

ST_DIMENSION( <geography_or_geometry_expression> )
Copy

实参

geography_or_geometry_expression

实参必须是 GEOGRAPHY 或 GEOMETRY 类型的表达式。

返回

INTEGER 类型的值。

使用说明

  • 如果向函数传递 NULL,则函数返回 NULL。

  • 对于 GEOGRAPHY 对象:

    • 如果向函数传递至少包含一个 NULL 元素且不包含非 NULL 元素的 GeometryCollection,则函数返回 0。

    • 如果向该函数传递包含至少一个 NULL 元素和至少一个非 NULL 元素的 GeometryCollection,则该函数将返回非 NULL 元素的最大维度。

    请注意,某些其他系统对 NULL 输入返回不同的值。

示例

GEOGRAPHY 示例

以下示例演示 ST_DIMENSION 函数:

create table geospatial_table_02 (id INTEGER, g GEOGRAPHY);
insert into geospatial_table_02 values
    (1, 'POINT(-122.35 37.55)'),
    (2, 'MULTIPOINT((-122.35 37.55), (0.00 -90.0))'),
    (3, 'LINESTRING(-124.20 42.00, -120.01 41.99)'),
    (4, 'LINESTRING(-124.20 42.00, -120.01 41.99, -122.5 42.01)'),
    (5, 'MULTILINESTRING((-124.20 42.00, -120.01 41.99, -122.5 42.01), (10.0 0.0, 20.0 10.0, 30.0 0.0))'),
    (6, 'POLYGON((-124.20 42.00, -120.01 41.99, -121.1 42.01, -124.20 42.00))'),
    (7, 'MULTIPOLYGON(((-124.20 42.00, -120.01 41.99, -121.1 42.01, -124.20 42.0)), ((20.0 20.0, 40.0 20.0, 40.0 40.0, 20.0 40.0, 20.0 20.0)))')
    ;
Copy
select st_dimension(g) as dimension, st_aswkt(g)
    from geospatial_table_02
    order by dimension, id;
+-----------+----------------------------------------------------------------------------------------------------+
| DIMENSION | ST_ASWKT(G)                                                                                        |
|-----------+----------------------------------------------------------------------------------------------------|
|         0 | POINT(-122.35 37.55)                                                                               |
|         0 | MULTIPOINT((-122.35 37.55),(0 -90))                                                                |
|         1 | LINESTRING(-124.2 42,-120.01 41.99)                                                                |
|         1 | LINESTRING(-124.2 42,-120.01 41.99,-122.5 42.01)                                                   |
|         1 | MULTILINESTRING((-124.2 42,-120.01 41.99,-122.5 42.01),(10 0,20 10,30 0))                          |
|         2 | POLYGON((-124.2 42,-120.01 41.99,-121.1 42.01,-124.2 42))                                          |
|         2 | MULTIPOLYGON(((-124.2 42,-120.01 41.99,-121.1 42.01,-124.2 42)),((20 20,40 20,40 40,20 40,20 20))) |
+-----------+----------------------------------------------------------------------------------------------------+
Copy

GEOMETRY 示例

以下示例演示 ST_DIMENSION 函数:

CREATE OR REPLACE TABLE geometry_shapes (g GEOMETRY);
INSERT INTO geometry_shapes VALUES
    ('POINT(66 12)'),
    ('MULTIPOINT((45 21), (12 54))'),
    ('LINESTRING(40 60, 50 50, 60 40)'),
    ('MULTILINESTRING((1 1, 32 17), (33 12, 73 49, 87.1 6.1))'),
    ('POLYGON((17 17, 17 30, 30 30, 30 17, 17 17))'),
    ('MULTIPOLYGON(((-10 0,0 10,10 0,-10 0)),((-10 40,10 40,0 20,-10 40)))'),
    ('GEOMETRYCOLLECTION(POLYGON((-10 0,0 10,10 0,-10 0)),LINESTRING(40 60, 50 50, 60 40), POINT(99 11))')
    ;

SELECT ST_DIMENSION(g), ST_ASWKT(g) FROM geometry_shapes;
Copy
+-----------------+-------------------------------------------------------------------------------------------------+
| ST_DIMENSION(G) | ST_ASWKT(G)                                                                                     |
|-----------------+-------------------------------------------------------------------------------------------------|
|               0 | POINT(66 12)                                                                                    |
|               0 | MULTIPOINT((45 21),(12 54))                                                                     |
|               1 | LINESTRING(40 60,50 50,60 40)                                                                   |
|               1 | MULTILINESTRING((1 1,32 17),(33 12,73 49,87.1 6.1))                                             |
|               2 | POLYGON((17 17,17 30,30 30,30 17,17 17))                                                        |
|               2 | MULTIPOLYGON(((-10 0,0 10,10 0,-10 0)),((-10 40,10 40,0 20,-10 40)))                            |
|               2 | GEOMETRYCOLLECTION(POLYGON((-10 0,0 10,10 0,-10 0)),LINESTRING(40 60,50 50,60 40),POINT(99 11)) |
+-----------------+-------------------------------------------------------------------------------------------------+
Copy
语言: 中文