#1.兩點距離(1.4142135623730951)select st_distance(point(0,0),point(1,1
));select st_distance(point (120.10591, 30.30163),point(120.13026,30.25961
));mysql 5.6 新增
#2.兩點球面距離(
157249
.0357231545m)
select st_distance_sphere(point(0,0),point(1,1
));select st_distance_sphere(point (120.10591, 30.30163),point(120.13026,30.25961));
this function was added in mysql 5.7.6.
第乙個函式是計算平面座標系下,兩點的距離,就是
如果用於計算地球兩點的距離,帶入的引數是角度(經緯度),則計算的單位也是相差的角度,用此角度計算距離不准。緯度距離約111km每度,經度距離在赤道平面上是111km每度,隨緯度的公升高逐漸降低為0。
第二個函式是計算球面距離的公式,傳入的引數是經緯度(經度-180~180,緯度-90~90),返回的值以m為單位的距離。
st_distance_sphere(g1
,g2
[,radius
])
如果mysql版本不支援上述函式怎麼辦?自己實現嘍!下面是我自己寫的球面距離函式
delimiter //drop
function
ifexists
spherical_distance;
create
function spherical_distance(jin1 double,wei1 double,jin2 double,wei2 double) returns
double
no sql
begin
declare j1 double;
declare w1 double;
declare j2 double;
declare w2 double;
declare r double;
set j1 = jin1*
pi()/
180;
set w1 = wei1*
pi()/
180;
set j2 = jin2*
pi()/
180;
set w2 = wei2*
pi()/
180;
set r =
6370986;
return r*
acos(cos(w1)*
cos(w2)*
cos(j1-j2)+
sin(w1)*
sin(w2));
end//
delimiter ;
呼叫方式
select spherical_distance(120.10591,30.30163,120.13026,30.25961);
計算出的值和st_distance_sphere函式計算結果相差不大。
根據經緯度計算兩地距離
最近工作需要,網上搜尋了下根據經緯度計算兩地距離的方法,發現要麼是幾何法,畫圖 作一堆輔助線,然後證明推理,要麼二話不說直接套公式。這篇文章介紹一種容易理解的方式來求這個距離。地球是個不規則的橢球體 為了簡便我們當作球體來計算。球體上兩地的最短距離就是經過兩點的大圓的劣弧長度。思路如下 弧長 弦長 ...
PHP根據經緯度計算兩地之間的距離
php計算兩點的距離,無外乎兩種方法 一種是呼叫地圖介面,其次是純數學計算 計算球面上兩個點之間的距離 方法一 呼叫介面 地圖api會有自己的演算法,可能會根據實際情況路線計算距離,比如說不能直接直線到達,需要繞行,會計算繞行的路線的長度。但缺點是需要開發金鑰 key 而且一般來說每天會有請求次數限...
PHP根據經緯度計算兩地之間的距離
php計算兩點的距離,無外乎兩種方法 一種是呼叫地圖介面,其次是純數學計算 計算球面上兩個點之間的距離 方法一 呼叫介面 地圖api會有自己的演算法,可能會根據實際情況路線計算距離,比如說不能直接直線到達,需要繞行,會計算繞行的路線的長度。但缺點是需要開發金鑰 key 而且一般來說每天會有請求次數限...