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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。