量測函數(shù)
本文介紹時空函數(shù)中的量測函數(shù)。
引擎與版本
要求Lindorm SQL為2.6.8及以上版本。如何查看Lindorm SQL的版本,請參見SQL版本說明。
函數(shù)列表
Lindorm Ganos支持的量測函數(shù)如下表所示。
函數(shù) | 說明 |
返回指定多邊形Geometry對象的面積。 | |
返回兩個Geometry對象在二維平面上的歐氏距離。 | |
返回兩個Geometry對象在球面上的最短距離。 | |
判斷指定的Geometry對象是否合法。 | |
返回指定Geometry對象二維空間內(nèi)的長度。 | |
返回指定的Geometry對象的球面長度。 |
ST_Area
返回指定多邊形Geometry對象的面積。
語法
double ST_Area(geometry g)
參數(shù)說明
參數(shù) | 描述 |
g | 指定的Geometry對象。 |
Geometry對象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。
對于Geometry對象,使用SRID指定的單位確定二維笛卡爾區(qū)域。Lindorm Ganos 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;
返回結(jié)果:
+------+ | area | +------+ | 36.0 | +------+
示例2:指定Geometry對象為LINESTRING類型。
SELECT ST_Area(ST_GeomFromText('LINESTRING(1 3,5 6)')) AS area;
返回結(jié)果:
+------+ | area | +------+ | 0.0 | +------+
ST_Distance
返回兩個Geometry對象在二維平面上的歐氏距離,單位為degree。
語法
double ST_Distance(geometry geomA, geometry geomB)
參數(shù)說明
參數(shù) | 描述 |
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;
返回結(jié)果:
+-----------------------+ | d | +-----------------------+ | 0.0015056772638228177 | +-----------------------+
示例2
SELECT ST_Distance(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING EMPTY')) AS d;
返回結(jié)果:
+---+ | d | +---+ |0.0| +---+
ST_DistanceSphere
返回兩個Geometry對象在球面上的最短距離,單位為米。
語法
double ST_DistanceSphere(geometry geomA, geometry geomB)
參數(shù)說明
參數(shù) | 描述 |
geomA | 指定的第一個Geometry對象。 |
geomB | 指定的第二個Geometry對象。 |
Geometry對象支持Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon和GeometryCollection類型。
如果其中一個Geometry對象為EMPTY,則返回0。
如果其中一個Geometry對象為Polygon或者LineString類型,計算結(jié)果可能存在誤差,誤差為厘米級別。
示例
示例1
SELECT ST_DistanceSphere(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING(-72.1260 42.45, -72.123 42.1546)')) AS d;
返回結(jié)果:
+--------------------+ | d | +--------------------+ | 124.53287523764577 | +--------------------+
示例2
SELECT ST_DistanceSphere(ST_GeomFromText('POINT(-72.1235 42.3521)'),ST_GeomFromText('LINESTRING EMPTY')) AS d;
返回結(jié)果:
+---+ | d | +---+ |0.0| +---+
ST_IsValid
判斷指定的Geometry對象是否合法。Geometry對象不合法的情況可能為:Polygon對象自相交、MultiPolygon對象內(nèi)的Polygon對象重疊等。
語法
boolean ST_IsValid(geometry g)
參數(shù)說明
參數(shù) | 描述 |
g | 指定的Geometry對象。 |
示例
檢查ID為110000的幾何對象是否合法。
SELECT ST_IsValid(geom) FROM mapdata WHERE id=110000;
返回結(jié)果:
+------------------+
| st_isvalid(geom) |
+------------------+
| true |
+------------------+
返回結(jié)果為true
表示ID為110000的幾何對象合法。如果返回結(jié)果為false
,則表示ID為110000的幾何對象不合法。
ST_Length
返回指定Geometry對象二維空間內(nèi)的長度,單位為degree。
語法
double ST_Length(geometry g)
參數(shù)說明
參數(shù) | 描述 |
g | 指定的Geometry對象。 |
如果Geometry對象為LineString類型,則返回LineString在笛卡爾坐標(biāo)系中的長度。
如果Geometry對象為Polygon類型,則返回0。
示例
示例1
SELECT ST_Length(ST_GeomFromText('LINESTRING(1 3,5 6)')) AS length;
返回結(jié)果:
+--------+ | length | +--------+ | 5.0 | +--------+
示例2
SELECT ST_Length(ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')) AS length;
返回結(jié)果:
+--------+ | length | +--------+ | 0.0 | +--------+
ST_LengthSphere
返回指定的Geometry對象的球面長度,單位為米。
語法
double ST_LengthSphere(geometry g)
參數(shù)說明
參數(shù) | 描述 |
g | 指定的Geometry對象。 |
如果Geometry對象為LineString類型,則返回LineString在球面上的長度。
如果Geometry對象為Polygon類型,則返回0。
示例
示例1
SELECT ST_LengthSphere(ST_GeomFromText('LINESTRING(1 3,5 6)')) AS length;
返回結(jié)果:
+------------------+ | length | +------------------+ | 554137.283806292 | +------------------+
示例2
SELECT ST_LengthSphere(ST_GeomFromText('POLYGON((2 2, 2 8, 8 8, 8 2, 2 2))')) AS length;
返回結(jié)果:
+--------+ | length | +--------+ | 0.0 | +--------+