2011-07-26 34 views
5

Necesito encontrar el punto medio entre dos puntos de latitud/longitud.C# Encontrar el punto medio de dos latitudes/longitudes

Estoy tratando de centrar un mapa entre dos ubicaciones que tracé y necesito encontrar ese punto.

He escrito esta función a partir de otros ejemplos que he encontrado y parece que no funciona.

public static void midPoint(double lat1, double lon1, double lat2, double lon2, out double lat3_OUT, out double lon3_OUT) 
    { 
     //http:// stackoverflow.com/questions/4656802/midpoint-between-two-latitude-and-longitude 
     double dLon = DistanceAlgorithm.Radians(lon2 - lon1); 

     //convert to radians 
     lat1 = DistanceAlgorithm.Radians(lat1); 
     lat2 = DistanceAlgorithm.Radians(lat2); 
     lon1 = DistanceAlgorithm.Radians(lon1); 

     double Bx = Math.Cos(lat2) * Math.Cos(dLon); 
     double By = Math.Cos(lat2) * Math.Sin(dLon); 
     double lat3 = Math.Atan2(Math.Sin(lat1) + Math.Sin(lat2), Math.Sqrt((Math.Cos(lat1) + Bx) * (Math.Cos(lat1) + Bx) + By * By)); 
     double lon3 = lon1 + Math.Atan2(By, Math.Cos(lat1) + Bx); 

     lat3_OUT = lat3; 
     lon3_OUT = lon3; 
    } 

Aquí hay un ejemplo de salida.

lat1 37.7977008 
lat2 37.798392  
lon1 -122.1637914  
lon2 -122.161464  
lat3 0.65970036060147585 
lon3 -2.1321400763480485 

Ver Lat3 y Lon3.

Gracias!

Respuesta

2

Parece que su salida es correcta, excepto que es en radianes y usted está esperando grados? es posible que necesite convertir de radianes a grados para cumplir con el resultado esperado.

-(2.1321400763480485 radians) = -122.162628 degrees 
0.65970036060147585 radians = 37.7980464 degrees 

Parece que ya está utilizando el algoritmo de círculo máximo que Jon Martin y IanDotKelly mencionados.

+0

Eso tiene sentido. Aunque todavía parece que la solución es un problema de unidades. Los resultados están en radianes y el OP espera grados. – Chris

+0

¡Esto es! ... Me convertí de Radian a Degres y funcionó perfecto! ... ¡Gracias! – dmd733

0

Supongo que quiere decir distancias de gran círculo.

Si es así, esta pregunta here se le ha preguntado antes, aunque si no conocía el término gran círculo podría ser difícil de encontrar.

+0

Parece que el OP ya está utilizando el algoritmo de distancia de círculo máximo. – Chris

Cuestiones relacionadas