Je suis en train de construire une application basée sur la géolocalisation et j'essaie de trouver un moyen de rendre mon application réalisable quand un utilisateur fait face à la direction de l'emplacement donné./lat co-ord). J'ai calculé les maths, j'ai juste le triangle à construire.Construction d'un triangle basé sur des coordonnées sur une carte
// Mise à jour
Je l'ai trouvé un peu de bon ... ce
est une méthode ci-dessous qui prend une valeur à long/lat et tente de calculer un triangle trouver un point 700 mètres plus loin et un à sa gauche + à droite. Il les utiliserait ensuite pour construire le triangle. Il calcule la longitude exacte, mais la latitude se termine quelque part au large des côtes de l'Afrique de l'Est. (Je suis en Irlande!)
public void drawtri(double currlng,double currlat, double bearing){
bearing = (bearing < 0 ? -bearing : bearing);
System.out.println("RUNNING THE DRAW TRIANGLE METHOD!!!!!");
System.out.println("CURRENT LNG" + currlng);
System.out.println("CURRENT LAT" + currlat);
System.out.println("CURRENT BEARING" + bearing);
//Find point X(x,y)
double distance = 0.7; //700 meters.
double R = 6371.0; //The radius of the earth.
//Finding X's y value.
Math.toRadians(currlng);
Math.toRadians(currlat);
Math.toRadians(bearing);
distance = distance/R;
Global.Alat = Math.asin(Math.sin(currlat)*Math.cos(distance)+
Math.cos(currlat)*Math.sin(distance)*Math.cos(bearing));
System.out.println("CURRENT ALAT!!: " + Global.Alat);
//Finding X's x value.
Global.Alng = currlng + Math.atan2(Math.sin(bearing)*Math.sin(distance)
*Math.cos(currlat), Math.cos(distance)-Math.sin(currlat)*Math.sin(Global.Alat));
Math.toDegrees(Global.Alat);
Math.toDegrees(Global.Alng);
//Co-ord of Point B(x,y)
// Note: Lng = X axis, Lat = Y axis.
Global.Blat = Global.Alat+ 00.007931;
Global.Blng = Global.Alng;
//Co-ord of Point C(x,y)
Global.Clat = Global.Alat - 00.007931;
Global.Clng = Global.Alng;
}
De débogage j'ai déterminé le problème réside dans le calcul de la latitude fait ici ..
Global.Alat = Math.asin(Math.sin(currlat)*Math.cos(distance)+
Math.cos(currlat)*Math.sin(distance)*Math.cos(bearing));
Je ne sais pas pourquoi si et ne sais pas comment le résoudre. Je suis la formule de ce site ..
http://www.movable-type.co.uk/scripts/latlong.html
Il semble correct et je l'ai testé plusieurs choses ...
J'ai essayé de convertir en radians puis après les calculs de retour à des degrés, etc.
Quelqu'un a-t-il trouvé des idées pour corriger cette méthode afin de mapper le triangle SEULEMENT à 700 mètres de mon emplacement actuel dans la direction à laquelle je fais face?
Merci,
Je ne cherche pas vraiment à dessiner une boussole en tant que telle, je veux d'ailleurs faire une vérification pour voir si la direction dans laquelle je suis est dans la même direction que l'emplacement. Getbearing() ne fonctionnera pas comme il a gagné t mise à jour quand je ne bouge pas. Supposons que l'utilisateur est stationnaire. – Skizit
exactement getbearing n'est pas utile dans ce cas, utilisez getOrientation() à la place. la rotation sur l'axe z est l'azimut. Cependant, l'orientation du périphérique de lecture est probablement la partie la plus facile de ce problème. –
Oui, Android sait où je suis, l'autre endroit et il connaît mes relèvements mais je veux qu'il reconnaisse quand mon relèvement est dans la même direction que l'endroit. Comment ferais-je cela? – Skizit