暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

MySQL GIS功能介绍

原创 Cui Hulong 2025-10-22
261

地理信息系统 (GIS) 是一个用于描绘地球和其他地理要素并突出其特征,从而显示和分析经空间配准的信息的系统。MySQL的GIS功能遵守OGC的OpenGIS Geometry Model(国际标准),MySQL对GIS的支持始于5.6版本,并随着版本的更新而不断增强,到MySQL8.0中的重大飞跃。

  • MySQL5.6:引入了基础的空间支持,包括基本的空间数据类型(GEOMETRY, POINT, LINESTRING, POLYGON 等)和部分函数,以及 R-Tree 索引(用于加速空间查询)。但此时的功能还比较基础。
  • MySQL5.7:对 GIS 进行了重要增强,增加了大量新的 GIS 函数(超过 50 个),大大提升了功能完备性,使其能够处理更复杂的空间操作和 GeoJSON 格式。
  • MySQL8.0:进行了增强,优化了GIS性能,并引入了新的GIS功能,如ST_IsValid、ST_IsSimple等。

下面了解下MySQL都支持那些GIS特性。

GIS 数据类型

目前GIS支持的符合标准的8种类型,包含了基础使用场景,足以应对许多常见的空间数据存储和查询场景,例如地理位置搜索、区域包含判断、距离计算等。

Data Types 说明 示例
GEOMETRY 存储任何类型的几何对象的基类 -
POINT POINT(116.3974 39.9093)表示北京天安门的经纬度
LINESTRING 线 LINESTRING(0 0, 10 10, 20 25) 表示一条由三个点连接而成的折线
POLYGON 多边形,由多条闭合的线构成的图形 POLYGON((0 0, 100 0, 100 100, 0 100, 0 0)) 表示一个正方形
MULTIPOINT 点集合 MULTIPOINT((0 0), (20 20), (60 60)) 表示三个离散的点
MULTILINESTRING 线集合 MULTILINESTRING((10 10, 20 20), (15 15, 30 15)) 表示两条线
MULTIPOLYGON 多边形集合 MULTIPOLYGON(((0 0, 100 0, 100 100, 0 100, 0 0)), ((200 200, 300 200, 300 300, 200 300, 200 200))) 表示两个不相交的正方形。
GEOMCOLLECTION 空间对象集合 GEOMETRYCOLLECTION(POINT(1 1), LINESTRING(0 0, 2 2))

可以按照需求选择合适的类型,命令行定义方式跟其他类型一样。

CREATE TABLE geom ( gp POINT NOT NULL, gm GEOMETRY NOT NULL SRID 4326, gmp MULTIPOINT, gmc GEOMCOLLECTION 。。。 );

备注:‌SRID 4326‌:SRID(Spatial Reference System Identifier)是定义地理空间数据坐标系统的数字标识符。是一种广泛使用的全球定位系统(GPS)坐标系统。

GIS函数

MySQL提供了丰富的 GIS 函数来操作和查询空间数据。这些函数遵循 Open Geospatial Consortium (OGC) 标准。按照官方文档,MySQL8.0+版本供有93个地理函数支持:
https://dev.mysql.com/doc/refman/8.4/en/spatial-function-reference.html

基础构造函数‌:

  • ST_GeomFromText()可将WKT格式文本转换为几何对象,
  • ST_PointFromText()专用于创建点对象
  • ST_Dimension()返回对象维度(-1空/0点/1线/2面),
  • ST_GeometryType()返回几何类型名称

‌特定对象函数‌:

  • 点对象:ST_X()/ST_Y()获取坐标值
  • 线对象:ST_Length()计算长度,ST_StartPoint()/ST_EndPoint()获取端点
  • 面对象:ST_Area()计算面积,ST_ExteriorRing()返回外环

空间分析函数: 拓扑关系判断,空间运算 等

数据格式转换: 文本/二进制转换‌,坐标系处理 等

这些函数使得MySQL能够处理大多数常见的GIS应用场景,如地理位置搜索、空间关系分析和地理围栏等,提供了丰富的地理空间数据处理能力。

索引

GIS使用R-TREE方式进行检索,提高性能。R-Tree是一种专为多维空间数据(如地理坐标、几何图形)设计的高效索引数据结构。它本质上是B-Tree在多维空间上的扩展,通过将空间对象用其最小边界矩形(MBR)进行近似,并组织成一棵平衡树,来实现快速的空间范围查询和邻接查询。
image.png

示例

下面是使用的简单的示例。

#创建表 CREATE TABLE gis_places ( gis_id INT AUTO_INCREMENT PRIMARY KEY, gis_name VARCHAR(255) NOT NULL, gis_location POINT NOT NULL, INDEX location_index (gis_location) ); #插入一些数据 INSERT INTO gis_places (gis_name, gis_location) VALUES ('Eiffel Tower', ST_GeomFromText('POINT(2.2945 48.8584)')), ('Statue of Liberty', ST_GeomFromText('POINT(-74.0445 40.6893)')); #查询两个地点之间的距离 SELECT gis_name, ST_Distance(gis_location, ST_GeomFromText('POINT(3.0000 10.0000)')) AS gs_distance FROM gis_places WHERE ST_Distance(gis_location, ST_GeomFromText('POINT(2.2945 48.8584)')) < 10000; +-------------------+-------------------+ | gis_name | gs_distance | +-------------------+-------------------+ | Eiffel Tower | 38.86480388230462 | | Statue of Liberty | 82.93182811647166 | +-------------------+-------------------+

总结

GIS是一个非常强大且被广泛应用的功能集,能和关系型数据库结合,肯定是按照需求推进的。如果计划使用MySQL的GIS功能,建议直接选择 MySQL8.0或更高版本。

参考

https://dev.mysql.com/doc/refman/8.0/en/geometry-well-formedness-validity.html
https://dev.mysql.com/worklog/task/?id=6968

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论