2014-05-23 4 views
1

Comment calculer l'emplacement du point (x, y), qui est loin du point 1 (qui a LAT1 et coords LON1) pour la distance d comme indiqué sur l'imageCalcul de coordonnées selon la distance d'une autre coordonnée

enter image description here

paramètres connus:
Point1 = [lat1, LON1],
Point2 = [lat2, Lon2],
Distance = d (en mètres)
Angle = α = atan ((lat2 - lat1)/(lon2 - lon1))

A besoin de trouver: Point de destination: valeurs x et y.

En un mot, je besoin de quelque chose comme vice-versa de ce

CLLocation *location1; 
CLLocation *location2; 
double distance = [location1 distanceFromLocation:location2]; 

par exemple calculer l'emplacement 2 par distance et angle donnés.

Ce que j'ai essayé

double lat = location1.coordinate.latitude + distance * sin(alpha); 
double lon = location1.coordinate.longitude + distance * cos(alpha); 

Mais ces valeurs sont fausses, parce que 1 latitude et longitude 1 pas égal à 1 mètres.

+0

Je pense que la réponse est en utilisant le théorème de Pythagore qui pourrait être ok surfaces planes et très courtes distances. Pour une surface courbe et un calcul qui fonctionnera mieux sur de plus grandes distances, essayez cette réponse: http://stackoverflow.com/a/6634982/467105 – Anna

Répondre

2
CLLocation Point1; 
    CLLocation Point2; 
    float targetDistance; 

    float length = sqrt((Point1.x-Point2.x)*(Point1.x-Point2.x) + (Point1.y-Point2.y)*(Point1.y-Point2.y)); 

    CLLocation result; 
    result.x = Point1.x + (Point2.x-Point1.x)*(targetDistance/length); 
    result.y = Point1.y + (Point2.y-Point1.y)*(targetDistance/length); 

Ou en d'autres termes Point1 + normalized(Point2-Point1)*targetDistance

Puisque vous avez un angle vous pouvez aussi le faire:

Point1 + (cos(angle)*targetDistance, sin(angle)*targetDistance) 
+0

Merci beaucoup. Je pense que je comprends la logique. Mais pouvez-vous expliquer, pourquoi result.y = Point2.x + ... et pas Point1.x + ...? – arturdev

+0

l'a réparé, désolé –

Questions connexes