1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 如何使用SQL语句根据经纬度计算距离

如何使用SQL语句根据经纬度计算距离

时间:2020-06-19 10:17:15

相关推荐

如何使用SQL语句根据经纬度计算距离

本文介绍如何通过SQL语句根据经纬度计算距离。SQL语句中要到了ACOS、COS、SIN、RADIANS等SQL函数。

1、创建测试表

执行以下SQL语句创建测试表。

CREATE TABLE `test` (`id` bigint(20) NOT NULL COMMENT '编号',`lon` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '经度',`lat` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '纬度',PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

2、插入模拟数据

执行以下SLQ创建模拟数据。

INSERT INTO `test` VALUES (1, '113.66072', '34.79977');INSERT INTO `test` VALUES (2, NULL, NULL);INSERT INTO `test` VALUES (3, '113.42175853602474', '34.811229145387216');INSERT INTO `test` VALUES (4, '113.73812176197008', '34.783202623364886');INSERT INTO `test` VALUES (5, '113.65', '34.76');INSERT INTO `test` VALUES (6, '113.65', '34.76');INSERT INTO `test` VALUES (7, '113.65', '34.76');INSERT INTO `test` VALUES (8, '113.673302', '34.804753');INSERT INTO `test` VALUES (9, '34.79977', '34.81597096304563');

执行成功后表结构数据如下。

3、根据经纬度计算距离

假设当前的位置为【113.65、34.76】,则可以通过以下SQL计算当前位置与每条记录之间的距离。

SELECT *, ACOS(COS(RADIANS(34.76)) *COS(RADIANS(lat)) *COS(RADIANS(lon) - RADIANS(113.65)) +SIN(RADIANS(34.76)) *SIN(RADIANS(lat))) * 6378 as distanceFROM test

执行结果如下,distance字段即为距离值,单位千米(km),如需转换为米(m),则乘以1000就行了。

新时代农民工(QQ:277718357) 点击关注下方↓微信公众号:程序进阶之路,了解更多技术知识。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。