本文介绍时空函数中的量测函数。
引擎与版本
要求Lindorm SQL为2.6.8及以上版本。如何查看Lindorm SQL的版本,请参见SQL版本说明。
函数列表
Lindorm Ganos支持的量测函数如下表所示。
函数 | 说明 |
返回指定多边形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 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;
返回结果:
+------+ | 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 | +--------+