# MySQL空间数据函数

以下列出常用MySQL数据函数,更多的函数查阅MySQL官方文档

# 数据插入

INSERT into 表明(字段名) VALUES(ST_GeomFromText('wkt数据格式'))
1

# 空间数据函数

# 点要素相关函数

# ST_StartPoint(A)

获取要素开始点

# ST_EndPoint(A)

获取要素结束点

# ST_X(A)

获取点要素A的X坐标

# ST_Y(A)

获取点要素A的Y坐标

# ST_ConvexHull(A)

获取多点的凸外包面

# ST_MakeEnvelope(A,B)

返回以 A、B为对角点的矩形

# 线要素相关函数

# ST_IsClosed(A)

线是否闭合

# ST_NumPoints(A)

获取线中点数量

# ST_PointN(A,n)

获取线中第n个点

# ST_Envelope(A)

生成矩形, A只有两个点,且不是水平或竖直线

# 面要素相关函数

# ST_ExteriorRing(A)

获取A面外环边界,返回值为LineString

# ST_InteriorRingN(A,num)

获取面A中第num个内环边界,返回值为LineString,num从1开始。

# ST_NumInteriorRings(A)

获取A面内环数量(5.7.8后添加ST_NumInteriorRing,效果一样)

# 几何关系函数

# 包含相关函数

# MBRContains(A,B)

A包含B,B在A中

包含在内返回true,不包含在内返回false

# MBRWithin(A,B)

B包含A,A在B中

包含在内返回true,不包含在内返回false

# 覆盖相关函数

# MBRCoveredBy(A,B)

A被B覆盖

# MBRCovers(A,B)

B被A覆盖

# 相交相关函数

# MBRDisjoint(A,B)

A、B不相交

# MBRIntersects(A,B)

A、B相交

# 接触(相切)相关函数

# MBRTouches(A,B)

A、B接触,接触的概念类似于相切

# 重叠相关函数

# MBROverlaps(A,B)

A、B重叠

# 相同函数

# MBREquals(A,B)

A、B相同

# 几何关系计算函数

# ST_Intersection(A,B)

返回要素A和要素B相交的部分,返回WKT格式要素

# ST_SymDifference(A,B)

返回要素A和要素B相交部分以外的部分,A、B中独有的,返回WKT格式要素

# ST_Union(A,B)

返回要素A和要素B合并的并集,返回WKT格式要素

# ST_Difference(A,B)

返回要素A中有要素B中没有的

# 几何计算函数

# ST_Length(A)

获取线的长度

# ST_Area(A)

获取面的面积

# ST_Centroid(A)

获取要素质心

# ST_Distance(A,B)

获取要素A和要素B的直线距离

# ST_Distance_Sphere(A,B)

获取要素A和要素B的球面距离

# ST_Simplify(A,mix_distance)

要素抽稀,将A抽稀,简化A中两点距离小于max的值

# ST_Buffer(A,length)

通过A要素,生成周边范围为length距离的面

5.7.7后可以添加策略影响缓冲区的计算,设置的语句是ST_Buffer_Strategy()

  • point策略
    • point_circle –> 点的缓冲区是一个圆(默认)
    • point_square –> 点的缓冲区是一个正方形,length是点到其中一边的距离
  • join策略
    • join_round –> 连接处缓冲区边界为圆弧(默认)
    • join_miter –> 连接处缓冲区边界为尖角
  • end策略
    • end_round –> 在结束处缓冲区为圆弧(默认)
    • end_flat –> 在结束处缓冲区为平坦的直线

示例:

ST_Buffer(point,10, ST_Buffer_Strategy('point_square'))

ST_Buffer(line, 10, ST_Buffer_Strategy('join_miter', 10), ST_Buffer_Strategy('end_flat'))
1
2
3

# 验证数据是否合法

# ST_IsValid(A)

# STValidate(A)

# 数据格式函数

# 数据输入函数

# ST_GeometryFromText(wkt格式数据)

将wkt格式数据转换成Geometry数据

# st_geomfromgeojson(geoJson格式数据)

将geoJson格式数据转换成Geometry数据

# 数据输出函数

# st_aswkt(字段名)

返回wkt数据

# st_asgeojson(字段名)

返回geoJson格式数据

# ST_AsBinary(字段名)

返回二进制格式数据

# 查询示例

# 查询包含在矢量内的要素

select *
from table_name
where  MBRContains(ST_GeometryFromText(
                          'MULTIPOLYGON(((120.3896074734377 33.31014320343502, 120.3896074734377 33.107969295887756, 120.55974116145939 33.107969295887756, 120.55974116145939 33.31014320343502, 120.3896074734377 33.31014320343502)))'),
                  geom);
1
2
3
4
5

# 查询包含在矢量内和相交的要素

返回相交要素形状和相交面积

select *,
       st_aswkt(geom)                                geomWkt,
       st_aswkt(ST_Intersection(ST_GeometryFromText(
                                        'MULTIPOLYGON(((120.3896074734377 33.31014320343502, 120.3896074734377 33.107969295887756, 120.55974116145939 33.107969295887756, 120.55974116145939 33.31014320343502, 120.3896074734377 33.31014320343502)))'),geom)) bound,
       round(ST_Area(ST_Intersection(ST_GeometryFromText(
                                             'MULTIPOLYGON(((120.3896074734377 33.31014320343502, 120.3896074734377 33.107969295887756, 120.55974116145939 33.107969295887756, 120.55974116145939 33.31014320343502, 120.3896074734377 33.31014320343502)))'),geom)) * 0.0015, 2) area
from table_name
where  ST_Intersects(ST_GeometryFromText(
                            'MULTIPOLYGON(((120.3896074734377 33.31014320343502, 120.3896074734377 33.107969295887756, 120.55974116145939 33.107969295887756, 120.55974116145939 33.31014320343502, 120.3896074734377 33.31014320343502)))'),geom);
1
2
3
4
5
6
7
8
9

# 查询包含点的数据

可以用于前端点击查询要素

select *, st_asgeojson(geom) geoJson
from table_name
where MBRContains(geom, ST_GeomFromText('Point(341562.2 3540299.9)'));
1
2
3
上次更新时间: 2024年2月12日星期一晚上7点28分