J'ai un code C# qui génère des google maps. Ce code examine tous les points que j'ai besoin de tracer sur la carte, puis calcule les limites d'un rectangle pour inclure ces points. Il transmet ensuite ces limites à l'API Google Maps pour définir correctement le niveau de zoom afin d'afficher tous les points de la carte.Comment trouver le lat/long qui est x km au nord d'un lat/long donné?
Ce code fonctionne très bien mais j'ai une nouvelle exigence.
Un des points peut avoir une précision associée. Si c'est le cas, je dessine un cercle autour du point avec le rayon défini sur la valeur de précision. Encore une fois, cela fonctionne bien, mais la vérification de mes limites ne fait pas ce que je veux. Je veux que le cadre englobe le cercle complet.
Ceci nécessite un algorithme pour prendre un point x et calculer le point y qui serait z mètres au nord de x et aussi z mètres au sud de x.
Quelqu'un at-il cet algorithme, de préférence en C#. J'ai trouvé un algorithme générique here mais je ne l'ai pas implémenté correctement car les réponses que je reçois sont des milliers de km à la dérive.
Ceci est l'exemple générique
Lat/lon given radial and distance
A point {lat,lon} is a distance d out on the tc radial from point 1 if:
lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
IF (cos(lat)=0)
lon=lon1 // endpoint a pole
ELSE
lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
ENDIF
Et voici ma traduction C#.
// Extend a Point North/South by the specified distance
public static Point ExtendPoint(Point _pt, int _distance, int _bearing)
{
Decimal lat = 0.0;
Decimal lng = 0.0;
lat = Math.Asin(Math.Sin(_pt.Lat) * Math.Cos(_distance) + Math.Cos(_pt.Lat) *
Math.Sin(_distance) * Math.Cos(_bearing));
if (Math.Cos(lat) == 0)
{
lng = _pt.Lng; // endpoint a pole
}
else
{
lng = (
(_pt.Lng - Math.Asin(Math.Sin(_bearing) * Math.Sin(_distance)/Math.Cos(lat))
+ Math.PI) % (2 * Math.PI)) - Math.PI;
}
ret = new Point(lat,lng);
return ret;
}
J'appelle cette fonction avec un palier de 0 à calculer la nouvelle position nord et une valeur de 180 pour calculer la nouvelle position du sud. Est-ce que quelqu'un peut voir ce que j'ai fait de mal ou peut-être fournir un algorithme de travail connu?
Bien que semble beaucoup plus facile :-) Merci. Je vais essayer ça maintenant. Quel est le nombre magique 40.075. Est-ce le nombre de secondes (degré) couvertes par un KM? –
C'est la circonférence de la terre, donnez-lui un coup cependant. C'est hors de l'intuition donc il pourrait avoir besoin d'un ajustement aussi. – Sam152
40 075 est la circonférence équatoriale de la Terre. – KevDog