Calculer la distance entre deux points dans bing maps
J'ai une carte bing, et un sur deux points :
Point1,Point2 et je veux calculer la distance entre ces deux points? est-ce possible?
et si je veux mettre un cercle sur les deux tiers du chemin entre le point 1 et point2 et près de point2 ...comment puis-je faire?
Voir Haversine ou mieux encore le Vincenty formule de la façon de résoudre ce problème.
Le code suivant utilise haversines moyen d'obtenir la distance:
publicdoubleGetDistanceBetweenPoints(double lat1,double long1,double lat2,double long2){double distance =0;double dLat =(lat2 - lat1)/180*Math.PI;double dLong =(long2 - long1)/180*Math.PI;double a =Math.Sin(dLat /2)*Math.Sin(dLat /2)+Math.Cos(lat1 /180*Math.PI)*Math.Cos(lat2 /180*Math.PI)*Math.Sin(dLong/2)*Math.Sin(dLong/2);double c =2*Math.Atan2(Math.Sqrt(a),Math.Sqrt(1- a));//Calculate radius of earth//For this you can assume any of the two points.double radiusE =6378135;//Equatorial radius, in metresdouble radiusP =6356750;//Polar Radius//Numerator part of functiondouble nr =Math.Pow(radiusE * radiusP *Math.Cos(lat1 /180*Math.PI),2);//Denominator part of the functiondouble dr =Math.Pow(radiusE *Math.Cos(lat1 /180*Math.PI),2)+Math.Pow(radiusP *Math.Sin(lat1 /180*Math.PI),2);double radius =Math.Sqrt(nr / dr);//Calculate distance in meters.
distance = radius * c;return distance;//distance in meters}
Vous pouvez trouver un bon site avec des infos ici.
+1. Haversine est le plus commun et est parfaitement adapté pour la détermination approximative de la distance entre deux points. Vincenty donne une meilleure approximation car elle suppose que la forme de la terre est un sphéroïde plutôt qu'une sphère parfaite. Une dernière option consiste à importer le Microsoft.SqlServer.Types.dll de la bibliothèque et de l'utilisation de la STDistance() la méthode de la SqlGeography type de données. Que donnera le résultat le plus précis car il utilise un ellipsoïde de modèle (par exemple WGS84) - la même chose que SQL Server pour la géographie type de données. Merci, ce grand travail pour la distance de la partie, mais comment puis-je afficher un cercle dans les 2/3 de la distance entre le point 1 et point2?? Est le résultat en mètres, KM.... ? Le résultat est en mètres. Voir les commentaires dans le code. Un problème que j'ai trouvé avec cette solution est qu'elle peut retourner NaN en essayant de prendre la racine carrée de -1. Il semble qu'il doit y avoir quelques ajustements pour la mise en œuvre. Si j'arrive à la fin de la fixation, je vais re-poster la réponse.
Pour moi, les autres de la mise en œuvre de retour NaN pour les distances sont trop petites. Je n'ai pas de problèmes avec le construit en fonction pas encore.
Oh, ne l'avait pas remarqué avant. Merci L'API est juste arriver à de grands! Ne savait pas que l'un ou l'autre et j'ai ajouté un Haversine mise en œuvre dans ma propre commune lib emporter dans mes projets. Suppose que je peux supprimer le savez, il est doux! Ne semble pas être pris en charge pour les Applications du Windows Store...
Vous pouvez utiliser une zone de la bibliothèque pour la (re-)de projection et de calcul des opérations si vous avez besoin d'obtenir des résultats plus précis ou si vous voulez faire quelques opérations mathématiques (par exemple, transformer un cercle sur un sperioid/projection). Jetez un oeil à DotSpatial ou SharpMap et les échantillons/unittests/sources... cela peut vous aider à résoudre votre problème.
Une autre option est d'utiliser ArcGIS API for Silverlight qui peut également afficher les Cartes Bing. Il est open source et vous pouvez apprendre les choses dont vous avez besoin (ou tout simplement les utiliser, parce qu'ils existent déjà dans le SDK). Voir les Utilitaires exemples de tabulation dans les échantillons.
Comme je l'ai déjà mentionné: jetez un oeil à cette page pour obtenir plus d'infos au sujet de votre problème. Vous y trouverez une formule, le code Javascript et un Excel de l'échantillon pour le calcul d'un point de destination par une certaine distance et le relèvement à partir du point de départ (voir titres).
Il ne devrait pas être difficile de les "transformer" le code de votre c#-monde.
Voir Haversine ou mieux encore le Vincenty formule de la façon de résoudre ce problème.
Le code suivant utilise haversines moyen d'obtenir la distance:
Vous pouvez trouver un bon site avec des infos ici.
Merci, ce grand travail pour la distance de la partie, mais comment puis-je afficher un cercle dans les 2/3 de la distance entre le point 1 et point2??
Est le résultat en mètres, KM.... ?
Le résultat est en mètres. Voir les commentaires dans le code.
Un problème que j'ai trouvé avec cette solution est qu'elle peut retourner NaN en essayant de prendre la racine carrée de -1. Il semble qu'il doit y avoir quelques ajustements pour la mise en œuvre. Si j'arrive à la fin de la fixation, je vais re-poster la réponse.
OriginalL'auteur Beachwalker
Microsoft a un GeoCoordinate.GetDistanceTo Méthode, qui utilise le Haversine formule.
Pour moi, les autres de la mise en œuvre de retour NaN pour les distances sont trop petites. Je n'ai pas de problèmes avec le construit en fonction pas encore.
L'API est juste arriver à de grands! Ne savait pas que l'un ou l'autre et j'ai ajouté un Haversine mise en œuvre dans ma propre commune lib emporter dans mes projets. Suppose que je peux supprimer le savez, il est doux!
Ne semble pas être pris en charge pour les Applications du Windows Store...
OriginalL'auteur pseudosudo
Vous pouvez utiliser une zone de la bibliothèque pour la (re-)de projection et de calcul des opérations si vous avez besoin d'obtenir des résultats plus précis ou si vous voulez faire quelques opérations mathématiques (par exemple, transformer un cercle sur un sperioid/projection). Jetez un oeil à DotSpatial ou SharpMap et les échantillons/unittests/sources... cela peut vous aider à résoudre votre problème.
De toute façon si vous connaissez la distance géodésique et roulement vous pouvez également calculer où résultant de la position de la cible (centre de votre cercle) est, par exemple, voir le "Problème" de Vincenty de l' algorithmes. Voici également quelques utile des implémentations d'algorithmes pour silverlight/.net
Vous pouvez également envisager de poser vos questions à SIG Stackexchange. Ils discutent SIG liés à des problèmes comme la vôtre. Jetez un oeil à la question de calcul de la latitude et de la longitude x-miles à partir du point (comme vous le savez déjà toute la distance) ou voir la discussion ici sur les calculs de distance. Cette question est liée au problème comment dessiner un point sur une ligne à une distance donnée et est presque le même (cause vous avez besoin d'un centre et rayon).
Une autre option est d'utiliser ArcGIS API for Silverlight qui peut également afficher les Cartes Bing. Il est open source et vous pouvez apprendre les choses dont vous avez besoin (ou tout simplement les utiliser, parce qu'ils existent déjà dans le SDK). Voir les Utilitaires exemples de tabulation dans les échantillons.
OriginalL'auteur Beachwalker
Comme je l'ai déjà mentionné: jetez un oeil à cette page pour obtenir plus d'infos au sujet de votre problème. Vous y trouverez une formule, le code Javascript et un Excel de l'échantillon pour le calcul d'un point de destination par une certaine distance et le relèvement à partir du point de départ (voir titres).
Il ne devrait pas être difficile de les "transformer" le code de votre c#-monde.
OriginalL'auteur Beachwalker