Calculer la distance de deux geo points de km c#
Je voudrais calculer la distance de deux geo points. les points sont attribués en longitude et latitude.
les coordonnées sont:
point 1: 36.578581, -118.291994
point 2: 36.23998, -116.83171
ici un site pour comparer les résultats:
http://www.movable-type.co.uk/scripts/latlong.html
voici le code que j'ai utilisé à partir de ce lien:
Calculer la distance entre deux points dans google maps V3
const double PIx = Math.PI;
const double RADIO = 6378.16;
///<summary>
///Convert degrees to Radians
///</summary>
///<param name="x">Degrees</param>
///<returns>The equivalent in radians</returns>
public static double Radians(double x)
{
return x * PIx / 180;
}
///<summary>
///Calculate the distance between two places.
///</summary>
///<param name="lon1"></param>
///<param name="lat1"></param>
///<param name="lon2"></param>
///<param name="lat2"></param>
///<returns></returns>
public static double DistanceBetweenPlaces(double lon1, double lat1, double lon2, double lat2)
{
double R = 6371; //km
double dLat = Radians(lat2 - lat1);
double dLon = Radians(lon2 - lon1);
lat1 = Radians(lat1);
lat2 = Radians(lat2);
double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) + Math.Sin(dLon / 2) * Math.Sin(dLon / 2) * Math.Cos(lat1) * Math.Cos(lat2);
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
double d = R * c;
return d;
}
Console.WriteLine(DistanceAlgorithm.DistanceBetweenPlaces(36.578581, -118.291994, 36.23998, -116.83171));
le problème est que j'obtiens deux résultats différents.
mon résultat: 163,307 km
suite du site: 136 km
des suggestions???
torti
Vous avez fait quelque peu douteux hypothèse que la terre est équatorial et polaire rayons sont les mêmes.
OriginalL'auteur tro | 2011-07-01
Vous devez vous connecter pour publier un commentaire.
Votre formule est presque correct, mais vous échanger les paramètres pour une longitude latitude
Je suis en utilisant la formule simplifiée:
Test:
(Distance à l'Équateur): les Longitudes 0, 100; Latitudes = 0,0; DistanceBetweenPlaces(0, 0, 100, 0) = 11119.5 km
(Distance au Pôle Nord): les Longitudes 0, 100; Latitudes = 90,90; DistanceBetweenPlaces(0, 90, 100, 90) = 0 km
Longitudes: -118.291994, -116.83171; Latitudes: 36.578581, 36.23998 = 135.6 km
Longitudes: 36.578581, 36.23998; Latitudes: -118.291994, -116.83171 = 163.2 km
En ce qui concerne meilleur
P. S. À site web vous utilisez pour le résultat de la comparaison, pour chaque point de la première zone de texte est la latitude, la deuxième - longitude
Je l'ai testé aussi, et il fonctionne très bien.
est-ce pour wgs84?
non, c'est juste une formule mathématique pour vérifier la distance entre deux points sur la surface sphérique. wgs84 nécessite plus de calculs complexes pour ellipsoïde
OriginalL'auteur Vitaliy
Que vous utilisez le framework 4.0, je dirais que la
GeoCoordinate
classe.Vous devez ajouter une référence à System.Device.dll.
OriginalL'auteur Olivier Leneveu
Dans mon article publié il y a plusieurs années (lien: http://www.codeproject.com/Articles/469500/Edumatter-School-Math-Calculators-and-Equation-Sol), j'ai décrit des 3 utile
Functions
pour calculer la distance entre 2 geo-points (en d'autres termes, la grande-cercle (orthodromiques) de la distance sur la Terre entre 2 geo-points), qui diffère en termes de précision/performance:Fonctions retournent des résultats en miles; pour trouver la distance en km multiplier le résultat par 1.60934 (voir
private const double _m2km = 1.60934
).Pertinentes pour l'exemple: trouver la distance point1 (36.578581, -118.291994) et point2 (36.23998, -116.83171) les trois Fonction a donné les résultats suivants (km):
et la calculatrice (lien: http://www.movable-type.co.uk/scripts/latlong.html) a donné le résultat: 136.0
Espérant que cela puisse aider. Meilleures salutations,
OriginalL'auteur Alexander Bell
J'ai utilisé la formule de Wikipedia et le mettre dans une fonction lambda:
OriginalL'auteur Genfood
essayez ceci... je l'ai utilisé, c'est les applications avant de les -- c'est assez précis. Pardonnez-moi pour ne pas donner du crédit en raison de la brillante âme, qui, publié à l'origine de cela, j'ai transposé à partir de java, C#:
Wow!! Déjà complexe, code encore plus mindblowingly jibberish par absolument non-sens, les noms de variables. Je dis UncleBob!!! :o)
Je suis d'accord, num1 à num22 n'est pas bon de nommage de variables 🙂 mais merci pour l'aide!
Je refuse d'utiliser ce code
L'oncle Bob est Robert Martin, l'Auteur de "Clean Code"
OriginalL'auteur Glenn Ferrie
J'ai juste essayé de code à GeoDataSource, et cela a fonctionné parfaitement bien:
http://www.geodatasource.com/developers/c-sharp
OriginalL'auteur Martin Åhlin