本文介紹時空函數中的量測函數。
引擎與版本
要求Lindorm SQL為2.6.8及以上版本。如何查看Lindorm SQL的版本,請參見SQL版本說明。
函數列表
Lindorm GanosBase支援的量測函數如下表所示。
函數 | 說明 |
返回指定多邊形Geometry對象的面積。 | |
返回兩個Geometry對象在二維平面上的歐氏距離。 | |
返回兩個Geometry對象在球面上的最短距離。 | |
判斷指定的Geometry對象是否合法。 | |
返回指定Geometry對象二維空間內的長度。 | |
返回指定的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 | +--------+