js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
本文实例讲述了js中火星坐标、百度坐标、WGS84坐标转换实现方法。分享给大家供大家参考,具体如下:
//定义一些常量
varx_PI=3.14159265358979324*3000.0/180.0;
varPI=3.1415926535897932384626;
vara=6378245.0;
varee=0.00669342162296594323;
/**
*百度坐标系(BD-09)与火星坐标系(GCJ-02)的转换
*即百度转谷歌、高德
*/
functionbd09togcj02(bd_lon,bd_lat){
varx_pi=3.14159265358979324*3000.0/180.0;
varx=bd_lon-0.0065;
vary=bd_lat-0.006;
varz=Math.sqrt(x*x+y*y)-0.00002*Math.sin(y*x_pi);
vartheta=Math.atan2(y,x)-0.000003*Math.cos(x*x_pi);
vargg_lng=z*Math.cos(theta);
vargg_lat=z*Math.sin(theta);
return[gg_lng,gg_lat]
}
/**
*火星坐标系(GCJ-02)与百度坐标系(BD-09)的转换
*即谷歌、高德转百度
*/
functiongcj02tobd09(lng,lat){
varz=Math.sqrt(lng*lng+lat*lat)+0.00002*Math.sin(lat*x_PI);
vartheta=Math.atan2(lat,lng)+0.000003*Math.cos(lng*x_PI);
varbd_lng=z*Math.cos(theta)+0.0065;
varbd_lat=z*Math.sin(theta)+0.006;
return[bd_lng,bd_lat]
}
/**
*WGS84转GCj02
*/
functionwgs84togcj02(lng,lat){
if(out_of_china(lng,lat)){
return[lng,lat]
}
else{
vardlat=transformlat(lng-105.0,lat-35.0);
vardlng=transformlng(lng-105.0,lat-35.0);
varradlat=lat/180.0*PI;
varmagic=Math.sin(radlat);
magic=1-ee*magic*magic;
varsqrtmagic=Math.sqrt(magic);
dlat=(dlat*180.0)/((a*(1-ee))/(magic*sqrtmagic)*PI);
dlng=(dlng*180.0)/(a/sqrtmagic*Math.cos(radlat)*PI);
varmglat=lat+dlat;
varmglng=lng+dlng;
return[mglng,mglat]
}
}
/**
*GCJ02转换为WGS84
*/
functiongcj02towgs84(lng,lat){
if(out_of_china(lng,lat)){
return[lng,lat]
}
else{
vardlat=transformlat(lng-105.0,lat-35.0);
vardlng=transformlng(lng-105.0,lat-35.0);
varradlat=lat/180.0*PI;
varmagic=Math.sin(radlat);
magic=1-ee*magic*magic;
varsqrtmagic=Math.sqrt(magic);
dlat=(dlat*180.0)/((a*(1-ee))/(magic*sqrtmagic)*PI);
dlng=(dlng*180.0)/(a/sqrtmagic*Math.cos(radlat)*PI);
mglat=lat+dlat;
mglng=lng+dlng;
return[lng*2-mglng,lat*2-mglat]
}
}
functiontransformlat(lng,lat){
varret=-100.0+2.0*lng+3.0*lat+0.2*lat*lat+0.1*lng*lat+0.2*Math.sqrt(Math.abs(lng));
ret+=(20.0*Math.sin(6.0*lng*PI)+20.0*Math.sin(2.0*lng*PI))*2.0/3.0;
ret+=(20.0*Math.sin(lat*PI)+40.0*Math.sin(lat/3.0*PI))*2.0/3.0;
ret+=(160.0*Math.sin(lat/12.0*PI)+320*Math.sin(lat*PI/30.0))*2.0/3.0;
returnret
}
functiontransformlng(lng,lat){
varret=300.0+lng+2.0*lat+0.1*lng*lng+0.1*lng*lat+0.1*Math.sqrt(Math.abs(lng));
ret+=(20.0*Math.sin(6.0*lng*PI)+20.0*Math.sin(2.0*lng*PI))*2.0/3.0;
ret+=(20.0*Math.sin(lng*PI)+40.0*Math.sin(lng/3.0*PI))*2.0/3.0;
ret+=(150.0*Math.sin(lng/12.0*PI)+300.0*Math.sin(lng/30.0*PI))*2.0/3.0;
returnret
}
/**
*判断是否在国内,不在国内则不做偏移
*/
functionout_of_china(lng,lat){
return(lng<72.004||lng>137.8347)||((lat<0.8293||lat>55.8271)||false);
}
更多关于JavaScript相关内容还可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》及《JavaScript字符与字符串操作技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。