2013-10-10 3 views
0

J'essaie d'obtenir deux points, A et B, qui sont chacun à une distance de 5km horizontalement et verticalement autour d'un point central C. Ainsi les points A et B créent un "box" d'une longueur de 10km et C est exactement au centre de cette case. Voici mon code:Calcul d'une "boîte" autour des coordonnées de latitude et longitude en Java

 //Distance is 5 kilometers 
     float distance = 5;  

     float latCenter = locationInfo.lastLat; 
     float lngCenter = locationInfo.lastLong; 

     // Calculate corner point distance in lat and long 
     float latDelta = distance/110.54f; 
     float longDelta = distance/(111.320f(float)Math.cos((double)latCenter)); 

     // Calculate coordinates of the corner points 
     float latA = lat - latDelta; 
     float longA = lng - longDelta; 
     float latB = lat + latDelta; 
     float longB = lng + longDelta; 

Je sais que ce sont des approximations, mais se rapprochant avec une marge d'erreur de ~ 1 km est très bien dans mon cas. La distance verticale est bonne (10.06km) mais la distance horizontale est d'environ 6km au lieu de 10km.

Quel est le problème avec ma formule? Je suppose que c'est une erreur mathématique très simple, mais je ne peux pas le trouver. Il me fallait un code très simple et rapide, donc je basé mes calculs sur cette réponse StackOverflow: Simple calculations for working with lat/lon + km distance?

Répondre

2

Je serais prêt à parier sur degres vs radians (du javadoc of cos):

public static double cos(double a)

Renvoie le cosinus trigonométrique d'un angle. Cas particuliers: Si l'argument est NaN ou un infini, alors le résultat est NaN. Un résultat doit être inférieur à 1 ulp du résultat correctement arrondi. Les résultats doivent être semi-monotones. Paramètres: a - un angle, en radians. Renvoie: le cosinus de l'argument.

+0

C'était l'erreur, cela fonctionne parfaitement maintenant! Merci pour l'aide rapide! –

+0

Vous êtes les bienvenus :) –

Questions connexes