2010-11-18 2 views
1

J'essaie d'utiliser la formule de (www.movable-type.co.uk/scripts/latlong.html) pour retourner un point de destination donnant un départ le point, la distance et le relèvement. Ce sont mes valeurs:Je continue à venir avec le mauvais calcul en utilisant la formule vincenty

int radius_km = 6371; 
double d = 74.02; 
double st_lat = 39.4450; 
st_lat = Math.toRadians(st_lat); 
double bearing = 106.1607; 
bearing = Math.toRadians(bearing); 

double end_lat = Math.asin(Math.sin(st_lat)*Math.cos(d/radius_km) + 
      Math.cos(st_lat)*Math.sin(d/radius_km)*Math.cos 
      (bearing)); 

end_lat = Math.toDegrees(end_lat); 

Quand je rentre le d, st_lat et portant sur le site, je reçois ceci: 39 ° 33'28 "N. Lorsque j'utilise le code ci-dessus (que j'ai copié du site Web), je reçois ceci: 39.25679699255662.

Je regardais autour de plus et que quelqu'un dit que la division ne peut pas renvoyer la quantité décimale, donc j'ai remplacé la division avec:

BigDecimal distance = new BigDecimal("74.02"); 
BigDecimal strradius = new BigDecimal("6371"); 
BigDecimal d2 = distance.divide(strradius, 6, RoundingMode.HALF_EVEN); 
double d = d2.doubleValue(); 

et a changé la formule pour:

end_lat=Math.asin(Math.sin(st_lat)* 
Math.cos(d)+Math.cos(st_lat)*Math.sin(d)*Math.cos(bearing)); 

La réponse que je obtenir maintenant est 39.25680143864117. Je suis sûr qu'il me manque quelque chose, mais je ne suis pas capable de passer par chaque étape du calcul pour voir où je m'en vais. Est-ce que quelqu'un a des instructions étape par étape sur la façon de faire cela? Je l'apprécierais grandement. Merci.

+0

Pourquoi le rayon est-il un nombre entier? –

+1

Les petites distances ne seront pas très précises si vous utilisez les fonctions trigonométriques. –

+0

Que suggérez-vous? – Dave

Répondre

0

Êtes-vous sûr de faire la conversion correcte des minutes/secondes aux décimales?

Il y a 60 minutes dans un degré, 60 secondes dans une minute. Si la latitude de départ est 39.4450; en supposant que positif signifie au nord de l'équateur. Si le relèvement de 106.1607 est supposé être mesuré à partir du nord dans le sens des aiguilles d'une montre; signifierait que vous voyagez au sud-est.

Vous avez dit que le site Web vous dit que la réponse est 39 ° 33'28 "N, mais si je convertis cela en décimal, c'est égal à 39+ (33 + 28/60)/60 = 39.5578. Ce résultat est supérieur à votre point de départ, c'est-à-dire que vous voyagez vers le sud-est, mais que vous vous rendez au nord de votre point.

Je n'ai pas encore regardé les maths dans votre code, mais je dirais que votre problème réside dans la conversion des minutes/secondes en décimales et inversement.

+0

Étant donné que l'affiche originale n'a pas fait de conversion en minutes/secondes, suggérez-vous que le problème est que le site Web qu'il utilise comme référence est faux? Je ne peux pas charger ce site moi-même donc je ne peux pas vraiment vérifier ce que ça fait ... – Chris

+0

Je suppose que le site web prend des données en minutes/secondes et il l'entre en décimal ... 39 ° 44'50 " N, au lieu de 39 ° 26'42 "N – aepryus

+0

Ah, je vois ce que vous voulez dire. Certainement possible.Je me suis demandé si c'était quelque chose comme le site tronquant des entrées aux entiers ou quelque chose comme ça sur le bearign et la distance. – Chris

Questions connexes