欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql空間函數(shù)計(jì)算坐標(biāo)距離方式

 更新時(shí)間:2025年02月13日 09:24:00   作者:worilb  
文章介紹了如何使用MySQL的空間函數(shù)`st_distance`和`st_distance_sphere`計(jì)算兩點(diǎn)之間的距離,并對(duì)比了兩種方法的準(zhǔn)確性,`st_distance`函數(shù)計(jì)算的是兩點(diǎn)間的度數(shù),需要乘以111195轉(zhuǎn)換為米,但因每度長(zhǎng)度不一致會(huì)有誤差

mysql空間函數(shù)計(jì)算坐標(biāo)距離

有一張表,表中有每個(gè)人所在位置及經(jīng)緯度,現(xiàn)在求表中所有人離指定經(jīng)緯度的位置。

DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `longitude` decimal(9, 6) NULL DEFAULT NULL,
  `latitude` decimal(9, 6) NULL DEFAULT NULL,
  `address` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES (1, '張三', 116.397755, 39.903179, '天安門');
INSERT INTO `teacher` VALUES (2, '李四', 116.397029, 39.917840, '故宮');
INSERT INTO `teacher` VALUES (3, '王五', 116.190595, 39.876665, '園博園');
INSERT INTO `teacher` VALUES (4, '趙六', 116.410829, 39.881983, '天壇公園');

假設(shè)本人目前在人民 大會(huì)堂,經(jīng)度116.393823,緯度39.905024,現(xiàn)在要查詢表中四個(gè)人距本人多少米。

現(xiàn)在用Mysql提供的空間函數(shù)演示計(jì)算。

1. st_distance函數(shù)

st_distance函數(shù)計(jì)算:

SELECT
	*,
	ROUND( st_distance ( point ( longitude, latitude ), point ( 116.393823, 39.905024 ))* 111195, 2 ) dis 
FROM
	teacher

2. st_distance_sphere函數(shù)

st_distance_sphere函數(shù)計(jì)算:

SELECT
	*,
	round( st_distance_sphere ( point ( 116.393823, 39.905024 ), point ( `longitude`, `latitude` ) ), 2 ) dis 
FROM
	teacher 
ORDER BY
	dis

比較兩種查詢結(jié)果,距離有不小的偏差。因?yàn)榈谝环Nst_distance函數(shù)計(jì)算的是兩點(diǎn)間的度,所以在計(jì)算出度數(shù)后再乘以111195得出米,而每度的長(zhǎng)度并不一致所以有誤差。第二種st_distance_sphere函數(shù)直接計(jì)算兩點(diǎn)間的距離,更加準(zhǔn)確。

對(duì)比下地圖測(cè)距:

3. st_distance_sphere取值范圍問題(極易踩坑)

在st_distance_sphere 函數(shù)中使用point計(jì)算經(jīng)緯度時(shí)有限制取值范圍,其中緯度為大于等于-90度小于等于90度,而經(jīng)度卻是大于-180度且小于等于180度。

如下所示:

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論