geocoding - sacar - Trilateración usando 3 puntos de latitud y longitud y 3 distancias
geocodificacion pdf (4)
Existe una ubicación de destino desconocida (coordenadas de latitud y longitud). Tengo 3 pares de coordenadas de latitud y longitud y para cada par una distancia en kilómetros hasta la ubicación objetivo. ¿Cómo puedo calcular las coordenadas de la ubicación objetivo?
Por ejemplo, supongamos que tengo los siguientes puntos de datos
37.418436,-121.963477 0.265710701754km
37.417243,-121.961889 0.234592423446km
37.418692,-121.960194 0.0548954278262km
Lo que me gustaría es ¿cuál sería el valor de la función que toma eso como entrada y devuelve 37.417959,-121.961954
como resultado?
Entiendo cómo calcular la distancia entre dos puntos, desde http://www.movable-type.co.uk/scripts/latlong.html . Entiendo el principio general de que con tres círculos obtiene exactamente un punto de superposición. Lo que estoy confundido es la matemática necesaria para calcular ese punto con esta entrada.
Considere los siguientes 9 círculos Puntos A, B, C y distancias d1, d2, d3
- Centro de A, radio d1
- Centro de A, radio d2
- Centro de A, radio d3
- Centro de B, radio d1
- Centro de B, radio d2
- Centro de B, radio d3
- Centro de C, radio d1
- Centro de C, radio d2
- Centro de C, radio d3
Estos son tus posibles círculos. Ahora podemos sacrificar estos, porque sabemos que si d1 se usa en A, no se usará en B.
Esto hace que tus posibles entradas, donde A1 significa círculo con el centro A y el radio D1:
- {A1, B2, C3}
- {A1, B3, C2}
- {A2, B1, C3}
- {A2, B3, C1}
- {A3, B1, C2}
- {A3, B2, C1}
Debería poder convertir lat / long a X, Y, Z conociendo el radio de la tierra, y las distancias desde la distancia curva a lo largo de la corteza terrestre hasta la distancia recta, y desde allí puede ver cuál de ellas se cruza en un punto en común. Recuerde permitir pequeños márgenes de error debido a la imperfección del flotador.
En las páginas de Paul Bourke Geometry
Hice esta pregunta en el GIS Stack Exchange recién formado, y obtuve algunas buenas respuestas allí también.
La respuesta aceptada allí tiene (presumiblemente) una solución de trabajo en Python:
Wikipedia ofrece una discusión bastante detallada sobre el álgebra aquí: en.wikipedia.org/wiki/Trilateration
El primer paso, que en realidad no está cubierto en la entrada de Wikipedia, es convertir tus coordenadas lat / long en coordenadas cartesianas:
x0 = cos( lon0 ) * cos( lat0 ) , y0 = sin( lon0 ) * cos( lat0 ) , z0 = sin( lat0 )
x1 = cos( lon1 ) * cos( lat0 ) , y1 = sin( lon1 ) * cos( lat1 ) , z1 = sin( lat1 )
x2 = cos( lon2 ) * cos( lat0 ) , y2 = sin( lon2 ) * cos( lat2 ) , z2 = sin( lat2 )
(Para mantener los cálculos simples, he manipulado las cosas por lo que estamos trabajando en unidades de "radios terrestres" en lugar de kilómetros)
Para sus datos, obtengo
p0 p1 p2
X -0.420442596 -0.420430618 -0.42040255
Y -0.67380418 -0.673826567 -0.673825967
Z 0.607631426 0.607614889 0.607634975
El siguiente paso, que se trata en el artículo de Wikipedia, es simplificar las coordenadas, traduciendo los puntos para que p0 esté en el origen y luego gire para que p1 esté en el eje X y p2 esté en el plano XY.
Para la traducción, simplemente resta p0 de p1 y p2:
p0a p1a p2a
X 0 1.19779E-05 4.00462E-05
Y 0 -2.23864E-05 -2.17865E-05
Z 0 -1.65372E-05 3.5486E-06
La rotación no es mucho más difícil. p1b obtiene (x, y) = (d, 0), donde d es solo la distancia desde el origen a p1a (teorema de Pitágoras)
Para p2b, necesitamos resolver p2a en dos componentes: uno paralelo a p1a (que va en nuestro eje x), y uno perpendicular a p1a, (que va en nuestro eje y en el sistema de coordenadas "b").
Para hacer esto, necesitamos un vector unitario en la dirección de p1a, que es solo p1a * (1 / d). Tome el producto punto de este vector unitario (llámelo p1a_hat, si lo desea) con p2a, y esa es la coordenada X para p2b. El artículo de Wikipedia llama a este valor "I"
Ahora la coordenada Y es fácil. La longitud desde el origen hasta p2 no puede cambiar bajo la transformación de coordenadas. Así que calcule la longitud de p2a usando el teorema de Pitágoras, luego use el teorema de Pitágoras "hacia atrás" para obtener lo que la coordenada Y de p2b tiene que ser para mantener la longitud igual. Esa es la variable que Wikipedia llama "J". (Tenga en cuenta que hay una ambigüedad que dejaré para que descubra si J es positivo o negativo).
Ahora tiene las tres variables d, I y J, que el artículo de Wikipedia usa para el cálculo. Ahora puedes convertirlos a kilómetros multiplicando por el radio de la tierra. Deberías poder hacer el resto del cálculo desde aquí
(Por cierto, Wikipedia da un cálculo diferente para la transformación de coordenadas. Me gusta evitar los triggers cuando sea posible).