Pregunta

Tengo un montón de pares de latitud/longitud que se asignan a coordenadas x/y conocidas en un mapa (geográficamente 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 de latitud y longitud más cercanos y calcular una transformación a partir de ellos, pero esto no funciona nada bien.Como es un sistema lineal, tampoco puedo usar más puntos cercanos.

No puedes asumir que Norte está arriba:todo lo que tienes son las asignaciones existentes de latitud/longitud->x/y.

EDITAR:No es una proyección de Mercator ni nada por el estilo.Está arbitrariamente distorsionado para facilitar la lectura (piense en el mapa del metro).Quiero usar solo las 5 a 10 asignaciones 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 globo: las suposiciones de que la Tierra es plana son bastante buenas.

¿Fue útil?

Solución

¿Hay algún detalle más específico sobre el tipo de distorsión?Si, por ejemplo, sus latitudes y longitudes están "distorsionadas" en su mapa 2D usando una proyección de Mercator, la matemática de conversión es fácilmente disponibles.

Si el mapa se distorsiona de forma verdaderamente arbitraria, hay muchas cosas que podrías intentar, pero la más sencilla probablemente sería calcular un peso promedio desde sus asignaciones de puntos existentes.Sus pesos podrían ser el inverso al cuadrado de la distancia x/y desde su nuevo punto hasta cada uno de sus puntos existentes.

Algún 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.

Otros consejos

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

Dado que parece estar más interesado en modelos que suponen algún tipo de continuidad local del mapeo de distorsión, la opción más obvia es la que ya ha probado:interpolación lineal entre los puntos más cercanos.Ir más allá requerirá conocimientos de análisis matemático y numérico más sofisticados.

Sin embargo, se equivoca al suponer que no puede ampliar esto a más puntos.Puede hacerlo utilizando un enfoque de error de mínimos cuadrados.Encuentre la respuesta lineal que minimice el error de los otros puntos.Esta es probablemente la extensión más sencilla.En otras palabras, toma los 5 puntos más cercanos e intenta obtener una aproximación lineal que minimice el error de esos puntos.Y usa eso.Intentaría esto a continuación.

Si eso no funciona, entonces se rompe el supuesto de linealidad sobre el área de N puntos.En ese punto, deberás actualizar a un modelo cuadrático o cúbico.Las matemáticas se volverán agitadas en ese momento.

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

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

Mmmm.Tal vez me estoy perdiendo algo sobre la pregunta aquí, pero si tiene información larga/latitud, ¿también tiene 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 solo tiene unas pocas líneas.Si tuviera más tiempo publicaría más, pero necesito una ducha, así que seré aburrido y vincularé al Wikipedia entrada que es bastante buena.

Nota:Después de la ducha editado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top