发射坐标系转WGS

您所在的位置:网站首页 117坐标系转化1185坐标系 发射坐标系转WGS

发射坐标系转WGS

2024-07-13 15:30| 来源: 网络整理| 查看: 265

1、发射坐标系O-xyz

       发射坐标系是指:

原点O:在发射点,

OX轴:在发射点水平面内指向发射瞄准方向

OY轴:沿发射点的铅垂线向上

OZ轴:与OX轴、OY轴构成右手直角坐标系的坐标系。

2、地心坐标系(ECEF) Oe-XeYeZe

原点Oe:地心

OeXe:通过本初子午线(0度经度)和赤道(0deglatitude)的交点

OeZe:延伸通过的北极(即,与地球旋转轴重合)

OeYe:组成右手直角坐标系

3、大地坐标系(也叫WGS-84坐标系,LLA坐标系,经纬高坐标系,全球地理坐标系)

WGS-84坐标系的X轴指向BIH(国际时间服务机构)1984.0定义的零子午面(Greenwich)和协议地球极(CTP)赤道的交点。Z轴指向CTP方向。Y轴与X、Z轴构成右手坐标系。把前面提到的ECEF坐标系用在GPS中,就是WGS-84坐标系。

想要将发射坐标系的 xyz值 转成WGS-84坐标系的 经度(longitude),纬度(latitude)和高度(altitude),首先必须先由  发射坐标系O-xyz    转成  地心坐标系(ECEF) Oe-XeYeZe,再转为WGS-84坐标系

第一步:发射坐标系O-xyz    转成  地心坐标系(ECEF) Oe-XeYeZe

假设地球为椭球,发射点在地球表面的位置可以用经度 \mathrm{}\lambda0、纬度B0 确定, Ox轴的方向以射击方位角A0 表示,(所谓射击方位角的含义:ox轴与子午线切线正北方向的夹角,以对着 y 轴看去顺时针为正)。如下图:

方向余弦矩阵关系: 发射坐标系 = GE * 地心坐标系

 

 其中,

在这里,需要做一个转置即可得到 地心坐标系下的值

第二步:地心坐标系(ECEF) Oe-XeYeZe   转成  WGS-84坐标系

(如果不假设为球体,可以用R1长半径和R2短半径分别求经纬度,matlab中有自动转换的函数,参见函数ecef2lla和lla2ecef。)网上也有很多讲这一步的。可以搜着看看,下面简单写一下java代码:

public static String WGS84toECEF(double latitude, double longitude, double height) { double X; double Y; double Z; double a = 6378137.0; double b = 6356752.31424518; double E = (a * a - b * b) / (a * a); double COSLAT = Math.cos(latitude * Math.PI / 180); double SINLAT = Math.sin(latitude * Math.PI / 180); double COSLONG = Math.cos(longitude * Math.PI / 180); double SINLONG = Math.sin(longitude * Math.PI / 180); double N = a / (Math.sqrt(1 - E * SINLAT * SINLAT)); double NH = N + height; X = NH * COSLAT * COSLONG; Y = NH * COSLAT * SINLONG; Z = (b * b * N / (a * a) + height) * SINLAT; return X + "," + Y + "," + Z; } public static String ECEFtoWGS84(double x, double y, double z) { double a, b, c, d; double Longitude;//经度 double Latitude;//纬度 double Altitude;//海拔高度 double p, q; double N; a = 6378137.0; b = 6356752.31424518; c = Math.sqrt(((a * a) - (b * b)) / (a * a)); d = Math.sqrt(((a * a) - (b * b)) / (b * b)); p = Math.sqrt((x * x) + (y * y)); q = Math.atan2((z * a), (p * b)); Longitude = Math.atan2(y, x); Latitude = Math.atan2((z + (d * d) * b * Math.pow(Math.sin(q), 3)), (p - (c * c) * a * Math.pow(Math.cos(q), 3))); N = a / Math.sqrt(1 - ((c * c) * Math.pow(Math.sin(Latitude), 2))); Altitude = (p / Math.cos(Latitude)) - N; Longitude = Longitude * 180.0 / Math.PI; Latitude = Latitude * 180.0 / Math.PI; return Longitude + "," + Latitude + "," + Altitude; }

到此,转换结束。

觉得有用的话还请点个赞,谢谢~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3