0

J'ai deux points lat et lon donnés. Par exemple, supposons que j'ai deux positions (point_1 et point_2) aux coordonnées (lat1, lon1) et (lat2, lon2). Je voudrais calculer un troisième point, c'est-à-dire à la même latitude que celle du point_2, mais x km à l'est ou à l'ouest du point_2. Ainsi, le troisième point aura la même latitude que point_2, mais une longitude différente en fonction de la distance x (en kilomètres), en d'autres termes point_3 sera (lat2, lon?). J'écris ceci en IDL, mais toute autre langue ou formule serait la bienvenue.Comment trouver le lat/long qui est x km est/ouest d'un lat/long donné?

Merci

+0

Ce problème est résoluble avec quelques trigonométriques et les mathématiques de base. Bien sûr, vous ne pouvez pas comprendre? – svens

+0

Ce n'est pas clair à quel point on a à voir avec ça ...? Selon votre question, vous cherchez seulement une position x ml à l'ouest ou à l'est du point 2. Est-ce exact? – KristoferA

+0

La coordonnée est-elle en degrés: minutes: secondes ou degrés décimaux? –

Répondre

1

Vous n'utilisez point 1, où pensez-vous? Disons que notre point est P = (lat, lon)

La première règle de problèmes comme ceci: dessine une image! À partir d'une coupe transversale de la Terre, vous pouvez voir que le rayon du cercle centré sur l'axe de la Terre, passant par vos deux points, est R*cos(lat). (R est le rayon de la terre J'espère que vous n'avez pas besoin de considérer la terre comme un ellipsoïde ici.) La longueur x prend donc un angle (en degrés) de 360*x/(2*pi*R*cos(lat)). Le nouveau point que vous voulez est alors:

P' = (lat, lon +- 180*x/(2Rcos(lat))) 

Je suppose que vous utilisez -180 à 0 pour la longitude ouest, vous avez donc +/- pour l'est/ouest. Vous devrez vérifier si vous devez envelopper. Pseudo-code:

if (lon < -180) 
    lon += 360 
else if (long > 180) 
    lon -= 360 

Juste pour le plaisir: si vous souciez de la terre étant ellipsoïdale, le rayon du cercle est (au lieu de R * cos (LAT)):

1/sqrt(tan^2 lat/Rp^2 + 1/Re^2) 

où Rp est le rayon polaire et Re est le rayon équatorial. Si Rp = Re, ce qui réduit à la formule originale, puisque 1 + tan^2 lat = sec^2 lat

0
import math 

R = 6378.1 #Radius of the Earth 
brng = 1.57 #Bearing is 90 degrees converted to radians. 
d = 15 #Distance in km 

#lat2 52.20444 - the lat result I'm hoping for 
#lon2 0.36056 - the long result I'm hoping for. 

lat1 = math.radians(52.20472) #Current lat point converted to radians 
lon1 = math.radians(0.14056) #Current long point converted to radians 

lat2 = math.asin(math.sin(lat1)*math.cos(d/R) + 
    math.cos(lat1)*math.sin(d/R)*math.cos(brng)) 

lon2 = lon1 + math.atan2(math.sin(brng)*math.sin(d/R)*math.cos(lat1), 
      math.cos(d/R)-math.sin(lat1)*math.sin(lat2)) 

lat2 = math.degrees(lat2) 
lon2 = math.degrees(lon2) 

print(lat2) 
print(lon2) 
Questions connexes