Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)

1 介绍

Mysql不仅支持普通的数据类型,还支持几何数据类型,并且能对几何数据类型进行查询(感觉好厉害!),该几何类型为geometry,下面就让我们从geometry开始学习!

2 Geometry

该类为几何数据类型的基类

子类(常用):

  • Point: 点,两个坐标确定一点。

    • 数据格式:
    POINT(113.64258 21.57715)
    

    经度(longitude)在前,维度(latitude)在后,用空格分隔。

  • LineString: 线,由一系列点连接而成。

    • 数据格式:
    LINESTRING(113.64258 21.57715,113.63159 21.9397)
    

    点与点之间用逗号分隔;一个点中的经纬度用空格分隔。

  • Polygon:多边形。可以是一个实心平面形,即没有内部边界,也可以有空洞,类似纽扣。

    • 数据格式:
    POLYGON((0 0,5 0,5 5, 0 5,0 0))
    

    点与点之间的线连成一个多边形。
    注意:第一个点和最后一个点必须一样,形成一个封闭的图形。
    POLYGON() 中可以有多个多边形,例如一个大正方形内一个小正方形,就会形成一个空洞。

    POLYGON((0 0,5 0,5 5,0 5,0 0),(1 1,4 1,4 4,1 4,1 1))
    

3 创建几何对象

  1. ST_GeomFromText() 推荐使用
    该函数可以创建任意几何体

    SET @p1 = ST_GeomFromText('POINT(3 3)');
    SET @p2 = ST_GeomFromText('LINESTRING(1 1,2 2)');
    SET @p3 = ST_GeomFromText('POLYGON((0 0,5 0,5 5, 0 5,0 0))');
    SET @p4 = ST_GeomFromText('POLYGON((0 0,5 0,5 5,0 5,0 0),(1 1,4 1,4 4,1 4,1 1))');
    SELECT ST_ASTEXT(@p1),ST_ASTEXT(@p2),ST_ASTEXT(@p3),ST_ASTEXT(@p4);
    

    ST_ASTEXT()将Geometry对象转换成文本

    效果:
    Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第1张图片

  2. ST_PointFromText()
    创建一个Point对象

    SET @p1 = ST_PointFromText('POINT(3 3)');
    SELECT ST_ASTEXT(@p1);
    
  3. ST_LineStringFromText()
    创建一个LineString对象

    SET @p2 = ST_LineStringFromText('LINESTRING(1 1,2 2)');
    SELECT ST_ASTEXT(@p2);
    
  4. ST_PolygonFromText()
    创建一个Polygon对象

    SET @p3 = ST_PolygonFromText('POLYGON((0 0,5 0,5 5, 0 5,0 0))');
    SET @p4 = ST_PolygonFromText('POLYGON((0 0,5 0,5 5,0 5,0 0),(1 1,4 1,4 4,1 4,1 1))');
    SELECT ST_ASTEXT(@p3),ST_ASTEXT(@p4);
    

4 常用函数

4.1 ST_AsText(g1) geometry类型转Text

geometry类型转Text ,方便输出

SET @p1 = ST_PointFromText('POINT(3 3)');
SELECT ST_ASTEXT(@p1);

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第2张图片

4.2 ST_Equals(g1, g2) 坐标相等(任意几何)

判断任意几何是否相等,相等返回1,反之0

SET @g1 = Point(1,1);
SET @g2 = Point(2,2);
SELECT ST_Equals(@g1, @g1), ST_Equals(@g1, @g2);

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第3张图片

4.3 ST_Distance(g1, g2) 两点距离(点)

计算两个点的距离

SET @g1 = Point(1,1);
SET @g2 = Point(2,2);
SELECT ST_Distance(@g1, @g2);

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第4张图片

4.4 ST_Crosses(g1, g2) 相交关系(非面与面)

判断 线段之间 || 点和线 || 点和面 || 线和面(非面与面之间 )是否相交,相交返回1,反之0

SET @g1 = ST_LineStringFromText('LINESTRING(0 0,1 1)');
SET @g2 = ST_LineStringFromText('LINESTRING(1 0,0 1)');
SET @g3 = ST_LineStringFromText('LINESTRING(1 2,4 5)');
SELECT ST_Crosses(@g1, @g2) AS '相交',ST_Crosses(@g1, @g3) AS '不相交';

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第5张图片

4.6 ST_Touches(g1, g2) 边界接触(任意几何)

判断g1与g2边界是否接触,接触返回1,反之0
Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第6张图片

SET @g1 = ST_PolygonFromText('POLYGON((0 0,5 0,5 5,0 5,0 0))');
SET @g2 = ST_PolygonFromText('POLYGON((1 1,4 1,4 4,1 4,1 1))');
SET @g3 = ST_PolygonFromText('POLYGON((4 0,4 1,6 1,6 0,4 0))');
SET @g4 = ST_PolygonFromText('POLYGON((5 0,5 1,6 1,6 0,5 0))');
SET @g5 = ST_PolygonFromText('POLYGON((6 0,6 1,7 1,7 0,6 0))');
SELECT ST_Touches(@g1, @g2) AS '包含',ST_Touches(@g1, @g3) AS '不包含,但相交',ST_Touches(@g1, @g4) AS '不包含,边界接触',ST_Touches(@g1, @g5) AS '不包含,完全不接触';

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第7张图片

4.7 ST_Contains(g1, g2) 包含关系(任意几何)

判断g1是否完全包含g2,完全包含返回1,反之0
Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第8张图片

SET @g1 = ST_PolygonFromText('POLYGON((0 0,5 0,5 5,0 5,0 0))');
SET @g2 = ST_PolygonFromText('POLYGON((1 1,4 1,4 4,1 4,1 1))');
SET @g3 = ST_PolygonFromText('POLYGON((4 0,4 1,6 1,6 0,4 0))');
SET @g4 = ST_PolygonFromText('POLYGON((5 0,5 1,6 1,6 0,5 0))');
SET @g5 = ST_PolygonFromText('POLYGON((6 0,6 1,7 1,7 0,6 0))');
SELECT ST_Contains(@g1, @g2) AS '包含',ST_Contains(@g1, @g3) AS '不包含,但相交',ST_Contains(@g1, @g4) AS '不包含,边界接触',ST_Contains(@g1, @g5) AS '不包含,完全不接触';

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第9张图片

4.8 ST_Intersects(g1, g2) 相交关系(任意几何体)

官方介绍是两个几何体相交,但我认为 这里是判断两个几何体有无关系,有关系则返回1,反之0

线段:

SET @g1 = ST_LineStringFromText('LINESTRING(0 0,1 1)');
SET @g2 = ST_LineStringFromText('LINESTRING(1 0,0 1)');
SET @g3 = ST_LineStringFromText('LINESTRING(1 2,4 5)');
SELECT ST_Intersects(@g1, @g2) AS '相交',ST_Intersects(@g1, @g3) AS '不相交';

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第10张图片

多边形:
Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第11张图片

SET @g1 = ST_PolygonFromText('POLYGON((0 0,5 0,5 5,0 5,0 0))');
SET @g2 = ST_PolygonFromText('POLYGON((1 1,4 1,4 4,1 4,1 1))');
SET @g3 = ST_PolygonFromText('POLYGON((4 0,4 1,6 1,6 0,4 0))');
SET @g4 = ST_PolygonFromText('POLYGON((5 0,5 1,6 1,6 0,5 0))');
SET @g5 = ST_PolygonFromText('POLYGON((6 0,6 1,7 1,7 0,6 0))');
SELECT ST_Intersects(@g1, @g2) AS '包含',ST_Intersects(@g1, @g3) AS '不包含,但相交',ST_Intersects(@g1, @g4) AS '不包含,边界接触',ST_Intersects(@g1, @g5) AS '不包含,完全不接触';

Mysql 空间数据类型(入门教程)多边形、矩形、点相交包含等条件查询,常用函数详细介绍(图文教学,简单易学)_第12张图片

参考官方:MySQL 5.6 Reference Manual

觉得不错的小伙伴可以点点赞!!
觉得不错的小伙伴可以点点赞!!
觉得不错的小伙伴可以点点赞!!

你可能感兴趣的:(mysql,空间数据类型,mysql,教程,图文教学,geometry)