千家信息网

MySQL中怎么利用空间函数实现位置打卡

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章将为大家详细讲解有关MySQL中怎么利用空间函数实现位置打卡,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。图形获取区域坐标因为项目前端使用微信
千家信息网最后更新 2026年11月01日MySQL中怎么利用空间函数实现位置打卡

这篇文章将为大家详细讲解有关MySQL中怎么利用空间函数实现位置打卡,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

图形获取区域坐标

因为项目前端使用微信小程序的wx.getLocation获取地理位置,为了坐标的一致性,后台选取区域范围采用了腾讯地图的地理位置服务,在应用工具->绘制几何图形里,提供了点、线、多边形和圆形可以方便的选取 看这里 。

在官方提供的示例上稍加改动即可获取选定的位置坐标。

存储位置

取到坐标位置后,接着就是怎么存储?

开放地理空间联盟(OGC)是一个由 250多家公司,机构和大学组成的国际联盟,参与开发公开可用的空间解决方案,这些解决方案可用于管理空间数据的各种应用程序。OGC发布了地理信息的 OpenGIS®Implementation 标准,该规范可从 OGC 网站http://www.opengeospatial.org/standards/sfs获得。为了遵循 OGC 规范,MySQL 将空间 extensions 实现为具有 Geometry Types 环境的 SQL 的子集,提供生成、存储、分析空间的功能。总之,MySQL可以满足我们的需求。

MySQL提供单个的存储类型 POINT、LINESTRING、POLYGON 对应几何图形点、线、多边形,GEOMETRY 可以存储三种中的任何一种。同时拥有存储多种类型的能力, MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION依次对应单个图形的复数。

回到项目中,我们用到的是 POLYGON ,

建表语句如下:

CREATE TABLE `polygon` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `name` varchar(255) DEFAULT NULL,   `polygon` polygon NOT NULL,   PRIMARY KEY (`id`),   SPATIAL KEY `d` (`polygon`) ) DEFAULT CHARSET=utf8;

插入数据

MySQL 支持将Well-Known 文本(WKT)格式和Well-Known 二进制(WKB)格式两种格式转换为object类型存储起来,我们使用更易于理解的WKT格式。对WKB感兴趣的可以 看这里 。

插入语句如下:

INSERT INTO `polygon` VALUES ('1', '清华大学', GeomFromText('POLYGON(( 40.01169924229143 116.31565081888039,39.99304082299905 116.31616541796757,39.99343506780591 116.33297565023167,40.00237067000859 116.33743550702275,40.01340715321479 116.33057418815224,40.01169924229143 116.31565081888039))'));  INSERT INTO `polygon` VALUES ('2', '北京大学', GeomFromText('POLYGON((39.99711457525893 116.30450117461078,39.98673259872773 116.30535884106575,39.98673259872773 116.31702308311287,39.99963848242885 116.31598375134854,39.99711457525893 116.30450117461078))'));

需要注意的是腾讯地图返回的多边形的点不是闭合的,而polygon函数需要为了确定多边形是否闭合要求第一个点和最后一个点是一样的。如果不是闭合的polygon返回的结果将是NULL,插入语句就会执行失败。

如果几何满足诸如此(非穷举)列表中的条件,则它在语法上是 well-formed:

  • 线串至少有两个点

  • 多边形至少有一个环

  • 多边形环关闭(第一个和最后一个点相同)

  • 多边形环至少有 4 个点(最小多边形是一个三角形,第一个和最后一个点相同)

  • 集合不为空(除了GeometryCollection)

查询判断

SELECT * FROM polygon WHERE     MBRWithin (ST_GeomFromText('POINT(39.991333490218544 116.30964748487895)'), polygon); # 在北京大学  SELECT * FROM polygon WHERE     MBRWithin (ST_GeomFromText('POINT(39.988967560246685 116.3286905102832)'), polygon); # 不在北大

细心的同学可能发现了这里的查询语句里用的是函数,在以往的SQL里如果存在查询字段上使用函数必然导致索引失效、全表扫描,但是在空间数据上不会,先看 EXPLAIN 语句和结果:

可见MySQL空间类型的数据同样可以建立索引,使用的关键词是 SPATIAL用法如下:

CREATE TABLE geom (g GEOMETRY NOT NULL); CREATE SPATIAL INDEX g ON geom (g);

常用的空间计算函数

1、判断两点之间的距离

  • ST_Distance(g1,g2),返回g1和g2之间的距离。如果任一参数是NULL或空几何,则 return value 为NULL。

2、图形1是否完全包含图形2

  • ST_Contains(g1,g2),返回 1 或 0 以指示 g1 是否完全包含 g2 。还可以用ST_Within(g2,g1)达到相同的效果。

3、不相交

  • ST_Disjoint(g1,g2),返回 1 或 0 以指示 g1 是否在空间上与(不相交) g2 不相交。

4、关于图形相交的情况比较复杂,包含重叠、外相交等情况,具体可以 看这里

关于MySQL中怎么利用空间函数实现位置打卡就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

空间 多边形 位置 图形 存储 函数 语句 几何 地理 坐标 大学 数据 格式 类型 相同 少有 查询 闭合 打卡 几何图形 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南云网互联网络科技有限公司 互联网科技公司税收优惠 互联网 卓越科技 亿人帮互联网科技 互联网科技博客 重庆科技学院互联网 安控科技rtu产品工业互联网 米聚互联网科技南京有限公司排面 互联网公司黑科技创始人 广州千川互联网科技有限公司 陕西云淼互联网科技公司 南京一网一红互联网科技有限公司 广州智享互联网科技 张家口科技产业互联网平台 科技互联网公司两年变化 广西泛欧互联网科技有限公司 数字科技和互联网金融哪个好 现代科技的标志之一的互联网 如何强化互联网金融科技 小牛互联网科技有限公司地址 花魁咖啡 麻工互联网科技 互联网科技的发展 互联网医疗科技 互联网 视角下的科技创新 四川狮子座互联网科技 福州新华互联网科技学校 知乎 北京华百购互联网科技有限公司 互联网金融科技展 互联网科技手机排行榜
0