Usando Matlab para convertir coordenadas geodésicas y coordenadas geodésicas rectangulares en geodesia

1. Descripción general

El sistema de coordenadas geodésicas es un sistema de coordenadas en el que la longitud L de la tierra, la latitud B de la tierra y la altura H de la tierra representan la posición geométrica de un punto en el espacio. La longitud de la tierra se mide desde el meridiano de la tierra inicial, medida hacia el este de 0 ° a 360 °; también se puede medir hacia el este y hacia el oeste, cada una de 0 ° a 180 °, llamada longitud este y longitud oeste, respectivamente, y la longitud este es positiva, La longitud oeste es negativa.
El ángulo entre la normal de un punto y el plano ecuatorial se llama latitud geodésica del punto, y se denota por B. La latitud de la tierra se mide desde el plano ecuatorial, y se mide desde los polos sur y norte, cada uno de 0 ° a 90 °. Se llaman latitud sur y latitud norte, respectivamente. La latitud norte es positiva y la latitud sur es negativa.
La distancia desde el punto del suelo a lo largo del elipsoide normal al de referencia se denomina altura del suelo del punto, y se representa con la letra H. La altura de la tierra se calcula a partir de la superficie elipsoidal, positiva hacia afuera y negativa hacia adentro.
El sistema de coordenadas rectangulares del espacio geodésico toma el centro O del elipsoide como el origen de la coordenada, la intersección del plano meridiano inicial y el plano ecuatorial como el eje X, la dirección ortogonal al eje X en el plano ecuatorial es el eje Y, y el eje de rotación del elipsoide es El eje Z constituye el sistema de coordenadas diestro O-XYZ.

Inserte la descripción de la imagen aquí
Figura 1 Sistema de coordenadas geodésicas y sistema de coordenadas rectangulares del espacio geodésico

2. Coordenadas geodésicas de puntos conocidos (B, L, H) Calcule las coordenadas espaciales rectangulares de puntos (X, Y, Z)

Fórmula requerida:
X = (N + H) cos (B) cos (L)
Y = (N + H) cos (B) sin (L)
Z = [N (1-e 2 ) + H] * sin ( B)
donde N es la longitud normal N = a / W
W es una fórmula auxiliar W = sqrt ((1-e 2 ) sen 2 B)

Requisitos de cálculo: en
este ejemplo, los parámetros elipsoidales GRS80 se utilizan para el cálculo, y el resultado final se envía a la pantalla en metros, y se conservan 3 lugares decimales
(primero se escriben las funciones de grado, minuto, segundo y radianes)

El programa fuente de matlab es el siguiente:

Grados, minutos, segundos a radianes funcionan

function rad=d2r(deg,min,sec)
    %    角度转弧度
    rad=(deg+min/60+sec/3600)*pi/180;

Programa principal

clear
clc
b=d2r(33,44,55.666);
l=d2r(77,11,22.333);
h=5555.660;   %经纬度
a=6378137;f=1/298.257222101;e2=2*f-f^2;   %GRS80椭球参数
W=sqrt(1-e2*(sin(b))^2);
N=a/W;
X=(N+h)*cos(b)*cos(l);
Y=(N+h)*cos(b)*sin(l);
Z=(N*(1-e2)+h)*sin(b);
fprintf('\nX=%.3fm\nY=%.3fm\nZ=%.3fm\n',X,Y,Z);

2. Conozca las coordenadas rectangulares del espacio geodésico (X, Y, Z) para calcular las coordenadas geodésicas (B, L, H)

La fórmula requerida:
tan (L) = Y / X, luego L = atan (Y / X)
tan (B) = 1 / sqrt (X 2 + Y 2 ) * (Z + ae 2 tanB / sqrt (1 + tan 2 B-e 2 tan 2 B))
Aquí es necesario usar un algoritmo iterativo para calcular el valor de B, primero tome un valor inicial tan (B0) = Z / sqrt (X 2 + Y 2 ) La
condición de convergencia es el valor absoluto de tanB dos veces La diferencia es menor que 5 × 10-10 (es decir, la diferencia entre los valores absolutos de B calculados dos veces es menor que 0.0001 ″), y la iteración se puede detener

H = Z / sinB-N (1-e 2 )
donde N es la longitud normal N = a / W
W es una fórmula auxiliar W = sqrt ((1-e 2 ) sen 2 B)

Requisitos de cálculo: en
este ejemplo, los parámetros de elipsoide CGCS2000 se utilizan para el cálculo, y el grado se muestra como un decimal, es decir,
B = 30 ° 12′29 ″ se muestra como B = 30.122900000 (los segundos retienen 5 lugares decimales) y la
elevación retiene 3 lugares decimales
(primero se debe escribir) Radian a la función de ángulo)

El programa fuente de matlab es el siguiente:

Radian para angular y determinar el formato de salida

function deg=r2d(rad)
    %   弧度转角度
    rad1=rad*180/pi;
    deg1=fix(rad1);
    min=fix((rad1-deg1)*60);
    sec=((rad1-deg1)*60-min)*60;
    deg=deg1+min/100+sec/10000;

Programa principal

clear
clc
X=-2109101.506+500*29;
Y=4843022.866+500*29;
Z=3562987.896+500*29;     %空间直角坐标
a=6378137;f=1/298.257222101;e2=2*f-f^2;    %CGCS2000椭球参数
l=atan(Y/X);
L=r2d(l);
tanb0=Z/(sqrt(X^2+Y^2));
tanb1=(1/sqrt(X^2+Y^2))*(Z+(a*e2*tanb0)/(sqrt(1+tanb0^2-e2*tanb0^2)));
while abs(tanb1-tanb0)>=1e-7
    tanb0=tanb1;
    tanb1=(1/sqrt(X*X+Y*Y))*(Z+(a*e2*tanb0)/(sqrt(1+tanb0^2-e2*tanb0^2)));
end
b=atan(tanb1);
B=r2d(b);
W=sqrt(1-e2*(sin(b)^2));
N=a/W;
H=(sqrt(X^2+Y^2)/cos(b))-N;
fprintf('\nB=%.9f\nL=%.9f\nH=%.3f\n',B,L,H);

Por favor corrígeme si hay algún error

13 artículos originales publicados · Me gusta 32 · Visitas 10,000+

Supongo que te gusta

Origin blog.csdn.net/weixin_43637490/article/details/89371315
Recomendado
Clasificación