27 votos

Lon/lat transformación

En primer lugar debo aclarar que no tienen experiencia previa con el campo, así que no conozco la terminología técnica. Mi pregunta es la siguiente:

Tengo dos tiempo de los conjuntos de datos:

  • La primera de ellas tiene el regular el sistema de coordenadas (no sé si tiene un nombre específico), que van desde -90 a 90 ° y -180 a 180, y los polos están en latitudes -90 y 90.

  • En el segundo, a pesar de que debería corresponder a la misma región, me di cuenta de algo diferente: la latitud y la longitud no eran los mismos, ya que tienen otro punto de referencia (en la descripción que se llama una cuadrícula rotada). Junto con la lat/lon pares, viene la siguiente información: polo sur lat: -35.00, polo sur lon: -15.00, ángulo: 0.0.

Necesito transformar el segundo par de lon/lat a la primera. Podría ser tan simple como añadir 35 para las latitudes y 15 para las longitudes, desde el ángulo es 0 y parece que un simple cambio de marchas, pero no estoy seguro.

Edit: La información que tengo acerca de las coordenadas es la siguiente

http://www.ecmwf.int/publications/manuals/d/gribapi/fm92/grib1/detail/grids/0/ para la primera http://www.ecmwf.int/publications/manuals/d/gribapi/fm92/grib1/detail/grids/10/ para el segundo

Al parecer, el segundo sistema de coordenadas se define por un general de la rotación de la esfera

"Uno para la elección de estos parámetros es:

  • La latitud geográfica en grados del polo sur del sistema de coordenadas, thetap por ejemplo;

  • La longitud geográfica en grados del polo sur del sistema de coordenadas, lambdap por ejemplo;

  • El ángulo de rotación en grados sobre el nuevo eje polar (medido en sentido horario cuando se mira desde el sur hasta el polo norte) del sistema de coordenadas, suponiendo que el nuevo eje que se han obtenido por primera rotación de la esfera a través de lambdap grados alrededor de la geográfica del eje polar y, a continuación, girar a través de (90 + thetap) grados, de manera que el polo sur se trasladó a lo largo de la (previamente girado) del meridiano de Greenwich."

pero todavía no sé cómo convertir esto a la primera.

29voto

Tim Howland Puntos 3650

Invertir manualmente la rotación debe hacer el truco; no debe ser una fórmula para la rotación esférica sistemas de coordenadas en algún lugar, pero ya no lo encuentro, he aquí la derivación ( ' marca el girar el sistema de coordenadas; normal coordenadas geográficas simple (símbolos):

Convertir los datos en el segundo conjunto de datos de esférica (lon, lat') (x',y',z') con:

x' = cos(lon')*cos(lat')
y' = sin(lon')*cos(lat')
z' = sin(lat')

A continuación, utilice dos matrices de rotación para rotar el segundo sistema de coordenadas de modo que coincida con el primer 'normal'. Vamos a estar girando los ejes de coordenadas, por lo que podemos utilizar el eje de rotación de matrices. Necesitamos revertir el signo en el ϑ de la matriz a coincide con el sentido de rotación se utiliza en el modelo ECMWF definición, que parece ser diferente de la dirección positiva.

Ya que nos estamos deshaciendo el giro se describe en la definición del sistema de coordenadas, en primer lugar de girar por ϑ = -(90 + lat0) = -55 grados alrededor de la y' eje (a lo largo de la rotada del meridiano de Greenwich) y, a continuación, por φ = -lon0 = +15 grados alrededor del eje z):

x   ( cos(φ), sin(φ), 0) (  cos(ϑ), 0, sin(ϑ)) (x')
y = (-sin(φ), cos(φ), 0).(  0     , 1, 0     ).(y')
z   ( 0     , 0     , 1) ( -sin(ϑ), 0, cos(ϑ)) (z')

Ampliado, esto se convierte en:

x = cos(ϑ) cos(φ) x' + sin(φ) y' + sin(ϑ) cos(φ) z'
y = -cos(ϑ) sin(φ) x' + cos(φ) y' - sin(ϑ) sin(φ) z'
z = -sin(ϑ) x' + cos(ϑ) z'

A continuación, volver a la "normalidad" (lat,lon) el uso de

lat = arcsin(z)
lon = atan2(y, x)

Si usted no tiene atan2, puedes aplicar a ti mismo mediante el uso de atan(y/x) y el examen de los signos de x y de y

Asegúrese de que usted convertir todos los ángulos a radianes antes de usar las funciones trigonométricas, o te vas a obtener resultados extraños; volver a convertir a grados en el final si que es lo que usted prefiere...

Ejemplo (girado esfera coordenadas ==> estándar de coordenadas geográficas):

  • polo sur de la girado CS (lat0, lon0)

    (-90°, *) ==> (-35°, -15°)

  • meridiano de la girado CS es el -15° meridiano geográfico (girado 55° hacia el norte)

    (0°, 0°) ==> (55°, -15°)

  • la simetría requiere que tanto los ecuadores se cruzan en 90°/-90° en el nuevo CS, o 75°/-105° en coordenadas geográficas

    (0°, 90°) ==> (0°, 75°)
    (0°, -90°) ==> (0°,-105°)

EDIT: se Reescribe la respuesta gracias a un comentario constructivo por whuber: las matrices y la expansión de ahora en modo de sincronización, el uso adecuado de los signos para la rotación de parámetros; se añade la referencia a la definición de las matrices, se quitó la atan(y/x) a partir de la respuesta; se ha añadido ejemplos de conversión.

8voto

draks ... Puntos 11418

En el caso de que a alguien le interesa he compartido una secuencia de comandos de MATLAB en el archivo de intercambio de la transformación de regular lat/lon a girar lat/lon y viceversa: Girar la cuadrícula de transformar

function [grid_out] = rotated_grid_transform(grid_in, option, SP_coor)

lon = grid_in(:,1);
lat = grid_in(:,2);

lon = (lon*pi)/180; % Convert degrees to radians
lat = (lat*pi)/180;

SP_lon = SP_coor(1);
SP_lat = SP_coor(2);

theta = 90+SP_lat; % Rotation around y-axis
phi = SP_lon; % Rotation around z-axis

phi = (phi*pi)/180; % Convert degrees to radians
theta = (theta*pi)/180;

x = cos(lon).*cos(lat); % Convert from spherical to cartesian coordinates
y = sin(lon).*cos(lat);
z = sin(lat);

if option == 1 % Regular -> Rotated

    x_new = cos(theta).*cos(phi).*x + cos(theta).*sin(phi).*y + sin(theta).*z;
    y_new = -sin(phi).*x + cos(phi).*y;
    z_new = -sin(theta).*cos(phi).*x - sin(theta).*sin(phi).*y + cos(theta).*z;

elseif option == 2 % Rotated -> Regular

    phi = -phi;
    theta = -theta;

    x_new = cos(theta).*cos(phi).*x + sin(phi).*y + sin(theta).*cos(phi).*z;
    y_new = -cos(theta).*sin(phi).*x + cos(phi).*y - sin(theta).*sin(phi).*z;
    z_new = -sin(theta).*x + cos(theta).*z;

end

lon_new = atan2(y_new,x_new); % Convert cartesian back to spherical coordinates
lat_new = asin(z_new);

lon_new = (lon_new*180)/pi; % Convert radians back to degrees
lat_new = (lat_new*180)/pi;

grid_out = [lon_new lat_new];

1voto

Luís Oliveira Puntos 2139

El software que estás usando? Todos los software de SIG tendrá la facilidad de mostrar que el actual cordinate sistema/información de proyección. , que puede ayudar a usted en el nombre de su actual sistema de coordenadas.

Además, si usted está utilizando ArcGIS, puede utilizar el Proyecto herramienta para re-proyectar el segundo conjunto de datos, importar la configuración de la primera.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X