• 大小: 5KB
    文件类型: .java
    金币: 2
    下载: 0 次
    发布日期: 2024-02-02
  • 语言: Java
  • 标签: 七参数  坐标转换  

资源简介

1.CGCS2000下的大地坐标到CGCS2000下的空间直角坐标的转换; 2.CGCS2000下的空间直角坐标经过七参数转换,得到西安80下的空间直角坐标; 3.西安80下的空间直角坐标向西安80下的大地坐标转换; 4.西安80下的大地坐标进行高斯投影,得到平面坐标。 详情请参照:http://blog.csdn.net/dahongdahong/article/details/50563659 PS: 这个下载积分,我最开始设置是0分,不知道这个系统为什么改成了48分了,我也没法修改分数。 用户如果需要的话,可以直接在博客上留言或私信,留下邮箱,我会给发给你们的。 2019-09-16

资源截图

代码片段和文件信息

import java.math.BigDecimal;

import static java.lang.Math.cos;
import static java.lang.Math.sqrt;
import static java.lang.Math.tan;

/**
 * Created by Administrator on 2016/1/20.
 */
public final class CoordsTransformer {
//七参数
//private double dx=-0.8770258428dy=1.9951090363dz=1.1814690245Ox=-8.2334e-6Oy=-8.2334e-6Oz=0.0000161k=0.08038244674058/1000000;
private double dx = -1.2486042104 dy = 2.4810909393 dz = 1.4728271737 Ox = Math.toRadians(0.7829343527 / 3600) Oy = Math.toRadians(-1.6776952074 / 3600) Oz = Math.toRadians(3.3401508511 / 3600) k = -0.02521574633124 / 1000000;
private double Lo = 120;
private static final CoordsTransformer instance = new CoordsTransformer();

public static CoordsTransformer getInstance() {
return instance;
}

private CoordsTransformer() {}
/*初始化七参数、中央经线*/
public void init(double[] para int lon) {
//TODO:method retention
dx = para[0];
dy = para[1];
dz = para[2];
Ox = Math.toRadians(para[3] / 3600);
Oy = Math.toRadians(para[4] / 3600);
Oz = Math.toRadians(para[5] / 3600);
k = para[6] / 1000000;
Lo = lon;
}

/*cgcs2000转Xian80*/
public double[] fromCgcs2Xian80(double x double y) {
return fromCgcs2Xian80(x y 0);
}

/*cgcs2000转Xian80*/
public double[] fromCgcs2Xian80(double x double y double z) {
//1. 将WGS84大地坐标转为WGS84空间直角坐标
double[] kjzj84 = wgs84dd2kjzj(new double[]{x y z});
//2. 利用七参数运算
double[] kjzj80 = qicanshu(kjzj84);
//3. 将Xian80空间直角坐标转为Xian80大地坐标
double[] dd80 = kjzj2xian80dd(kjzj80);
//4. 将Xian80大地坐标转为Xian80平面坐标
double[] pm80 = xian80dd2pm(dd80);

BigDecimal xBD = new BigDecimal(pm80[0]);
double a = xBD.setScale(3 BigDecimal.ROUND_HALF_UP).doubleValue();
BigDecimal yBD = new BigDecimal(pm80[1]);
double b = yBD.setScale(3 BigDecimal.ROUND_HALF_UP).doubleValue();

return new double[]{a b};
}

/*WGS84大地坐标空间——>空间直角坐标*/
private double[] wgs84dd2kjzj(double[] dd) {
double a = 6378137 b = 6356752.314;
double ee = (a * a - b * b) / (a * a);
double L = Math.toRadians(dd[0]) B = Math.toRadians(dd[1]) H = dd[2];
double N = a / Math.sqrt(1 - ee * Math.sin(B) * Math.sin(B));
double X = (N + H) * Math.cos(B) * Math.cos(L);
double Y = (N + H) * Math.cos(B) * Math.sin(L);
double Z = (N * (1 - ee) + H) * Math

评论

共有 条评论