Étant donné les coordonnées géographiques lat
(positives pour le nord) et long
(positifs pour l'est), les coordonnées en 3D sur le globe sont (une possibilité):
/x \ /cos(lat) * sin(long) \
p = | y | = | cos(lat) * cos(long) |
\ z/ \ sin(lat) /
La direction du nord est alors:
/-sin(lat) * sin(long) \
north = | -sin(lat) * cos(long) |
\ cos(lat) /
Et la direction est est:
/cos(lat) * cos(long) \
east = | -cos(lat) * sin(long) |
\ 0 /
Compte tenu de l'azimut et l'altitude, vous pouvez obtenir la direction 3D comme:
dir = (-cos(azimuth) * north -sin(azimuth) * east) * cos(altitude) + sin(altitude) * p
Par conséquent, pour tout scalaire positif t
, vous pouvez calculer un point entre votre position sur le globe et l'objet:
pos(t) = p + t * dir
Vous pouvez projeter la position arrière sur le globe par la normalisation:
pos_normalized(t) = pos(t)/||pos(t)||
, où ||pos(t)||
est la longueur de pos(t)
.
Et étant donné cela, vous pouvez calculer la latitude et la longitude:
lat2 = asin(pos_normalized(t).z)
long2 = atan2(pos_normalized(t).x, pos_normalized(t).y)
C'est un point qui se trouve dans la direction du soleil. Choisissez un nombre suffisamment petit pour le calculer (il doit être beaucoup plus petit que 1, l'unité est fondamentalement multiple du rayon de la terre). Pour certaines cartes, toutes ces positions peuvent se trouver sur une ligne. Cependant, ceci n'est pas garanti pour les cartes arbitraires. Donc, vous pourriez vouloir échantillonner quelques points et générer une polyligne à la place.
Puisqu'il s'agit d'une carte 2D, l'altitude ne joue aucun rôle. Selon le système de coordonnées que vous utilisez, vous utiliserez sinus et cosinus pour obtenir les composants de la flèche (par exemple '(-sin (azimuth), cos (asimuth))', ceci suppose que y est l'axe nord-sud et x est l'axe ouest-est et les deux axes sont proportionnels les uns aux autres). –
Merci pour votre commentaire ... Qu'est-ce que cela signifie concrètement si vous utilisez Google Maps qui utilise Altitude et Longitude? Supposons que Azimuth a la valeur 0.13224351331114464. Comment pensez-vous que je pourrais obtenir un emplacement sur Google Maps à partir de: Sin (0.13224351331114464) et Cos (0.13224351331114464)? – Toothfairy
De quoi avez-vous besoin? Coordonnées sur l'écran ou les coordonnées de latitude/longitude sur le globe? –