1. 程式人生 > >Oracle根據兩點經緯度計算兩點距離

Oracle根據兩點經緯度計算兩點距離

Oracle資料庫根據兩點經緯度計算兩點的距離

abs(6371.004 * acos(sin(緯度1) *sin(緯度2) * cos(經度1 - 經度2) +cos(緯度1) * cos(緯度2)) * acos(-1) / 180)

舉例:現有兩個座標點A(經度1,緯度1),B(經度2,緯度2),現計算兩點之間的直線舉例:

abs(6371.004 * acos(sin(緯度1) *sin(緯度2) * cos(經度1 - 經度2) +cos(緯度1) * cos(緯度2)) * acos(-1) / 180)

在資料庫中查詢語句為:

SELECT abs(6371.004 * acos(sin(緯度1) *sin(緯度2) * cos(經度1 - 經度2) +cos(緯度1) * cos(緯度2)) * acos(-1) / 180) FROM dual

查詢結果為公里為單位的距離

示例:

round(abs(6371.004 * acos(sin(x.lon) *sin(#{lng}) * cos(x.lat- #{lat}) +cos(x.lon) * cos(#{lng})) * acos(-1) / 180),2) distance

在這裡我用round函式取了兩位小數,相當於是精確到十米上了,然後裡面的x.lon,x.lat是我本身要用來計算距離的座標表裡面取出來的,lon,lat是我要與之計算距離的座標,相當於是目標點,最後計算結果用了distance做別名