MySQL 通過經緯度計算距離
MySQL 是一款廣泛使用的關系型數據庫管理系統,它可以通過經緯度計算距離,為地理定位應用提供了很大的便利。以下是使用 MySQL 計算距離的示例。
查詢兩點距離
首先,我們需要創建一個包含經緯度信息的表:
CREATE TABLE `locations` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `latitude` decimal(10,8) NOT NULL, `longitude` decimal(11,8) NOT NULL, PRIMARY KEY (`id`) );然后,插入一些示例數據:
INSERT INTO `locations` (`id`, `name`, `latitude`, `longitude`) VALUES (1, 'New York City', 40.7128, -74.0059), (2, 'Los Angeles', 34.0522, -118.2437), (3, 'San Francisco', 37.7749, -122.4194);現在,我們可以使用以下查詢來查找兩點之間的距離:
SELECT id, name, ( 3959 * acos ( cos ( radians(37) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-122) ) + sin ( radians(37) ) * sin( radians( latitude ) ) ) ) AS distance FROM locations HAVING distance< 30 ORDER BY distance;其中,角度轉弧度可以使用 radians() 函數,弧度轉角度可以使用 degrees() 函數。3959 是地球半徑,使用的單位是英里。HAVING 子句用來過濾距離小于 30 英里的地點。 計算圓形區域內的地點 有時候,我們需要查詢一個圓形區域內的地點。我們可以使用上面的查詢算法,但是需要在 WHERE 子句添加限制條件。以下是一個示例查詢:
SELECT id, name, latitude, longitude FROM locations WHERE ( 3959 * acos ( cos ( radians(37) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-122) ) + sin ( radians(37) ) * sin( radians( latitude ) ) ) )< 30 ORDER BY distance;該查詢將返回距離經緯度為 37 和 -122 的點距離小于 30 英里的地點。 總結 MySQL 可以通過經緯度計算距離,提供了方便和靈活的地理信息計算能力。需要注意的是,距離計算是基于球形地球模型的,與實際地球表面的形狀和海拔高度差異有關。
上一篇css背景圖完全覆蓋
下一篇css背景圖只顯示一張