
publicstaticPointWGS84ToCGS2000(doublexCoordinates,doubleyCoordinates)//参数 经度纬度{// 数值过低可能是因为行政区代码错误导致的if(xCoordinates0.0000001||yCoordinates0.0000001){returnnull;}intProjNo0;PointpointnewPoint(xCoordinates,yCoordinates);if(CheckIsWGS84Coordinates(xCoordinates,yCoordinates)){pointWgs84ToCgs2000(point,ProjNo);}else{if(!String.valueOf(point.getX()).startsWith(String.valueOf(ProjNo))){//point CoordinateTrans.Xian80ToWgs84(point, null);//point ShapeAreaHelper.TransCoordinatesFrom84To2000(point, ProjNo);}}returnpoint;}/** * 84经纬度坐标转2000平面坐标 * param sourcePoint * param ProjNo * return */publicstaticPointWgs84ToCgs2000(PointsourcePoint,intProjNo){if(sourcePointnull){//throw new Exception(sourcePoint);}PointtargetPointGaussProjCal(sourcePoint,ProjNo);returntargetPoint;}/** * 高斯投影正算 * param sourcePoint * param ProjNo * return */publicstaticPointGaussProjCal(PointsourcePoint,intProjNo){PointpointGaussProjCal(sourcePoint.getX(),sourcePoint.getY(),EarthParam.CGS2000.A,EarthParam.CGS2000.F,ProjNo);returnpoint;}privatestaticPointGaussProjCal(doublelongitude,doublelatitude,doublea,doublef,intProjNo){//int ProjNo 0;intZoneWide;////带宽doublelongitude1,latitude1,longitude0,latitude0,X0,Y0,xval,yval;doublee2,ee,NN,T,C,A,M,iPI;iPIMath.PI/180;////3.1415926535898/180.0;ZoneWide3;////3度带宽//a 6378245.0; f 1.0 / 298.3; //54年北京坐标系参数//a6378140.0; f1/298.257; //80年西安坐标系参数//a6378137m;f1/298.257223563;//WGS-84坐标系if(ProjNo0){ProjNo(int)Math.round(longitude/ZoneWide);}longitude0ProjNo*ZoneWide;longitude0longitude0*iPI;latitude00;//经度转换为弧度longitude1longitude*iPI;//纬度转换为弧度latitude1latitude*iPI;e22*f-f*f;eee2*(1.0-e2);NNa/Math.sqrt(1.0-e2*Math.sin(latitude1)*Math.sin(latitude1));TMath.tan(latitude1)*Math.tan(latitude1);Cee*Math.cos(latitude1)*Math.cos(latitude1);A(longitude1-longitude0)*Math.cos(latitude1);Ma*((1-e2/4-3*e2*e2/64-5*e2*e2*e2/256)*latitude1-(3*e2/83*e2*e2/3245*e2*e2*e2/1024)*Math.sin(2*latitude1)(15*e2*e2/25645*e2*e2*e2/1024)*Math.sin(4*latitude1)-(35*e2*e2*e2/3072)*Math.sin(6*latitude1));xvalNN*(A(1-TC)*A*A*A/6(5-18*TT*T72*C-58*ee)*A*A*A*A*A/120);yvalMNN*Math.tan(latitude1)*(A*A/2(5-T9*C4*C*C)*A*A*A*A/24(61-58*TT*T600*C-330*ee)*A*A*A*A*A*A/720);X01000000L*(ProjNo)500000L;Y00;xvalxvalX0;yvalyvalY0;returnnewPoint(xval,yval);}/** * 判断是否wgs84坐标 * param xCoordinates * param yCoordinates * return */publicstaticbooleanCheckIsWGS84Coordinates(doublexCoordinates,doubleyCoordinates){booleanresfalse;if(xCoordinates360xCoordinates!0yCoordinates360yCoordinates!0){restrue;}returnres;}/** * 保留三位小数 * param para * return */publicdoublegetBigDecimal(doublepara){BigDecimalbnewBigDecimal(para);//3 为保留小数位数 四舍五入doublepi1b.setScale(3,java.math.BigDecimal.ROUND_HALF_UP).doubleValue();returnpi1;}/** * 保留三位小数 * 测试方法 * return */Testvoidtest4(){/*String path E:\\dev\\cgdb\\CompressedPackage\\DB\\20220331154011253\\420322郧西县\\1716641\\(420322)郧西县_20220331154011253.db; //DBUtil.setConnection(path); Integer integer DBUtil.selectTBCount(path); System.out.println(integer);*/PointpointWGS84ToCGS2000(111.591111974096,32.3265852655767);doublebigDecimalgetBigDecimal(point.getX());doublebigDecimal1getBigDecimal(point.getY());System.out.println(bigDecimal);System.out.println(bigDecimal1);System.out.println(X:point.getX() Y:point.getY());}publicclassEarthParam{/** * 长轴 eg:6378137 *///private double A;/** * 扁心率 eg:1 / 298.257223563 *///private double F;publicclassCGS2000{/** * 精确 */publicstaticfinaldoubleA6378137;/** * 模糊 like */publicstaticfinaldoubleF1.0/298.257222101;}publicclassWGS84{/** * 精确 */publicstaticfinaldoubleA6378137;/** * 模糊 like */publicstaticfinaldoubleF1.0/298.257223563;}publicclassXIAN80{/** * 精确 */publicstaticfinaldoubleA6378140;/** * 模糊 like */publicstaticfinaldoubleF1.0/298.25722101;}publicclassBJ54{/** * 精确 */publicstaticfinaldoubleA6378245.0;/** * 模糊 like */publicstaticfinaldoubleF1.0/298.257;}