Ho utilizzato il sito web Moveable-Type per aiutarmi in alcuni calcoli geocoordinati ed è stato molto utile, tuttavia, ho un bug nel mio calcolo del punto centrale tra due coordinate. Il mio risultato è vicino al previsto, ma non abbastanza vicino:Punto medio geografico tra due coordinate
posA = {47.64570362, -122.14073746}
posB = {47.64316917, -122.14032175}
risultato atteso (preso dalla calcolatrice caratteri mobili) = 47 ° 38'40 "N, 122 ° 08'26" W = {47.644444, -122.140556}
mio risultato : {49.6054801645915, -122.14052959995759}
Ecco il mio codice:
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;
}
ho un paio di metodi privati per fare la conversione tra gradi e radianti e schiena. E.g.
private double DegreeToRadian(double angle)
{
return Math.PI * angle/180.0;
}
Non riesco a capire perché i miei risultati sono spenti di un paio di gradi sul valore Lat. Qualche idea?
Grazie
Off My ** ** gradi interi (si aspetta '34.8954' ma ottiene' 29.8954') o ** ** approssimativa (che ci si aspetta '34.8954' ma ottiene' 29.7836')? – Brad
Non sono abbastanza sicuro se stai considerando la superficie terrestre come una sfera semplice o una sfera ellissoidale. l'ultima volta che ho lavorato con la legge di Lambert [utilizzando un'implementazione Java] e sembrava funzionare in modo accurato. – anirvan
Grazie. È fuori di 2 gradi sul lat, e il lon è praticamente perfetto. Sto usando la formula per il calcolo del punto medio su questo sito web, tradotto in C# http://www.movable-type.co.uk/scripts/latlong.html – Stevieboy84