借助Mysql實(shí)現(xiàn)針對(duì)指定坐標(biāo)點(diǎn)和半徑范圍圈選物體

如題所描述的場(chǎng)景有很多,比如以自己所在的位置為圓點(diǎn)乡革,搜索附近的商鋪或者銀行等寇僧;再或者通過打車軟件叫車時(shí),以自己所在位置為圓點(diǎn)沸版,搜索附近可供服務(wù)的車輛或司機(jī)等嘁傀。

1 所需要的信息

圓點(diǎn)的位置信息(1個(gè)),附近物體上報(bào)的位置信息(N個(gè))视粮。

2 常用的技術(shù)方案

利用數(shù)據(jù)庫(mysql细办、oracle)提供的空間解析函數(shù),掃表逐個(gè)計(jì)算兩點(diǎn)之間的距離蕾殴,然后進(jìn)行比較判斷笑撞。此方案當(dāng)位置表數(shù)據(jù)量很大時(shí)岛啸,速度很慢。

3 優(yōu)化后的方案:Geohash算法+數(shù)據(jù)庫空間解析函數(shù)

實(shí)現(xiàn)流程簡(jiǎn)要如下:
(1)司機(jī)或車輛的位置信息上報(bào)時(shí)茴肥,使用Geohash算法進(jìn)行編碼后坚踩,保存入庫。
(2)查詢時(shí)根據(jù)圈選半徑選取合適的精讀分段級(jí)別瓤狐,依據(jù)指定級(jí)別查詢數(shù)據(jù)庫瞬铸。
(3)查詢的同時(shí),使用空間解析函數(shù)進(jìn)行距離計(jì)算并進(jìn)行過濾芬首。

補(bǔ)充說明:
(1)未防止查詢到的數(shù)據(jù)量過大赴捞,可根據(jù)距離默認(rèn)進(jìn)行排序,限制返回?cái)?shù)據(jù)的條數(shù)郁稍。
(2)為減少前期計(jì)算的數(shù)據(jù)量赦政,可通過對(duì)數(shù)據(jù)提前標(biāo)記業(yè)務(wù)標(biāo)簽的方式進(jìn)行提前初篩過濾。

4 實(shí)例:

以所處時(shí)間(2023-05-16 15:51:36)耀怜,圈選司機(jī)入?yún)? lng:113.814829, lat:22.633092, 圈選半徑:50000米, 時(shí)間窗口:5min恢着,物理車型:1018,1019,1020,圈選司機(jī):

select tt.driver_id from
(
select 
  t1.driver_id,
  st_distance_sphere(ST_POINTFROMTEXT('POINT(113.814829 22.633092)'),t1.gis) as distance 
from driver_location_info t1
inner join driver_tag_info t2
on t1.driver_id = t2.driver_id
where 
  t1.geo_hash_three in ( 'ws0' , 'ws2' , 'ws3' , 'ws1' , 'wec' , 'web' , 'w7z' , 'wkp' , 'wkr' ) 
  and t2.physics_vehicle_id in (1018,1019,1020)
  and t1.location_time BETWEEN '2023-05-16 15:46:36' and '2023-05-16 15:51:36'
) as tt 
where tt.distance <= 50000 order by tt.distance asc limit 1000;

MySQL官方提供的空間解析函數(shù)

  • 1财破、Point(x, y)
    作用:構(gòu)造坐標(biāo)掰派,后面的空間函數(shù)會(huì)用到。以地球?yàn)槔罅。谶@個(gè)函數(shù)里x代表經(jīng)度靡羡,y代表緯度。

  • 2俊性、ST_Distance(g1, g2)
    作用:計(jì)算 g1 和 g2 之間的直線距離略步。

  • 3、ST_Distance_Sphere(g1, g2 [, radius])
    作用:MySQL5.7版本新增定页,用于計(jì)算球體上兩點(diǎn)之間的最短球面距離(以米為單位)趟薄,默認(rèn)半徑值為:6,370,986米(地球的半徑),不輸入radius參數(shù)默認(rèn)計(jì)算地球兩點(diǎn)之間的最短球面距離典徊。

實(shí)例1-使用Mysql空間解析函數(shù)杭煎,計(jì)算兩個(gè)經(jīng)緯度點(diǎn)之間的最短球面距離
實(shí)例2-使用Mysql空間解析函數(shù),搜索指定范圍之內(nèi)的數(shù)據(jù)

更多空間解析函數(shù)見官方文檔:
MySQL5.7版本:
https://dev.mysql.com/doc/refman/5.7/en/spatial-function-reference.html
MySQL8.0版本:
https://dev.mysql.com/doc/refman/8.0/en/spatial-function-reference.html

重要參考文檔:

https://blog.csdn.net/tanghaixu/article/details/120352593

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卒落,一起剝皮案震驚了整個(gè)濱河市羡铲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌儡毕,老刑警劉巖犀勒,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異妥曲,居然都是意外死亡贾费,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門檐盟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褂萧,“玉大人,你說我怎么就攤上這事葵萎〉加蹋” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵羡忘,是天一觀的道長(zhǎng)谎痢。 經(jīng)常有香客問我,道長(zhǎng)卷雕,這世上最難降的妖魔是什么节猿? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮漫雕,結(jié)果婚禮上滨嘱,老公的妹妹穿的比我還像新娘。我一直安慰自己浸间,他們只是感情好太雨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著魁蒜,像睡著了一般囊扳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兜看,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天锥咸,我揣著相機(jī)與錄音,去河邊找鬼铣减。 笑死她君,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的葫哗。 我是一名探鬼主播缔刹,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼劣针!你這毒婦竟也來了校镐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤捺典,失蹤者是張志新(化名)和其女友劉穎鸟廓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡引谜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年牍陌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片员咽。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毒涧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贝室,到底是詐尸還是另有隱情契讲,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布滑频,位于F島的核電站捡偏,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峡迷。R本人自食惡果不足惜银伟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凉当。 院中可真熱鬧枣申,春花似錦、人聲如沸看杭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楼雹。三九已至模孩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贮缅,已是汗流浹背榨咐。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谴供,地道東北人块茁。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桂肌,于是被迫代替她去往敵國(guó)和親数焊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容