比方說,我有一個包含城市的列表的表:SELECT問題
city | latitude | longitude
---------------------------
XX | 34.800 | 48.550
假設我有一個用戶的大致位置(經度/緯度),我怎麼覺得這個城市最接近?也就是說,我怎麼發現的緯度和經度的城市最接近用戶的緯度/長?
比方說,我有一個包含城市的列表的表:SELECT問題
city | latitude | longitude
---------------------------
XX | 34.800 | 48.550
假設我有一個用戶的大致位置(經度/緯度),我怎麼覺得這個城市最接近?也就是說,我怎麼發現的緯度和經度的城市最接近用戶的緯度/長?
退房
Creating a Store Locator with PHP, MySQL & Google Maps
的計算方法提出有獨立於谷歌地圖,你應該能夠從那裏得到完整的算法。
一個只需要警惕的不同映射的方法和所得到的不同的座標。根據座標使用的映射,您可能需要調整算法的參數。
你可以使用geospatial extensions for MySQL,或
下面的公式就會發現兩點之間的海里距離。
3600 * ACOS(SIN(latitude2_rads) *罪(latitude1_rads)+ COS(latitude2_rads) * COS(latitude1_rads) * COS(longitude1_rads - longitude2_rads))
所以,你可以連接到一個選擇此如下(以下面-7所需LAT和-14是所需LON)
假設緯度/經度字段是在度:
select * FROM NDB as c1
order by acos(sin(radians(-7))
* sin(radians(latitude)) + cos(radians(-7))
* cos(radians(latitude))
* cos(radians(longitude) - radians(-14)))
limit 0,1
這可能不是非常有效的大型數據集,我只是22706點的記錄跑了針對表,花了0.163秒。
如果性能是一個問題,那麼它可能是更好的從固定數據預先計算所有點的距離,然後用在SQL計算它的那個吧。
的反向地理查詢的結果不能根據谷歌地圖協議保存在數據庫中。這就是爲什麼我喜歡另一種解決方案 – NNN 2010-02-28 13:01:57