¿Cómo asignar una latitud / longitud a un mapa distorsionado?

votos
22

Tengo un grupo de pares de latitud / longitud que se correlacionan con coordenadas x / y conocidas en un mapa (geográficamente distorsionado).

Entonces 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.

Publicado el 05/08/2008 a las 05:55
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
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, las matemáticas de conversión están disponibles .

Si el mapa se distorsiona de manera verdaderamente arbitraria, hay muchas cosas que podrías intentar, pero lo más simple sería calcular un promedio ponderado 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.

Respondida el 05/08/2008 a las 06:48
fuente por usuario

votos
2

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.

Sin embargo, es incorrecto al suponer que no puede expandir 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, entonces la asunción de la 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.

Respondida el 05/08/2008 a las 16:47
fuente por usuario

votos
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 necesitas 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 a solo unas pocas líneas. Si tuviera más tiempo publicaría más, pero necesito una ducha, así que seré aburrido y vincularé la entrada de la wikipedia, que es bastante buena.

Nota: Publicar ducha editada.

Respondida el 05/08/2008 a las 06:21
fuente por usuario

votos
0

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

Necesitas mejores puntos de 'cierre', entonces puedes asumir 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.

Respondida el 05/08/2008 a las 06:20
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more