参考文献:每日一词20190306——经纬度(longitude and latitude)_gis0911178的博客-CSDN博客_longitude和latitude
一、经纬度的概念(longitude and latitude)
海拔为0米的地球半径为:6371km。
经纬度是经度与纬度的合称,组成一个坐标系统,称为地理坐标系统,它是一种利用三度空间的球面来定义地球上空间的球面坐标系统,能够标示地球上的任何一个位置。
1.1 经度
经度是指通过某地的经线面与本初子午面所成的二面角。在本初子午线以东的经度叫东经,在本初子午线以西的叫西经。东经用“E”表示,西经用“W”表示。
在1884年的国际本初子午线大会上格林尼治的子午线被正式定为经度的起点。东经180°即西经180°,约等同于国际换日线,国际换日线的两边,日期相差一日。
东经正数,西经为负数。
1.2 纬度
纬度是指过椭球面上某点作法线,该点法线与赤道平面的线面角,其数值在0至90度之间。位于赤道以北的点的纬度叫北纬,记为N;位于赤道以南的点的纬度称南纬,记为S。
北纬为正数,南纬为负数。
1.3 基本数量级
经纬度每差1度,距离大约差111km;
经纬度每差1分,距离大约差1.85km;
经纬度每差1秒,距离大约差0.031km;
1.4 卫星三角测距怎么生成经纬度?
参考文献:
[1]张翠芳. GPS卫星定位算法设计与验证[D]. 电子科技大学, 2011.
[2]Bancroft, S. An Algebraic Solution of the GPS Equations[J]. IEEE Transactions on Aerospace & Electronic Systems, 1985, AES-21(1):56-59.
GPS卫星的位置由地面监控站测定后编成电文注入到卫星内,然后由卫星发布广播星历。对于用户而言,卫星的位置根据卫星广播的导航电文解算而得出。
步骤1:通过GPS卫星星历解算卫星在地心地固坐标系(WGS-84坐标系)中的位置;
步骤2:通过GPS卫星星历计算卫星速度;
步骤3:最小二乘法计算接收机在地心地固坐标系(WGS-84坐标系)中位置;
步骤4:计算接收机的速度;
步骤5:转换为经纬度。
二、常见地理坐标系
参考文献:CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解_mrib的博客-CSDN博客_cgcs2000坐标系
2.1 WGS-84坐标系
WGS-84坐标系_EagleLY5894的博客-CSDN博客_wgs84坐标系
WGS-84坐标系(World Geodetic System一1984 Coordinate System)是美国国防部建立的一种地心地固坐标系,全球卫星定位系统GPS是基于WGS-84坐标系的。
WGS-84坐标系原点是地球的质心,空间直角坐标系的Z轴指向BIH(1984.0)定义的地极(CTP)方向,即国际协议原点CIO,它由IAU和IUGG共同推荐。X轴指向BIH定义的零度子午面和CTP赤道的交点,Y轴和Z、X轴构成右手坐标系。
WGS-84建立的地球模型是一个标准椭球。
其中:地球半长轴:a ≡ 6378137.0 m ;地球短半轴:b = 6356752 m 。
三、代码:经纬度和WGS-84坐标系互相转换(c++语言版)
在线经纬度转换工具_经纬度转度分秒格式_度分秒转经纬度格式 - 一起看地图
GPS经纬度转84坐标系_telnetipc的博客-CSDN博客_经纬度转换为wgs84坐标系
/**
* WGS84转地心坐标系
* 经纬度单位:度;高度单位:米
**/
public static double[] WGS84toECEF(double latitude, double longitude, double height) {
double X;
double Y;
double Z;
double a = 6378137.0;%单位m
double b = 6356752.31424518;%单位m
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 new double[] { X, Y, Z };
}
/**
* 地心坐标系转WGS84
*/
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;
}
四、代码:经纬度和WGS-84坐标系互相转换(Matlab语言版)
%% 经纬度转WGS84直角坐标系
% 东经正数,西经为负数
% 北纬为正数,南纬为负数
% 输入参数1:纬度;输入参数2:经度;输入参数3:高度
% 经纬度单位:度;高度单位:米
function [x,y,z]=LL2WGS84(latitude,longitude,height)
a = 6378137.0;%单位m
b = 6356752.31424518;%单位m
E = (a * a - b * b) / (a * a);
COSLAT = cos(latitude * pi / 180);
SINLAT = sin(latitude * pi / 180);
COSLONG = cos(longitude * pi / 180);
SINLONG = sin(longitude * pi / 180);
N = a / (sqrt(1 - E * SINLAT * SINLAT));
NH = N + height;
x = NH * COSLAT * COSLONG;
y = NH * COSLAT * SINLONG;
z = (b * b * N / (a * a) + height) * SINLAT;
end
%% WGS84直角坐标系转经纬度
% 东经正数,西经为负数
% 北纬为正数,南纬为负数
% 输入参数1:纬度;输入参数2:经度;输入参数3:高度
% 经纬度单位:度;高度单位:米
function [latitude,longitude,height]=WGS842LL(x,y,z)
a = 6378137.0;
b = 6356752.31424518;
c = sqrt(((a * a) - (b * b)) / (a * a));
d = sqrt(((a * a) - (b * b)) / (b * b));
p = sqrt((x * x) + (y * y));
q = atan((z * a)/ (p * b));
longitude = atan(y/x);
latitude = atan((z + (d * d) * b * sin(q)^3)/(p - (c * c) * a * cos(q)^3));
N = a / sqrt(1 - ((c * c) * sin(latitude)^2));
height = (p / cos(latitude)) - N;
longitude = longitude * 180.0 / pi;
latitude = latitude * 180.0 / pi;
end