发射坐标系转WGS |
您所在的位置:网站首页 › 117坐标系转化1185坐标系 › 发射坐标系转WGS |
1、发射坐标系O-xyz
发射坐标系是指: 原点O:在发射点, OX轴:在发射点水平面内指向发射瞄准方向 OY轴:沿发射点的铅垂线向上 OZ轴:与OX轴、OY轴构成右手直角坐标系的坐标系。 原点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 假设地球为椭球,发射点在地球表面的位置可以用经度 方向余弦矩阵关系: 发射坐标系 = 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 |