J'ai utilisé le site Moveable-Type pour m'aider dans quelques calculs géocoordonnés et cela a été très utile, cependant, j'ai un bug dans le calcul du point médian entre deux coordonnées. Mon résultat est proche de l'attendu, mais pas assez proche:Milieu géographique entre deux coordonnées
posA = {47.64570362, -122.14073746}
posB = {47.64316917, -122.14032175}
résultat attendu (provenant du calculateur de type mobile) = 47 ° 38'40 "N, 122 ° 08'26" W = {47.644444, -122.140556}
mon résultat : {49.6054801645915, -122.14052959995759}
Voici mon code:
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;
}
J'ai deux ou trois méthodes privées pour effectuer la conversion entre les degrés et radians et le dos. E.g.
private double DegreeToRadian(double angle)
{
return Math.PI * angle/180.0;
}
Je n'arrive pas à comprendre pourquoi mes résultats sont décalés de quelques degrés sur la valeur Lat. Des idées?
Merci
de mon entier degrés ** ** (vous attendez '' 34.8954' mais obtenir 29.8954') ou ** approximative ** (vous attendez '' 34.8954' mais obtenez 29.7836')? – Brad
Je ne suis pas sûr si vous considérez la surface de la terre comme une simple sphère ou une sphère ellipsoïdale. la dernière fois que j'ai travaillé avec la loi de Lambert [en utilisant une implémentation Java] et cela a semblé fonctionner correctement. – anirvan
Merci. Il est sorti par 2 degrés sur le lat, et le lon est à peu près sur place. J'utilise la formule pour le calcul à mi-parcours sur ce site, traduit en C# http://www.movable-type.co.uk/scripts/latlong.html – Stevieboy84