首页 > 数据库 >MySQL计算两个地理坐标点之间的球面距离

MySQL计算两个地理坐标点之间的球面距离

时间:2024-06-20 16:32:25浏览次数:24  
标签:06 球面 alarm MySQL 2024 video 地理坐标 time lng

st_distance_sphere函数是mysql5.7提供的,可以直接查询两个经纬度之间相距多少米,它接受两个参数,每个参数是一个点的经度和纬度

表结构

CREATE TABLE `video_alarm` (
  `alarm_id` char(50) NOT NULL,
  `alarm_type` varchar(20) DEFAULT NULL COMMENT '预警类型',
  `alarm_time` datetime DEFAULT NULL COMMENT '预警发生事件',
  `update_time` datetime DEFAULT NULL COMMENT '修改时间',
  `delete_flag` int(1) unsigned zerofill DEFAULT '0' COMMENT '删除标记',
  `lng` decimal(15,12) DEFAULT NULL COMMENT '经度',
  `lat` decimal(15,12) DEFAULT NULL COMMENT '纬度',
  `address_name` varchar(20) DEFAULT NULL COMMENT '坐标地址名称',
  PRIMARY KEY (`alarm_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

其中保存经纬度用的是DECIMAL类型,DECIMAL是MySQL中存在的精准数据类型,以字符串的形式保存精确的原始数值

DECIMAL(P,S)

P是表示有效数字数的精度。 P范围为1〜65。
S是表示小数点后的位数。 S的范围是0~30。MySQL要求S小于或等于(<=)P。

MySQL 中 DECIMAL类型可以接受字符串和小数类型的值,并在插入时进行合适的类型转换,以满足列定义的精度和要求。

例如下面两种插入方式都可以正常新增

INSERT INTO video_alarm (alarm_id,lng,lat) VALUES ('1','116.439425900000','116.439425900000') 
INSERT INTO video_alarm (alarm_id,lng,lat) VALUES ('2',116.439425900000,116.439425900000) 

测试数据

INSERT INTO `video_alarm` (`alarm_id`, `alarm_type`, `alarm_time`, `update_time`, `delete_flag`, `lng`, `lat`, `address_name`) VALUES ('7fa919b42ba34e51bfedb7209874fde6', '车辆', '2024-06-04 14:57:19', '2024-06-04 14:57:19', 0, 116.439425900000, 39.961025400000, '怡和阳光大厦C座');
INSERT INTO `video_alarm` (`alarm_id`, `alarm_type`, `alarm_time`, `update_time`, `delete_flag`, `lng`, `lat`, `address_name`) VALUES ('8a9f4dc704964f498bef323f9d173885', '徘徊', '2024-06-04 15:04:01', '2024-06-04 15:04:01', 0, 116.439192400000, 39.964094600000, '柳芳地铁站');
INSERT INTO `video_alarm` (`alarm_id`, `alarm_type`, `alarm_time`, `update_time`, `delete_flag`, `lng`, `lat`, `address_name`) VALUES ('a6683c105b3b95d5618c9e03409c1dbb', '安全帽检测', '2024-06-05 15:17:56', '2024-06-05 15:17:56', 0, 116.439246300000, 39.962145300000, '林达大厦');
INSERT INTO `video_alarm` (`alarm_id`, `alarm_type`, `alarm_time`, `update_time`, `delete_flag`, `lng`, `lat`, `address_name`) VALUES ('c5b42336fde41840f464f80f8c03d4b8', '行人', '2024-06-08 18:14:02', '2024-06-08 18:14:02', 0, 116.369483900000, 40.087734500000, '回龙观东大街地铁站');
INSERT INTO `video_alarm` (`alarm_id`, `alarm_type`, `alarm_time`, `update_time`, `delete_flag`, `lng`, `lat`, `address_name`) VALUES ('c852d530681764e80e868f85bf3a9260', '车辆入侵', '2024-06-05 10:07:16', '2024-06-05 10:07:16', 0, 116.367319000000, 40.076793700000, '霍营地铁站');
INSERT INTO `video_alarm` (`alarm_id`, `alarm_type`, `alarm_time`, `update_time`, `delete_flag`, `lng`, `lat`, `address_name`) VALUES ('e4d228accdba4c5c95789084f8a0b106', '车辆', '2024-06-04 14:47:43', '2024-06-04 14:47:43', 0, 116.377945900000, 40.112587100000, '温都水城文化广场');

距离计算并从近到远排序:

SELECT address_name AS 地点,
ST_Distance_Sphere(POINT(116.439425900000,39.961025400000),POINT(lng,lat)) AS 距离
FROM video_alarm
ORDER BY 距离

运行结果:

地点距离
怡和阳光大厦C座0
林达大厦125.46416817244642
柳芳地铁站341.85843822828775
霍营地铁站14262.313004760517
回龙观东大街地铁站15296.370344917823
温都水城文化广场17646.923764263298

标签:06,球面,alarm,MySQL,2024,video,地理坐标,time,lng
From: https://blog.csdn.net/m0_57038084/article/details/139835116

相关文章

  • 使用mysqlbackup备份工具加密备份
    1.生成keyecho-n"123456"|shasum-a2568d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92-#注意后面的中划线不算,共64个字符2.方式1:使用key#备份mysqlbackup--defaults-file=/etc/my.cnf--backup-dir=/tmp/fullbak--backup-image=/......
  • Centos7安装mysql8.21
                                                      Centos7安装mysql8.21一、缷载maridb,一般centos都会预装maridb,这个可能会与mysql冲突,先卸载它#查看是否自带maria......
  • 软件测试入门基础03-MySQL
    前言:这是我个人的学习记录,我是科班在读有一定基础,很多东西不会特别详细,欢迎大佬指点,也很高兴有人看了能得到帮助这一小节的内容是MySQL,我已经修完数据库,但时间久远忘记许多于是又看了一遍做个笔记。印象中数据库挺简单,简单的说就是增删改查。我修这门课时把实验做完基本上知......
  • MySQL 常用函数总结
    MySQL提供了丰富的内置函数,用于在查询中进行各种计算、字符串处理、日期和时间操作等。这些函数可以帮助我们更有效地从数据库中检索和处理数据。下面将总结一些MySQL中常用的函数及其用法。1.数值函数1.1ROUND()ROUND()函数用于对数值进行四舍五入操作。SELECTR......
  • 下载MySQL时无法修改存储路径及几个问题
    文章目录前言一、没办法修改下载路径二、只下载了MySQL却没办法可视化总结前言今天在下载MySQL的时候,出现了几个小问题,记录在这里,供大家参考一、没办法修改下载路径我相信这个是大家最头疼的问题,发现根据教程下载的时候出现的选项不是五个,就和图下面这个样子一样......
  • MySQL-Day3
    学习目标写SQL三步法边写边运行,否则后面出错时候会难以排查搭框架基本的select语句框架建起来,如果有多表,把相应的多表联合起来看条件决定where后面的显示的字段select后面的内容连接查询内连接两张表相同地方select*from 左/右连接包括内连接以及左/右部......
  • MySQL-Day4
    学习目标MySQL的内置函数concat拼接字符串函数把12,34,‘ab’,拼接成‘1234ab’selectconcat(12,34,'ab')length返回字符串字符的个数计算字符串长度‘abc’selectlength('abc')返回3一个utf-8,一个汉字表示3个长度selectlength(‘我和you’) 返回9内置函数可以......
  • SQL、Mysql、数据库到底什么关系
    sql很多都搞不清Sql和Mysql,数据库之间的关系,其实这些概念之间的关系用下面这张图就能搞懂:也就是说,数据库是草图,Mysql是交稿,数据可以理解成砖块,sql是处理砖块(数据)的工具。下面这张图是SQL的常见分类,以及常用操作指令:数据库中表的结构包括了代表列名的列,和具体数据的行表中的......
  • MySQL的优化建议和策略
    当谈到MySQL的优化时,以下是一些具体的建议和策略,它们可以帮助您提高MySQL数据库的性能:1.数据库设计优化规范化设计:将数据分解为更小的表,降低数据冗余度,提高数据一致性和查询效率。选择合适的数据类型:选择合适的数据类型可以减少存储空间的占用,提高数据检索和计算的效率。避......
  • 管理 MySQL Shell 配置选项
    与任何工具一样,MySQLShell的开箱即用配置可能无法满足每个用户在任何情况下的需求。我们需要一种方法来轻松查看、更新和持续(如有必要)更改默认配置。有一条命令可以帮助我们管理MySQLShell配置。这条命令就是\option。 查看帮助MySQLlocalhostJS>\optionNAME......