java 坐标反算_Java空间大地坐标系坐标 - 高斯投影坐标系坐标(BLH-XY)正反算

/*

* 算法是自己研究的,现在公开大家随便看,但是如果这份资料对你有用请你给一个评价,谢谢!

*/

/**

* @Title: GeodeticForGauss

* @Description: 空间大地坐标转换高斯投影平面直角坐标

* @param: @param B 纬度

* @param: @param L 经度

* @param: @param type 几度分带

* @param: @param Num 目标坐标系

* @return: void

*/

public static void GeodeticForGauss(double B, double L, int type, int Num) {

TuoQiuJiChun tuoQiuJiChun = null;

switch (Num) {

case 84:

// WGS-84坐标系

tuoQiuJiChun = new TuoQiuJiChun("WGS-84坐标系", 6378137, 6356752.3142);

break;

case 80:

// 西安-80坐标系

tuoQiuJiChun = new TuoQiuJiChun("西安-80坐标系", 6378140,

6356755.2881575287);

break;

case 54:

// 北京-54坐标系

tuoQiuJiChun = new TuoQiuJiChun("北京-54坐标系", 6378245,

6356863.0187730473);

break;

}

double beltNum;

beltNum = Math.ceil((L - (type == 3 ? 1.5 : 0)) / type);

if (type == 3 && beltNum * 3 == L - 1.5) {

beltNum += 1;

}

double L0 = L - (beltNum * type - (type == 6 ? 3 : 0)); // 中央经线的度数

System.out.println(L0);

double rB, tB, m;

rB = B * Math.PI / 180;

tB = Math.tan(rB);

m = Math.cos(rB) * L0 * Math.PI / 180;

double N = tuoQiuJiChun.getM_Long()

/ Math.sqrt(1 - tuoQiuJiChun.getFirstE() * Math.sin(rB)

* Math.sin(rB));

double it2 = tuoQiuJiChun.getSecondE() * Math.pow(Math.cos(rB), 2);

double x = 0.5 * m * m + (double) 1 / 24

* (5 - tB * tB + 9 * it2 + 4 * it2 * it2) * Math.pow(m, 4)

+ (double) 1 / 720 * (61 - 58 * tB * tB + Math.pow(tB, 4))

* Math.pow(m, 6);

double m0 = tuoQiuJiChun.getM_Long() * (1 - tuoQiuJiChun.getFirstE());

double m2 = (double) 3 / 2 * tuoQiuJiChun.getFirstE() * m0;

double m4 = (double) 5 / 4 * tuoQiuJiChun.getFirstE() * m2;

double m6 = (double) 7 / 6 * tuoQiuJiChun.getFirstE() * m4;

double m8 = (double) 9 / 8 * tuoQiuJiChun.getFirstE() * m6;

double a0, a2, a4, a6, a8;

a0 = m0 + (double) 1 / 2 * m2 + (double) 3 / 8 * m4 + (double) 5 / 16

* m6 + (double) 35 / 128 * m8;

a2 = (double) 1 / 2 * m2 + (double) 1 / 2 * m4 + (double) 15 / 32 * m6

+ (double) 7 / 16 * m8;

a4 = (double) 1 / 8 * m4 + (double) 3 / 16 * m6 + (double) 7 / 32 * m8;

a6 = (double) 1 / 32 * m6 + (double) 1 / 16 * m8;

a8 = (double) 1 / 128 * m8;

// 求子午线弧长

double X1 = a0 * rB - a2 * Math.sin(2 * rB) * 0.5 + (double) 1 / 4 * a4

* Math.sin(4 * rB) - (double) 1 / 6 * a6 * Math.sin(6 * rB)

+ (double) 1 / 8 * a8 * Math.sin(8 * rB);

double X = X1 + N * x * tB;

double Y = N

* (m + (double) 1 / 6 * (1 - tB * tB + it2) * Math.pow(m, 3) + (double) 1

/ 720

* (5 - 18 * tB * tB + Math.pow(tB, 4) + 14 * it2 - 58

* tB * tB * it2) * Math.pow(m, 5)) + 500000;

}

/**

* @Title: GaussForGeodetic

* @Descrip


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部