Quiero encontrar una ubicación objetivo desconocida (coordenadas de latitud y longitud). Hay 3 puntos conocidos (pares de coordenadas de latitud y longitud) y para cada punto una distancia en kilómetros a la ubicación del objetivo. ¿Cómo puedo calcular las coordenadas de la ubicación de destino?
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 es la matemática para una función que toma eso como entrada y devuelve 37.417959, -121.961954 como salida.
Entiendo cómo calcular la distancia entre dos puntos, de http://www.movable-type.co.uk/scripts/latlong.html Entiendo el principio general de que con tres círculos como estos obtienes exactamente un punto de superposición. De lo que estoy confuso es de las matemáticas necesarias para calcular ese punto con esta entrada.
Respuestas:
Después de mirar un poco en Wikipedia y la misma pregunta / respuesta en StackOverflow , pensé que podría darle una puñalada e intentar llenar los vacíos.
En primer lugar, no estoy seguro de dónde obtuviste la salida, pero parece estar mal. Tracé los puntos en ArcMap, los amortigué a las distancias especificadas, corrí intersectando en los búferes y luego capturé el vértice de la intersección para obtener las soluciones. Su salida propuesta es el punto en verde. Calculé el valor en el cuadro de llamada, que es aproximadamente 3 metros de lo que ArcMap dio para la solución derivada de la intersección.
La matemática en la página de Wikipedia no es tan mala, solo necesita convertir sus coordenadas geodésicas a la ECEF cartesiana, que se puede encontrar aquí . los términos a / x + h pueden reemplazarse por el radio de la esfera autálica, si no está utilizando un elipsoide.
Probablemente lo más fácil es darle un código bien documentado (?), Así que aquí está en Python
fuente
No estoy seguro de si soy ingenuo, pero, ¿si amortigua cada punto por tamaño y luego se cruza con los tres círculos que le darían la ubicación correcta?
Puede calcular la intersección utilizando API espaciales. Ejemplos:
fuente
Las siguientes notas utilizan geometría planarítmica (es decir, tendría que proyectar sus coordenadas en un sistema de coordenadas local apropiado).
Mi razonamiento, con un ejemplo trabajado en Python, sigue:
Tome 2 de los puntos de datos (llámelos
a
yb
). Llama a nuestro punto objetivox
. Ya sabemos las distanciasax
ybx
. Podemos calcular la distanciaab
usando el teorema de Pitágoras.Ahora, puedes calcular los ángulos de estas líneas:
Desafortunadamente, tengo poco tiempo para completar la respuesta, sin embargo, ahora que conoce los ángulos, puede calcular dos ubicaciones posibles para
x
. Luego, utilizando el tercer punto c, puede calcular qué ubicación es la correcta.fuente
Esto podría funcionar. Rápidamente de nuevo en python, podría poner esto en el cuerpo de una función xN, yN = coordenadas de puntos, r1 y r2 = valores de radio
Los valores de rx & ry son los valores de retorno (deben estar en una matriz) de los dos puntos de intersección en un círculo, si eso ayuda a aclarar las cosas.
Haga esto para los primeros 2 círculos, luego nuevamente para el primero y el último. Si alguno de los resultados de la primera iteración se compara con los resultados de la segunda (dentro de cierta tolerancia, probablemente), entonces tiene el punto de intersección. No es una gran solución, especialmente cuando comienzas a agregar más de puntos en el proceso, pero es lo más simple que puedo ver sin resolver un sistema de ecuaciones.
fuente
Puede usar API espacial de postgis (St_Intersection, St_buffer funciones). Como notó fmark, también debe recordar que Postgis usa algoritmos planos, pero para áreas pequeñas, el uso de la proyección equidistante no introduce muchos errores.
fuente
GEOGRAPHY
tipo en lugar delGEOMETRY
tipo.Hazlo en lenguaje PHP:
fuente