科技资讯

84坐标系、02坐标系、百度坐标之间相互转换算法

发布日期:2023-07-06    点击次数:195

一、地图坐标转换java工具类

包含84坐标系、02坐标系、百度地图、高德地图、腾讯地图坐标之间相互转换的算法

wgs84ToGcj02:将WGS84坐标系下的经纬度转换为GCJ02坐标系下的经纬度。

gcj02ToWgs84:将GCJ02坐标系下的经纬度转换为WGS84坐标系下的经纬度。

gcj02ToBd09:将GCJ02坐标系下的经纬度转换为BD09坐标系下的经纬度。

bd09ToGcj02:将BD09坐标系下的经纬度转换为GCJ02坐标系下的经纬度。

gcj02ToQQ:将GCJ02坐标系下的经纬度转换为腾讯坐标系(QQ)下的经纬度。

qqToGcj02:将腾讯坐标系(QQ)下的经纬度转换为GCJ02坐标系下的经纬度。

importcom.alibaba.fastjson.JSONObject;publicclassCoordinateConversionUtils{privatestaticfinaldoubleEARTH_RADIUS=6378137;//地球半径,单位:米privatestaticfinaldoubleX_PI=Math.PI*3000.0/180.0;privatestaticfinaldoubleA=6378245.0;privatestaticfinaldoubleEE=0.00669342162296594323;/***将84坐标系(WGS84)转换为02坐标系(GCJ02)**@paramlng经度*@paramlat纬度*@return转换后的经纬度*/publicstaticJSONObjectwgs84ToGcj02(doublelng,doublelat){JSONObjectresult=newJSONObject;if(outOfChina(lng,lat)){result.put("lng",lng);result.put("lat",lat);returnresult;}doubledLat=transformLat(lng-105.0,lat-35.0);doubledLng=transformLng(lng-105.0,lat-35.0);doubleradLat=lat/180.0*Math.PI;doublemagic=Math.sin(radLat);magic=1-EE*magic*magic;doublesqrtMagic=Math.sqrt(magic);dLat=(dLat*180.0)/((EARTH_RADIUS*(1-EE))/(magic*sqrtMagic)*Math.PI);dLng=(dLng*180.0)/(EARTH_RADIUS/sqrtMagic*Math.cos(radLat)*Math.PI);doublemgLat=lat+dLat;doublemgLng=lng+dLng;result.put("lng",mgLng);result.put("lat",mgLat);returnresult;}/***将02坐标系(GCJ02)转换为84坐标系(WGS84)**@paramlng经度*@paramlat纬度*@return转换后的经纬度*/publicstaticJSONObjectgcj02ToWgs84(doublelng,doublelat){JSONObjectresult=newJSONObject;if(outOfChina(lng,lat)){result.put("lng",lng);result.put("lat",lat);returnresult;}doubledLat=transformLat(lng-105.0,lat-35.0);doubledLng=transformLng(lng-105.0,lat-35.0);doubleradLat=lat/180.0*Math.PI;doublemagic=Math.sin(radLat);magic=1-EE*magic*magic;doublesqrtMagic=Math.sqrt(magic);dLat=(dLat*180.0)/((EARTH_RADIUS*(1-EE))/(magic*sqrtMagic)*Math.PI);dLng=(dLng*180.0)/(EARTH_RADIUS/sqrtMagic*Math.cos(radLat)*Math.PI);doublemgLat=lat+dLat;doublemgLng=lng+dLng;result.put("lng",lng*2-mgLng);result.put("lat",lat*2-mgLat);returnresult;}/***将02坐标系(GCJ02)转换为百度坐标系(BD09)**@paramlng经度*@paramlat纬度*@return转换后的经纬度*/publicstaticJSONObjectgcj02ToBd09(doublelng,doublelat){JSONObjectresult=newJSONObject;doublez=Math.sqrt(lng*lng+lat*lat)+0.00002*Math.sin(lat*X_PI);doubletheta=Math.atan2(lat,lng)+0.000003*Math.cos(lng*X_PI);doublebdLng=z*Math.cos(theta)+0.0065;doublebdLat=z*Math.sin(theta)+0.006;result.put("lng",bdLng);result.put("lat",bdLat);returnresult;}/***将百度坐标系(BD09)转换为02坐标系(GCJ02)**@paramlng经度*@paramlat纬度*@return转换后的经纬度*/publicstaticJSONObjectbd09ToGcj02(doublelng,doublelat){JSONObjectresult=newJSONObject;doublex=lng-0.0065,y=lat-0.006;doublez=Math.sqrt(x*x+y*y)-0.00002*Math.sin(y*X_PI);doubletheta=Math.atan2(y,x)-0.000003*Math.cos(x*X_PI);doublegcjLng=z*Math.cos(theta);doublegcjLat=z*Math.sin(theta);result.put("lng",gcjLng);result.put("lat",gcjLat);returnresult;}/***将02坐标系(GCJ02)转换为腾讯坐标系(QQ)**@paramlng经度*@paramlat纬度*@return转换后的经纬度*/publicstaticJSONObjectgcj02ToQQ(doublelng,doublelat){JSONObjectresult=newJSONObject;doublex=lng;doubley=lat;doublez=Math.sqrt(x*x+y*y)+0.00002*Math.sin(y*X_PI);doubletheta=Math.atan2(y,x)+0.000003*Math.cos(x*X_PI);doubleqqLng=z*Math.cos(theta)+0.00330;doubleqqLat=z*Math.sin(theta)+0.00150;result.put("lng",qqLng);result.put("lat",qqLat);returnresult;}/***将腾讯坐标系(QQ)转换为02坐标系(GCJ02)**@paramlng经度*@paramlat纬度*@return转换后的经纬度*/publicstaticJSONObjectqqToGcj02(doublelng,doublelat){JSONObjectresult=newJSONObject;doublex=lng-0.00330;doubley=lat-0.00150;doublez=Math.sqrt(x*x+y*y)-0.00002*Math.sin(y*X_PI);doubletheta=Math.atan2(y,x)-0.000003*Math.cos(x*X_PI);doublegcjLng=z*Math.cos(theta);doublegcjLat=z*Math.sin(theta);result.put("lng",gcjLng);result.put("lat",gcjLat);returnresult;}/***判断是否超出中国范围**@paramlng经度*@paramlat纬度*@return是否超出中国范围*/privatestaticbooleanoutOfChina(doublelng,doublelat){returnlng137.8347

上一篇:液态金属的突破可以将常见材料转化为智能电子设备
下一篇:京东健康, 站上数字医疗潮头