2010-09-28 47 views
4

Je travaille dans une autre application iPhone qui utilise AR, et je crée mon propre framework, mais j'ai du mal à obtenir l'angle d'une seconde coordonnée par rapport à la position actuelle du périphérique , quelqu'un connaît une bonne ressource qui pourrait m'aider avec ceci?Angle entre 2 coordonnées GPS

Merci d'avance!

Répondre

13

Si les deux points sont suffisamment proches, et bien loin des pôles, vous pouvez utiliser une TRIG simple:

float dy = lat2 - lat1; 
float dx = cosf(M_PI/180*lat1)*(long2 - long1); 
float angle = atan2f(dy, dx); 

EDIT: J'ai oublié de mentionner que latN et longN - et donc dx et dy - peut être en degrés ou en radians, tant que vous ne mélangez pas d'unités. angle, cependant, reviendra toujours en radians. Bien sûr, vous pouvez le retrouver en degrés si vous multipliez par 180/M_PI.

+0

Quelque chose semble un peu hors. dy est en degrés. On dirait que vous essayez de convertir dx en radians. Mais pourquoi lat1 est-il converti en radians puis multiplié par la longitude delta? Mais sinon, atan2() devrait travailler pour des points proches comme vous le dites. –

+0

@Alex: dx et dy sont tous les deux en degrés. Mais dx doit être mis à l'échelle par le cosinus de la latitude, et le cosf nécessite des radians. –

+0

@MarceloCantos espère que vous êtes toujours là. Je réalise que c'est vieux. Quoi qu'il en soit, veuillez définir «assez près ensemble». – Aeluned

1

Voici la version Android de ce code

import com.google.android.maps.GeoPoint; 
    public double calculateAngle(GeoPoint startPoint, GeoPoint endPoint) { 
     double lat1 = startPoint.getLatitudeE6()/1E6; 
     double lat2 = endPoint.getLatitudeE6()/1E6; 
     double long2 = startPoint.getLongitudeE6()/1E6; 
     double long1 = endPoint.getLongitudeE6()/1E6; 
     double dy = lat2 - lat1; 
     double dx = Math.cos(Math.PI/180 * lat1) * (long2 - long1); 
     double angle = Math.atan2(dy, dx); 
     return angle; 
    }