mysql JS 計算兩GPS座標的距離函式:
阿新 • • 發佈:2019-02-01
sql:
drop function getDistance; DELIMITER $$ CREATE DEFINER=`root`@`localhost` FUNCTION `getDistance`( lng1 float(10,7) ,lat1 float(10,7) ,lng2 float(10,7) ,lat2 float(10,7) ) RETURNS double begin declare d double; declare radius int; set radius = 6378140; #假設地球為正球形,直徑為6378140米 set d = (2*ATAN2(SQRT(SIN((lat1-lat2)*PI()/180/2) *SIN((lat1-lat2)*PI()/180/2)+ COS(lat2*PI()/180)*COS(lat1*PI()/180) *SIN((lng1-lng2)*PI()/180/2) *SIN((lng1-lng2)*PI()/180/2)), SQRT(1-SIN((lat1-lat2)*PI()/180/2) *SIN((lat1-lat2)*PI()/180/2) +COS(lat2*PI()/180)*COS(lat1*PI()/180) *SIN((lng1-lng2)*PI()/180/2) *SIN((lng1-lng2)*PI()/180/2))))*radius; return d; end $$ DELIMITER ; select getDistance(39.9458190611,116.7906536806,39.9475430611,116.7971416806);
JS:
//進行經緯度轉換為距離的計算 function Rad(d){ return d * Math.PI / 180.0;//經緯度轉換成三角函式中度分表形式。 } //計算距離 返回米,引數分別為第一點的緯度,經度;第二點的緯度,經度 function GetDistance(lat1,lng1,lat2,lng2){ var radLat1 = Rad(lat1); var radLat2 = Rad(lat2); var a = radLat1 - radLat2; var b = Rad(lng1) - Rad(lng2); var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2))); s = s *6378.137 ;// EARTH_RADIUS; s = Math.round(s * 10000) / 10; //輸出為米 //s=s.toFixed(4); return s; }