4 votos

¿Usando matemática hack (EPSG 4326 a 3395 EPSG)?

Actualmente estoy en el proceso de escribir mi propio SIG. Mientras lo hacía pensaba en un hack para la transformación de los puntos de EPSG 4236 (WGS84, coordenadas geográficas) para EPSG 3395 (Mundo de Mercator, coordenadas proyectadas) y quería preguntar si este hack tiene cualquier matemático inconvenientes.

Estoy dibujando las coordenadas usando la tarjeta gráfica (usando OpenGL). OpenGL funciona sobre la base de que las coordenadas en una ventana ir de -1.0 a 1.0 - ver esta imagen con fines ilustrativos. OpenGL tiene una cosa que se llama un vertex shader. Usted puede utilizar para transformar las coordenadas proporcionadas en una gran forma paralela (en lugar de convertir una coordenada en un momento, puede transformar a millones de personas a un tiempo, es muy rápido). Las coordenadas que tengo siempre en el sistema de coordenadas WGS84.

Ahora, lo que yo hice fue lo siguiente: yo sé que la altura, la anchura de la ventana (digamos de 800 x 600 píxeles) y el DPI de la pantalla. También sé que el centro de coordenadas (donde el usuario está viendo actualmente) en WGS84.Así que lo que hago la escala precisa es que por primera vez me transformar el centro de la pantalla en EPSG 3395 con el ordinario de la conversión. Yo calcule el mundo real de la escala de la ventana en el medidor usando el número de DPI, la escala, el resultado por la escala actual (digamos 40.000) y calcular el "bounding box" de la ventana en la EPSG 3395 (añadir / restar el centro de la pantalla). Entonces me transformar dijo cuadro delimitador de vuelta a EPSG 4326 utilizando la inversa de la fórmula. Lo hago cada vez que el usuario hace zoom / gira el mapa / cambia el tamaño de la ventana. Así que tengo que hacer sólo 5 transformaciones de coordenadas, en lugar de posiblemente miles.

Luego subo el cuadro delimitador y las coordenadas EPSG 4326 a la GPU / OpenGL. El sombreado para la transformación de la EPSG 4326 coordenadas en OpenGL coordenadas (a partir de -1.0 a 1.0) se parece a esto:

in float x;
in float y;

uniform float north;
uniform float east;
uniform float south;
uniform float west;

void main() {

    // x, y is "each coordinate"
    // this function will run for each coordinate pair in parallel

    float delta_east_west = (east - west) / 2.0;
    float delta_north_south = (north - south) / 2.0;

    float final_x = -1.0 + ((x - west) / delta_east_west);
    float final_y = -1.0 + ((y - south) / delta_north_south);

    gl_Position = vec4(final_x, final_y, 0.0, 1.0);
}

Así que estoy básicamente de ajuste de las coordenadas como un porcentaje de la anchura de la ventana, lo que me da un valor entre -1.0 y 1.0 - si la coordenada es en la actualidad el área visible. El resultado se parece a esto: UTM?

Para mí, esto parece una proyección de mercator, sin embargo no estoy seguro de si lo que realmente es. La intención de uso no tiene que ser muy exactos o medibles, las discrepancias de hasta un metro están bien, esa es la intención de cartografía (sólo que la escala es importante). ¿La proyección de mercator me requieren para ejecutar cada punto a través de la (bastante complicado) la función de conversión? Para mapas de gran precisión, yo sería, por supuesto, no hacer esto y el uso de una CPU enfoque para mayor precisión, pero me pregunto si tengo una proyección de mercator ahora o algo más. Sin embargo, para la cartografía, era muy importante que yo sin problemas puede hacer zoom in / out muy rápido, a costa de la precisión. Lo que creo es que mi mapa puede ser precisa en los bordes, pero no en el medio.

Yo no la que el elegido UTM zona es siempre la zona que el centro de la pantalla se encuentra en. Por ejemplo, si la mitad de la pantalla se encuentra en UTM zona 30, la transformación inversa (a partir de metros en grados) de la pantalla del cuadro de delimitación se hará uso de esta zona, a pesar de las coordenadas que puede ser en una zona diferente.

3voto

Jeff Mc Puntos 1741

(En primer lugar, para aclarar: usted no necesita preocuparse acerca de la UTM zonas porque el Mundo de Mercator es un sistema de coordenadas global - sólo mucho menos preciso que el de la UTM.)

Básicamente se realiza una aproximación lineal de la proyección de Mercator fórmulas en la ventana de la pantalla. Esto va a estar bien en grandes escalas (áreas pequeñas) donde la distorsión puede suponer constante a lo largo de la ventana. Sin embargo, debe tener en cuenta que debido a la actual muestra la escala difieren por un factor de sec(phi) (secante función de la latitud) - esta es la distorsión.

En pequeña escala (a nivel país) o en las regiones polares, las diferencias en la distorsión ya estará lo suficientemente alta como para hacer que su sistema diferente a la Web Mercator, y la forma de distorsiones (inconformidad) se va a producir. Si este es tu caso, te sugiero mirar más profundamente en las matemáticas y la búsqueda de una mejor aproximación a las ecuaciones de transformación de coordenadas.

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