mysql根據經緯度求兩地距離

2022-01-22 06:20:43 字數 1671 閱讀 4526

#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 而且一般來說每天會有請求次數限...