获取维度信息
Dimension(g)
返回对象g的维度信息
创建对象 |
SET @g1 = geomFromText('POINT(1 3 )'); SET @l1 = geomFromText('LINESTRING(15 15, -2000 20)'); SET @p1 = geomFromText('POLYGON((1 1, 3 1, 3 3, 1 3, 1 1))'); SET @mp1 = geomFromText('MULTIPOINT(0 0, 20 20, 60 60)'); SET @ml1 = geomFromText('MULTILINESTRING((10 10, 20 20), (15 15, 30 15))'); SET @mpl1 = geomFromText('MULTIPOLYGON(((0 0, 10 0, 10 10, 0 10, 0 0)), ((5 5, 7 5, 7 7, 5 7, 5 5)))'); SET @gm1 = geomFromText('GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))'); |
查询 |
SELECT Dimension(@g1),Dimension(@l1),Dimension(@p1),Dimension(@mp1),Dimension(@ml1),Dimension(@mpl1),Dimension(@gm1); |
查询结果 |
点:0 线:1 多边形:2 |
获取最小边界矩形
Envelope(g)
返回对象g的最小边界矩形(MBR)。结类型为Polygon值。
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3)'); |
查询 |
SELECT envelope(@l1); |
查询结果 |
获取类型信息
GeometryType(g)
以字符串形式返回几何类型的名称,如POINT,LINESTRING
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3)'); |
查询 |
SELECT GeometryType(@l1); |
查询结果 |
对象是否封闭
IsClosed(g)
返回对象g是否封闭
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3)'); |
查询 |
SELECT IsClosed(@l1); |
查询结果 |
对象是否简单
IsSimple(g)
返回对象g是否简单
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3)'); |
查询 |
SELECT IsSimple(@l1); |
查询结果 |
获取点的X坐标
X(p)
以双精度数值返回点p的X坐标值(经度)。
创建对象 |
SET @g1 = geomFromText('POINT(1.111 3.333 )'); |
查询 |
SELECT X(@g1); |
查询结果 |
获取点的Y坐标
Y(p)
以双精度数值返回点p的Y坐标值(纬度)。
创建对象 |
SET @g1 = geomFromText('POINT(1.111 3.333 )'); |
查询 |
SELECT Y(@g1); |
查询结果 |
获取两点的距离
st_distance(g1, g2)
计算两点之间的直线距离
创建对象 |
SET @g1 = geomFromText('POINT(1 3 )'); SET @g2 = geomFromText('POINT(1 5 )'); |
查询 |
SELECT st_distance(@g1, @g2) |
查询结果 |
获取两点之间的地理距离
st_distance_sphere(g1, g2)
计算两点之间的地理距离,单位米,例如记录店铺与用户间的距离
创建对象 |
SET @g1 = geomFromText('POINT(1 3 )'); SET @g2 = geomFromText('POINT(1 5 )'); |
查询 |
SELECT st_distance_sphere(@g1, @g2) |
查询结果 |
获取线长
GLENGTH(line)
返回对象line的长度
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT GLENGTH(@l1); |
查询结果 |
获取线段包含的点的数目
NUMPOINTS (line)
返回对象line包含的点的数目
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT NUMPOINTS (@l1); |
查询结果 |
获取线的终点
EndPoint(line)
返回对象line的最后一个点Point
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT EndPoint(@l1); |
查询结果 |
获取线的起点
StartPoint(line)
返回对象line的第一个点Point
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT StartPoint(@l1); |
查询结果 |
获取线的第N个点
PointN(line, N)
返回对象line中第N个点,N从1开始
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT PointN(@l1, 2); |
查询结果 |
获取多边形的面积
area(poly)
返回对象poly的面积
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); |
查询 |
SELECT area(@p1); |
查询结果 |
获取多边形的外环
ExteriorRing(poly)
返回对象poly的外环,类型为LineString
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 3 1, 2 4, 1 1))'); |
查询 |
SELECT ExteriorRing(@p1); |
查询结果 |
获取多边形的第N个内环
InteriorRingN(poly, N)
返回对象poly的第N个内环,N从1开始
创建对象 |
SET @p1 = geomFromText('POLYGON((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))'); |
查询 |
SELECT InteriorRingN (@p1, 1); |
查询结果 |
获取多边形的内环个数
NumInteriorRings(poly)
返回对象poly的内环个数
创建对象 |
SET @p1 = geomFromText('POLYGON((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))'); |
查询 |
SELECT NumInteriorRings(@p1); |
查询结果 |
获取指定位置的几何对象
GEOMETRYN(g,N)
获取集合对象g的第N个对象
创建对象 |
SET @mp1 = geomFromText('MULTIPOINT(0 0, 20 20, 60 60)'); |
查询 |
SELECT GEOMETRYN(@mp1,1); |
查询结果 |
获取集合中包含的几何对象数量
NUMGEOMETRIES (g)
获取集合对象g中的几何对象数量
创建对象 |
SET @mp1 = geomFromText('MULTIPOINT(0 0, 20 20, 60 60)'); |
查询 |
SELECT NUMGEOMETRIES(@mp1); |
查询结果 |
合并
st_union(@g1, @g2)
将g1和g2合并为一个集合类对象
创建对象 |
SET @g1 = geomFromText('POINT(1.111 3.333 )'); SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT st_union(@g1,@p1); |
查询结果 |
差异
st_difference(@g1,@g2)
返回几何对象,该对象表示了几何值g1与g2的点集合差异
创建对象 |
SET @g1 = geomFromText('POINT(1.111 3.333 )'); SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); |
查询 |
SELECT st_difference(@g1,@p1); |
查询结果 |
交集
st_intersection(g1,g2)
返回几何对象,该对象表示了几何值g1与g2的点集合交集
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT st_intersection(@p1,@p2); |
查询结果 |
差集
ST_SymDifference(g1,g2)
返回几何对象,该对象表示了几何值g1与g2的差集
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT ST_SymDifference(@p1, @p2); |
查询结果 |
根据包含关系生成标记列
st_contains(g1, g2)
返回1: g1完全包含g2;返回0: g1未包含g2
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT st_contains(@p2,@p1); |
查询结果 |
根据相交关系生成标记列
st_crosses(g1, g2), st_intersects(g1, g2)
返回1: g1与g2相交;返回0:g1与g2未相交
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); SET @l2 = geomFromText('LINESTRING(3 0, 3 3, 3 5)'); |
查询 |
SELECT st_crosses(@l1,@l2),st_intersects(@l1,@l2); |
查询结果 |
根据相交关系生成标记列(反向标记)
st_disjoint(g1, g2)是st_crosses的反函数
创建对象 |
SET @l1 = geomFromText('LINESTRING(1 1, 3 3, 5 5)'); SET @l2 = geomFromText('LINESTRING(3 0, 3 3, 3 5)'); |
查询 |
SELECT st_disjoint(@l1,@l2),st_intersects(@l1,@l2); |
查询结果 |
根据包含关系生成标记列(反向标记)
st_within(g1, g2)
g1在g2内则返回1,否则返回0
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT st_within(@p1,@p2); |
查询结果 |
根据交叉关系生成标记列
ST_Intersects(g1, g2)
g1和g2有交叉和重叠则返回1,否则返回0
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT st_intersects(@p1, @p2) |
查询结果 |
根据相等关系生成标记列
ST_Equals(g1, g2)
g1和g2相等则返回1,否则返回0
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT ST_Equals(@p1, @p2) |
查询结果 |
根据接触关系生成标记列
ST_Touches (g1, g2)
g1和g2相接处则返回1,否则返回0
创建对象 |
SET @p1 = geomFromText('POLYGON((1 1, 2 1, 2 2, 1 2, 1 1))'); SET @p2 = geomFromText('POLYGON((0 0, 0 4, 4 4, 4 0, 0 0))'); |
查询 |
SELECT ST_Touches(@p1, @p2) |
查询结果 |
包括如下函数,使用方法同获取对象之间空间关系的函数:
MBRCONTAINS
MBRDISJOINT
MBREQUAL
MBRINTERSECTS
MBROVERLAPS
MBRTOUCHES
MBRWITHIN