He estado buscando en este sitio SE durante varias horas y todavía estoy luchando por encontrar una solución a mi pregunta. Mi objetivo es que, dada una forma en OSM y mi ubicación (coordenadas lat / lon), quiero encontrar la ubicación más cercana (coordenadas lat / lon) en ese camino. El punto puede estar en cualquier lugar del camino, no limitado a los puntos utilizados para definir el camino.
Entonces estoy pensando en el siguiente algoritmo:
- Trayectoria separada en bordes separados, cada borde conecta solo dos puntos.
- Seleccione el borde más cercano.
- Proyectar mi ubicación en ese borde.
Ahora hay muchas preguntas sobre el cálculo de la distancia entre una ubicación y una ruta:
- Punto WGS al segmento de línea WGS (gran círculo)
- Calcular la distancia entre un punto y una línea virtual de dos lat / lngs
- ¿Cómo aproximar la distancia punto a segmento en la esfera?
También una pregunta muy similar de la que no puedo hacer los cálculos correctos o verificados:
También hay información del Dr. Math sobre ese tema. Sin embargo, parece que no puedo encontrar un algoritmo para calcular la ubicación en el paso 3. Como no he tocado el álgebra (vector) en bastante tiempo, no entiendo la lógica de esas respuestas.
¿Alguien puede mostrar un algoritmo para hacer esto? Una solución en cualquier lenguaje de programación razonable está bien para mí.
Respuestas:
El uso de un modelo esférico de la tierra puede dar una precisión adecuada y lleva a cálculos simples y rápidos.
Convierta todas las coordenadas en coordenadas cartesianas centradas en la tierra (3D). Por ejemplo, la fórmula
lo haré (Utiliza una medida de distancia en la cual el radio de la Tierra es una unidad, lo cual es conveniente).
Escribir X0 = (x0, y0, z0) para el punto de inicio y X1 = (x1, y1, z1) para el punto de destino, que definen el gran círculo (siempre que X0 sea distinto de X1 y los dos no sean diametralmente opuestos), sea U el producto cruzado normalizado de X0 y X1. Esto se calcula en dos pasos:
La longitud de V es
La normalización estira V a la longitud de la unidad:
La distancia 3D orientada entre cualquier punto X = (x, y, z) y el plano de este gran círculo es solo el producto de punto de X con Z, dado por
El punto más cercano en términos de la distancia en la superficie de la tierra es el que está más cerca del plano: por lo tanto, tiene el valor absoluto más pequeño de d .
Esta figura muestra un gran círculo (en negro) determinado por los dos puntos blancos y 2000 puntos aleatorios en la esfera coloreados y sombreados de acuerdo con su distancia 3D absoluta al plano de ese gran círculo; es decir, | d |.
Habiendo encontrado un punto más cercano, proyecte hacia el gran círculo proyectándolo primero al plano del gran círculo (en 3D) y luego extendiéndolo radialmente hacia la superficie de la tierra. La proyección simplemente resta d * U:
La proyección radial simplemente renormaliza X 'de la misma manera que V se renormalizó a U:
(Esto será problemático si | X '| = 0, que ocurre cuando el punto más cercano es uno de los polos del gran círculo. Incluya una prueba en el código para esta condición, si pudiera suceder, y trátela por separado, usando el signo de d para identificar qué polo).
Si lo desea, convierta las coordenadas de X '' de nuevo a (lat, lon) usando las fórmulas habituales .
fuente