He estado usando el sitio web de tipo movible para ayudarme en algunas calcos geocoordinados y ha sido muy útil, sin embargo, tengo un error en mi cálculo del punto medio entre dos coordenadas. Mi resultado es cerca de la esperada, pero no lo suficientemente cerca:Punto medio geográfico entre dos coordenadas
posA = {47.64570362, -122.14073746}
posB = {47.64316917, -122.14032175}
resultado esperado (tomado de la calculadora de tipos móviles) = 47 ° 38'40 "N, 122 ° 08'26" W = {47.644444, -122.140556}
mi resultado : {49.6054801645915, -122.14052959995759}
Aquí está mi código:
private Geocoordinate MidPoint(Geocoordinate posA, Geocoordinate posB)
{
Geocoordinate midPoint = new Geocoordinate();
double dLon = DegreesToRadians(posB.Longitude - posA.Longitude);
double Bx = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Cos(dLon);
double By = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Sin(dLon);
midPoint.Latitude = RadiansToDegrees(Math.Atan2(Math.Sin(DegreesToRadians(posA.Latitude)) + Math.Sin(DegreesToRadians(posB.Latitude)),
Math.Sqrt((Math.Cos(DegreesToRadians(posA.Latitude)) + Bx) * (Math.Cos(DegreesToRadians(posA.Latitude))) + Bx) + By * By));
midPoint.Longitude = posA.Longitude + RadiansToDegrees(Math.Atan2(By, Math.Cos(DegreesToRadians(posA.Latitude)) + Bx));
return midPoint;
}
tengo un par de métodos particulares para hacer la conversión entre grados y radianes y la espalda. P. ej.
private double DegreeToRadian(double angle)
{
return Math.PI * angle/180.0;
}
No puedo entender por qué mis resultados están un par de grados en el valor Lat. ¿Algunas ideas?
Gracias
de mi ** ** grados enteros (que espera '' 34.8954' pero consigue 29.8954') o ** ** aproximada (que espera '' 34.8954' pero consigue 29.7836')? – Brad
no estoy seguro de si está considerando la superficie de la tierra como una simple esfera o una esfera elipsoidal. la última vez que trabajé con la ley de Lambert [usando una implementación Java] y parecía funcionar con precisión. – anirvan
Gracias. Está fuera por 2 grados en el lat, y el lon está prácticamente en el blanco. Estoy usando la fórmula para el cálculo del punto medio en este sitio web, traducido a C# http://www.movable-type.co.uk/scripts/latlong.html – Stevieboy84