全部產品
Search
文件中心

Lindorm:量測函數

更新時間:Oct 19, 2024

本文介紹時空函數中的量測函數。

引擎與版本

重要

要求Lindorm SQL為2.6.8及以上版本。如何查看Lindorm SQL的版本,請參見SQL版本說明

函數列表

Lindorm GanosBase支援的量測函數如下表所示。

函數

說明

ST_Area

返回指定多邊形Geometry對象的面積。

ST_Distance

返回兩個Geometry對象在二維平面上的歐氏距離。

ST_DistanceSphere

返回兩個Geometry對象在球面上的最短距離。

ST_IsValid

判斷指定的Geometry對象是否合法。

ST_Length

返回指定Geometry對象二維空間內的長度。

ST_LengthSphere

返回指定的Geometry對象的球面長度。

ST_Area

返回指定多邊形Geometry對象的面積。

文法

double ST_Area(geometry g)

參數說明

參數

描述

g

指定的Geometry對象。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 對於Geometry對象,使用SRID指定的單位確定二維笛卡爾地區。Lindorm GanosBase SQL使用的SRID為4326,指定的單位為度(degree)。

  • 如果指定的Polygon類型圍成多個封閉圖形,則返回順時針和逆時針圍成的圖形面積相減取絕對值。

  • 如果Geometry對象不是Polygon類型,則返回0。

樣本

  • 樣本1:指定Geometry對象是Polygon類型。

    SELECT ST_Area(ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')) AS area;

    返回結果:

    +------+
    | area |
    +------+
    | 36.0 |
    +------+
  • 樣本2:指定Geometry對象為LINESTRING類型。

    SELECT ST_Area(ST_GeomFromText('LINESTRING(1 3,5 6)')) AS area;

    返回結果:

    +------+
    | area |
    +------+
    | 0.0  |
    +------+

ST_Distance

返回兩個Geometry對象在二維平面上的歐氏距離,單位為degree。

文法

double ST_Distance(geometry geomA, geometry geomB)

參數說明

參數

描述

geomA

指定的第一個Geometry對象。

geomB

指定的第二個Geometry對象。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 如果其中一個Geometry對象為EMPTY,則返回0。

樣本

  • 樣本1

    SELECT ST_Distance(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)')) AS d;

    返回結果:

    +-----------------------+
    |           d           |
    +-----------------------+
    | 0.0015056772638228177 |
    +-----------------------+
  • 樣本2

    SELECT ST_Distance(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING EMPTY')) AS d;

    返回結果:

    +---+
    | d |
    +---+
    |0.0|
    +---+

ST_DistanceSphere

返回兩個Geometry對象在球面上的最短距離,單位為米。

文法

double ST_DistanceSphere(geometry geomA, geometry geomB)

參數說明

參數

描述

geomA

指定的第一個Geometry對象。

geomB

指定的第二個Geometry對象。

說明
  • Geometry對象支援Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。

  • 如果其中一個Geometry對象為EMPTY,則返回0。

  • 如果其中一個Geometry對象為Polygon或者LineString類型,計算結果可能存在誤差,誤差為厘米層級。

樣本

  • 樣本1

    SELECT ST_DistanceSphere(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)')) AS d;

    返回結果:

    +--------------------+
    |         d          |
    +--------------------+
    | 124.53287523764577 |
    +--------------------+
  • 樣本2

    SELECT ST_DistanceSphere(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING EMPTY')) AS d;

    返回結果:

    +---+
    | d |
    +---+
    |0.0|
    +---+

ST_IsValid

判斷指定的Geometry對象是否合法。Geometry對象不合法的情況可能為:Polygon對象自相交、MultiPolygon對象內的Polygon對象重疊等。

文法

boolean ST_IsValid(geometry g)

參數說明

參數

描述

g

指定的Geometry對象。

樣本

檢查ID為110000的幾何對象是否合法。

SELECT ST_IsValid(geom) FROM mapdata WHERE id=110000;

返回結果:

+------------------+
| st_isvalid(geom) |
+------------------+
| true             |
+------------------+

返回結果為true表示ID為110000的幾何對象合法。如果返回結果為false,則表示ID為110000的幾何對象不合法。

ST_Length

返回指定Geometry對象二維空間內的長度,單位為degree。

文法

double ST_Length(geometry g)

參數說明

參數

描述

g

指定的Geometry對象。

說明
  • 如果Geometry對象為LineString類型,則返回LineString在笛卡爾座標系中的長度。

  • 如果Geometry對象為Polygon類型,則返回0。

樣本

  • 樣本1

    SELECT ST_Length(ST_GeomFromText('LINESTRING(1 3,5 6)')) AS length;

    返回結果:

    +--------+
    | length |
    +--------+
    | 5.0    |
    +--------+
  • 樣本2

    SELECT ST_Length(ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')) AS length;

    返回結果:

    +--------+
    | length |
    +--------+
    | 0.0    |
    +--------+

ST_LengthSphere

返回指定的Geometry對象的球面長度,單位為米。

文法

double ST_LengthSphere(geometry g)

參數說明

參數

描述

g

指定的Geometry對象。

說明
  • 如果Geometry對象為LineString類型,則返回LineString在球面上的長度。

  • 如果Geometry對象為Polygon類型,則返回0。

樣本

  • 樣本1

    SELECT ST_LengthSphere(ST_GeomFromText('LINESTRING(1 3,5 6)')) AS length;

    返回結果:

    +------------------+
    |      length      |
    +------------------+
    | 554137.283806292 |
    +------------------+
  • 樣本2

    SELECT ST_LengthSphere(ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')) AS length;

    返回結果:

    +--------+
    | length |
    +--------+
    | 0.0    |
    +--------+