mysql空間函數(shù)計(jì)算坐標(biāo)距離方式
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)文章
Mysql實(shí)現(xiàn)增量恢復(fù)的方法詳解
本文給大家分享的是如何實(shí)現(xiàn)mysql增量恢復(fù)的場(chǎng)景以及具體實(shí)現(xiàn)方法,有需要的小伙伴可以參考下2018-07-07MySQL實(shí)戰(zhàn)文章(非常全的基礎(chǔ)入門類教程)
半個(gè)月時(shí)間把MySQL重新鞏固了一遍,梳理了一篇幾萬字超硬核文章,想學(xué)習(xí)mysql的朋友可以看看2023-05-05一文帶你搞懂MySQL中的隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換
在mysql中,當(dāng)操作涉及不同類型的數(shù)據(jù)時(shí),會(huì)根據(jù)一定的規(guī)則自動(dòng)進(jìn)行類型轉(zhuǎn)換,本文主要來和大家聊聊隱式類型轉(zhuǎn)換和顯式類型轉(zhuǎn)換的相關(guān)知識(shí),需要的可以參考一下2025-04-04MySQL系列之十五 MySQL常用配置和性能壓力測(cè)試
今天給大家?guī)硪黄坛剃P(guān)于MySQL常用配置和性能壓力測(cè)試的知識(shí),文中配置參數(shù)以32內(nèi)存的服務(wù)器為例,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-07-07