2008-08-05 9 views
22

Tengo un conjunto de pares de latitud/longitud que se correlacionan con coordenadas x/y conocidas en un mapa (geográficamente distorsionado).¿Cómo asignar una latitud/longitud a un mapa distorsionado?

Luego tengo un par más de latitud/longitud. Quiero trazarlo en el mapa lo mejor posible. ¿Cómo voy a hacer esto?

Al principio decidí crear un sistema de ecuaciones lineales para los tres puntos lat/long más cercanos y calcular una transformación a partir de estos, pero esto no funciona para nada. Como se trata de un sistema lineal, tampoco puedo usar más puntos cercanos.

No puede suponer que Norte está arriba: todo lo que tiene son las asignaciones lat/long-> x/y existentes.

EDITAR: no es una proyección de Mercator ni nada de eso. Está distorsionado arbitrariamente por la legibilidad (piense en el mapa del metro). Solo quiero usar las asignaciones de 5 a 10 más cercanas para que la distorsión en otras partes del mapa no afecte la asignación que estoy tratando de calcular.

Además, todo el mapa se encuentra en un área geográfica muy pequeña, por lo que no hay necesidad de preocuparse por el mundo: las suposiciones de tierra plana son lo suficientemente buenas.

+0

¿has probado http://trimaps.com? – Gilbou

Respuesta

8

¿Hay detalles más específicos sobre el tipo de distorsión? Si, por ejemplo, sus latitudes y longitudes están "distorsionadas" en su mapa 2D utilizando una proyección de Mercator, la conversión matemática es readily available.

Si el mapa se distorsiona de manera arbitraria, hay muchas cosas que puedes intentar, pero la más simple sería calcular weighted average a partir de tus asignaciones de puntos existentes. Tus pesos podrían ser la inversa cuadrada de la distancia x/y desde tu nuevo punto a cada uno de tus puntos existentes.

Algunos pseudocódigo:

estimate-latitude-longitude (x, y) 

    numerator-latitude := 0 
    numerator-longitude := 0 
    denominator := 0 

    for each point, 
     deltaX := x - point.x 
     deltaY := y - point.y 
     distSq := deltaX * deltaX + deltaY * deltaY 
     weight := 1/distSq 

     numerator-latitude += weight * point.latitude 
     numerator-longitude += weight * point.longitude 
     denominator += weight 

    return (numerator-latitude/denominator, numerator-longitude/denominator) 

Este código dará una aproximación relativamente simple. Si puede ser más preciso acerca de la forma en que la proyección distorsiona las coordenadas geográficas, probablemente pueda hacerlo mucho mejor.

0

el problema es que la esfera se puede distorsionar de varias maneras, y tener todos esos puntos conocidos en el ecuador, digamos, no lo ayudará a mapear puntos más alejados.

Necesita mejores puntos 'cercanos', entonces puede suponer que estos tres puntos están en un plano con el cuarto y hacer la interpolación, sabiendo que la distancia de longitudes es una función, no una constante.

0

Ummm. Tal vez me falta algo sobre la pregunta aquí, pero si tienes información larga/lat, ¿también tienes la dirección del norte?

Parece que necesita asignar coordenadas geodésicas a un sistema de coordenadas proyectadas. Por ejemplo, osgb a wgs84.

Las matemáticas involucradas no son triviales, pero el código sale en unas pocas líneas. Si tuviera más tiempo publicaría más, pero necesito una ducha, así que seré aburrido y pondré un enlace a la entrada wikipedia, que es bastante buena.

Nota: publicación de la ducha editada.

2

Muy bien. Desde un punto de vista teórico, dado que la distorsión es "arbitraria", y cualquier solución requiere que modele esta distorsión arbitraria, obviamente no puede obtener una "respuesta".Sin embargo, cualquier solución implicará la imposición (generalmente implícita) de algún modelo de distorsión que puede o no reflejar la realidad de la situación.

Como parece que le interesan más los modelos que presuponen algún tipo de continuidad local del mapeo de distorsión, la opción más obvia es la que ya ha intentado: interpolación lineal entre los puntos más cercanos. Ir más allá requerirá un conocimiento de análisis matemático y numérico más sofisticado.

No es correcto, sin embargo, al suponer que no puede ampliar esto a más puntos. Puedes usar un enfoque de error de mínimos cuadrados. Encuentra la respuesta lineal que minimiza el error de los otros puntos. Esta es probablemente la extensión más directa. En otras palabras, tome los 5 puntos más cercanos e intente obtener una aproximación lineal que minimice el error de esos puntos. Y usa eso. Intentaré esto el próximo.

Si eso no funciona, la asunción de linealidad sobre el área de N puntos se rompe. En ese momento, deberá actualizar a un modelo cuadrático o cúbico. La matemática se pondrá agitada en ese punto.

Cuestiones relacionadas