地理空间数据Geometry在MySQL中使用(二)

提取属性类

获取维度信息

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);

查询结果

Point类

获取点的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)

查询结果

 

LineString类

获取线长

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);

查询结果

Polygon类

获取多边形的面积

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)

返回几何对象,该对象表示了几何值g1g2的点集合交集

创建对象

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)

返回几何对象,该对象表示了几何值g1g2的差集

创建对象

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

你可能感兴趣的:(数据库,MySQL)