Después de mirar un poco en Wikipedia y la misma pregunta/respuesta en StackOverflow Me imaginé que iba a intentarlo, y tratar de llenar los vacíos.
En primer lugar, no estoy seguro de dónde has sacado la salida, pero parece que está mal. Tracé los puntos en ArcMap, los almacené en un buffer a las distancias especificadas, ejecuté intersect to en los buffers, y luego capturé el vértice de intersección para obtener las soluciones. Su salida propuesta es el punto en verde. He calculado el valor en el cuadro de llamada, que es de unos 3 metros de lo que ArcMap dio para la solución derivada de la intersección.
![alt text]()
La matemática de la página de la wikipedia no está tan mal, sólo hay que convertir las coordenadas geodésicas a las cartesianas ECEF, que se pueden encontrar aquí . los términos a/x +h se pueden sustituir por el radio de la esfera auténtica, si no se utiliza un elipsoide.
Probablemente lo más fácil sea darle un código bien documentado, así que aquí está en python
import math
import numpy
#assuming elevation = 0
earthR = 6371
LatA = 37.418436
LonA = -121.963477
DistA = 0.265710701754
LatB = 37.417243
LonB = -121.961889
DistB = 0.234592423446
LatC = 37.418692
LonC = -121.960194
DistC = 0.0548954278262
#using authalic sphere
#if using an ellipsoid this step is slightly different
#Convert geodetic Lat/Long to ECEF xyz
# 1. Convert Lat/Long to radians
# 2. Convert Lat/Long(radians) to ECEF
xA = earthR *(math.cos(math.radians(LatA)) * math.cos(math.radians(LonA)))
yA = earthR *(math.cos(math.radians(LatA)) * math.sin(math.radians(LonA)))
zA = earthR *(math.sin(math.radians(LatA)))
xB = earthR *(math.cos(math.radians(LatB)) * math.cos(math.radians(LonB)))
yB = earthR *(math.cos(math.radians(LatB)) * math.sin(math.radians(LonB)))
zB = earthR *(math.sin(math.radians(LatB)))
xC = earthR *(math.cos(math.radians(LatC)) * math.cos(math.radians(LonC)))
yC = earthR *(math.cos(math.radians(LatC)) * math.sin(math.radians(LonC)))
zC = earthR *(math.sin(math.radians(LatC)))
P1 = numpy.array([xA, yA, zA])
P2 = numpy.array([xB, yB, zB])
P3 = numpy.array([xC, yC, zC])
#from wikipedia
#transform to get circle 1 at origin
#transform to get circle 2 on x axis
ex = (P2 - P1)/(numpy.linalg.norm(P2 - P1))
i = numpy.dot(ex, P3 - P1)
ey = (P3 - P1 - i*ex)/(numpy.linalg.norm(P3 - P1 - i*ex))
ez = numpy.cross(ex,ey)
d = numpy.linalg.norm(P2 - P1)
j = numpy.dot(ey, P3 - P1)
#from wikipedia
#plug and chug using above values
x = (pow(DistA,2) - pow(DistB,2) + pow(d,2))/(2*d)
y = ((pow(DistA,2) - pow(DistC,2) + pow(i,2) + pow(j,2))/(2*j)) - ((i/j)*x)
# only one case shown here
z = numpy.sqrt(pow(DistA,2) - pow(x,2) - pow(y,2))
#triPt is an array with ECEF x,y,z of trilateration point
triPt = P1 + x*ex + y*ey + z*ez
#convert back to lat/long from ECEF
#convert to degrees
lat = math.degrees(math.asin(triPt[2] / earthR))
lon = math.degrees(math.atan2(triPt[1],triPt[0]))
print lat, lon
0 votos
Aquí hay una página que te guía a través de las matemáticas para encontrar el centro de tres coordenadas. Tal vez pueda ayudar de alguna manera. < mathforum.org/library/drmath/view/68373.html >
1 votos
¿Es necesario que sea en la esfera/esferoide, o está bien un algoritmo plano?
1 votos
No puedo darte la respuesta, pero creo que puedo indicarte la dirección correcta. Tres coordenadas = tres puntos centrales. Tres distancias = tres círculos. Dos círculos que se cruzan, pueden tener una posibilidad de ninguna/una/dos soluciones. Tres círculos pueden tener ninguna/una/un área como solución. Obtén la fórmula del círculo para los tres círculos, y resuélvela con Sistemas de Ecuaciones/Algebra.
0 votos
En realidad, ni siquiera se necesitan sistemas para resolver esto. Hay una o dos posibilidades, pero como tienes un valor de distancia, puedes separar la respuesta correcta.
0 votos
He votado la otra respuesta, porque, es una intersección de los topes. Es básicamente sistemas, sólo oscurecido desde el usuario.
1 votos
+1 Esta es una buena pregunta. Al principio pensé que se podría encontrar fácilmente una solución con google, pero parece que no. Tal vez el problema se podría plantear de forma más general: dados N puntos con cada punto que tiene no sólo una distancia sino también un margen de error, encontrar la elipse de confianza.
0 votos
Pruebe el Apolonio ¿Problema, tal vez?
0 votos
Uno de los problemas para responder completamente a la pregunta es el uso de las diferentes unidades dadas; habría que convertir el radio en segundos de arco, o proyectar los valores de latitud y longitud. De cualquier manera eso es un problema diferente fuera de las funciones matemáticas para hacer el trabajo que se presentan a continuación.