mysql經緯度查範圍內 sql語句查詢經緯度範圍

2021-10-18 11:52:43 字數 1028 閱讀 5663

最近在做查詢指定經緯度範圍的資料;問題不知如何下手,於是網上找了點資料,其中有些不懂的地方希望大家能給點想法!

問題是這樣的:

sql語句查詢經緯度範圍

指定乙個經緯度,給定乙個範圍值(單位:千公尺),查出在經緯度周圍這個範圍內的資料。

經度:113.914619

緯度:22.50128

範圍:2km

longitude為資料表經度字段

latitude為資料表緯度字段

sql在mysql下測試通過,其他資料庫可能需要修改

sql語句如下:

select * from location where sqrt( ( ((113.914619-longitude)*pi()*12656*cos(((22.50128+latitude)/2)*pi()/180)/180) * ((113.914619-longitude)*pi()*12656*cos (((22.50128+latitude)/2)*pi()/180)/180) ) + ( ((22.50128-latitude)*pi()*12656/180) * ((22.50128-latitude)*pi()*12656/180) ) )<2

其中的12656是啥意思啊,怎麼來的呀?如果有大神整體解釋下那就更好了!!

可以參考一下geohash,效率應該更高

算一下球面兩點距離就知道了,就是乙個公式

d(x1,y1,x2,y2)=r*arccos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2))

加上距離的換算單位,自己就能知道那個值了

從語義來看應該是

1經度(緯度)= 12656公尺

。不過這只是近似值,尤其對經度來說,緯度越高的地方這個值越小,極端情況就是在極點為0。

這條sql的效率極低,需要掃瞄整張表。可以考慮使用空間索引,mysql的話,可以了解下

mysql spatial

。mongodb對空間資料的支援比較好,內建了

geohash

功能。當初看了這篇文章,問題就解決了

mysql經緯度查範圍內 sql語句查詢經緯度範圍

指定乙個經緯度,給定乙個範圍值 單位 千公尺 查出在經緯度周圍這個範圍內的資料。經度 113.914619 緯度 22.50128 範圍 2km longitude為資料表經度字段 latitude為資料表緯度字段 sql在mysql下測試通過,其他資料庫可能需要修改 sql語句如下 select ...

經緯度查位址與位址查經緯度

geocoding是googole提供的一項服務,主要有兩個功能 1.查詢某位址的經緯度 2.查詢經緯度的具體位址 geocoder物件 geocoder的替代品 googlegeocodingapi 根據位址查詢經緯度 上海市春曉路350號 sensor false bounds的作用 在指定的經...

sql語句查詢經緯度範圍

指定乙個經緯度,給定乙個範圍值 單位 千公尺 查出在經緯度周圍這個範圍內的資料。經度 113.914619 緯度 22.50128 範圍 2km longitude為資料表經度字段 latitude為資料表緯度字段 sql在mysql下測試通過,其他資料庫可能需要修改 sql語句如下 select ...