现在基于地理信息的应用很火,无论是从google map上获取的地理位置信息,还是通过iphone或Android这类拥有GPS模块的移动终端获取的地理位置信息,都是十进制的经纬度信息。在我们做实际应用时可能需要计算在地球表面某两点间的距离,这里以JavaScript为示例语言,提供计算方法,这也是google map所采用的计算方法。
1. 十进制经纬度转度、分、秒
- functiondec2deg(dec){
- vardec=Math.abs(dec)+"";
- dec=dec.split(".");
- vardeg=dec[0];
- dec[1]="0."+dec[1];
- varmin_sec=dec[1]*3600;
- varmin=Math.floor(min_sec/60);
- varsec=(min_sec-(min*60));
- return[deg,min,sec];
- }
function dec2deg(dec){
var dec = Math.abs(dec) + "";
dec = dec.split(".");
var deg = dec[0];
dec[1] = "0."+ dec[1];
var min_sec = dec[1] * 3600;
var min = Math.floor( min_sec / 60 );
var sec = ( min_sec - ( min * 60 ) ) ;
return [deg, min, sec];
}
2. 度、分、秒转十进制经纬度
- functiondeg2dec(deg,min,sec){
- vardeg=Math.abs(deg);
- varmin=Math.abs(min);
- varsec=Math.abs(sec);
- returndeg*1+(sec*1+min*60)/3600;
- }
function deg2dec(deg, min, sec){
var deg = Math.abs(deg);
var min = Math.abs(min);
var sec = Math.abs(sec);
return deg * 1 + ( sec * 1 + min * 60 )/3600 ;
}
3. 计算两点间距离
- //弧度转换
- functionrad(d){
- returnd*Math.PI/180.0;
- }
- //计算距离,结果的单位为千米(km)
- functioncalDistance(lat1,lng1,lat2,lng2){
- if((Math.abs(lat1)>90)||(Math.abs(lat2)>90))
- returnfalse;
- if((Math.abs(lng1)>180)||(Math.abs(lng2)>180))
- returnfalse;
- varradLat1=rad(lat1);
- varradLat2=rad(lat2);
- vara=radLat1-radLat2;
- varb=rad(lng1)-rad(lng2);
- vars=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;//地球半径6378.137
- s=Math.round(s*10000)/10000;
- returns;
- }