terça-feira, 8 de novembro de 2011

Calcular distância GPS

Como se calcula a distância entre 2 pontos GPS? Precisei disso, achei que seria mole, mas não é não...
Felizmente temos muitas pessoas ajudando mundo a fora, e esse cara aqui colocou um código legal para isso: http://www.cesar.inf.br/blog/?p=273

Transcrevi para Java:
public static double distance(double p1Lat, double p1Lon, double p2Lat, double p2Lon) {
   double constant = 6371.0;
           
   p1Lat = p1Lat * Math.PI / 180.0;
   p1Lon = p1Lon * Math.PI / 180.0;
   p2Lat = p2Lat * Math.PI / 180.0;
   p2Lon = p2Lon * Math.PI / 180.0;
           
   double lat = p2Lat - p1Lat;
   double lon = p2Lon - p1Lon;
           
   double a = Math.sin(lat / 2) * Math.sin(lat / 2) + Math.cos(p1Lat) * Math.cos(p2Lat) * Math.sin(lon / 2) * Math.sin(lon / 2);
   double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
           
   return Math.round(constant * c * 1000); // resultado em metros.
}
A título de curiosidade, esse "6371" representa a curvatura da Terra... vivendo e aprendendo...

Até!

0 comentários:

Postar um comentário