坐标转换–基准面转换(布尔莎七参数)
在坐标转换中,除了正投影和反投影的转换,还有不同基准面之间的转换。基准面的转换有很多种转换模型,常见的有三参数和七参数转换。三参数的转换主要是通过对x,y,z三个坐标轴进行平移操作,使用于小范围的地方坐标基准之间的转换,对精度要求不高。相对于三参数转换,七参数转换在其基础上增加的对x,y,z三个坐标轴的旋转分量以及缩放比例。这里,我们主要对布尔莎七参数模型进行介绍。
我们对一个经纬度坐标进行七参数转换时,一般先将其转为地心坐标系,就是以地心为原点的三维坐标系,再利用空间直角坐标系的转换公式,使用七参数对其进行转换,将转换的结果再转回经纬度坐标,即可完成椭球基准的转换。
1. 经纬度坐标转地心空间直角坐标
转换公式:
其中:
代码如下:
/**
* 将地理坐标系转为空间直角坐标系
*
* @param coord
* @param srcCS
* @param pointCS
* @return
*/
public Coordinate transFromGeoToXYZ(Coordinate coord, GeoCoordinateSystem CS) {
Coordinate newCoord = new Coordinate();
// 将地理坐标系转为空间直角坐标系
double srcB = Math.toRadians(coord.X);
double srcL = Math.toRadians(coord.Y);
double srcH = coord.Z;
// 椭球长半轴
double a = CS.referenceSpheroid.semimajorAxis;
// 椭球第一偏心率
double e = CS.referenceSpheroid.getFirstEccentricity();
double W = Math.sqrt(1 - e * e * Math.sin(srcB) * Math.sin(srcB));
// 卯酉圈曲率半径
double N = a / W;
// 使用地理坐标转空间直角坐标公式
newCoord.X = (N + srcH) * Math.cos(srcB) * Math.cos(srcL);
newCoord.Y = (N + srcH) * Math.cos(srcB) * Math.sin(srcL);
newCoord.Z = (N * (1 - e * e) + srcH) * Math.sin(srcB);
return newCoord;
}
2. 基准转换
七参数基准转换的原理同三维坐标系之间的坐标转换原理类似,这里给出公式如下:
其中,ΔX,ΔY,ΔZ为平移分量,m为缩放系数,ω为旋转矩阵
代码如下:
/**
* 七参数基准转换
*
* @param coord
*