News & Events
Portal TDevRocks (Adriano Santos) > distância > Quick Post: Como saber a distância entre dois pontos no mapa?
Quick Post: Como saber a distância entre dois pontos no mapa?
- 26 de setembro de 2014
- Posted by: Adriano Santos
- Category: distância embarcadero google RAD Studio XE5 XE6 XE7
Nenhum comentário

Difficulty level not set for this Post
Se você está criando aplicativos que se utilizam de mapas, é bem provável que mais cedo ou mais tarde necessite saber a distância entre dois pontos. É desse assunto que iremos tratar aqui em nosso Quick Post.
Para nosso exemplo, desenhe uma tela semelhante a Figura 1. Note que temos os campos:
- Longitude 1:
- Latitude 1:
- Longitude 2:
- Latitude 2:
- Distância
Figura 1. Exemplo de tela
Agora basta inserirmos o código para cálculo da distância. Clique duas vezes no botão e digite o código da Listagem 1.
procedure TForm1.Button1Click(Sender: TObject); var Long1, Lat1, Long2, Lat2 : Double; function GetDistanceBetween(long1, lat1, long2, lat2 : Double) : Double; var F,G,L : Double; SF, SG, SL, CF, CG, CL : Double; W1, W2 : Double; S, C : Double; O,R,D : Double; H1, H2 : Double; ff : Double; temp : Double; begin ff := 1 / 298.257; F := (lat1 + lat2) / 2; G := (lat1 - lat2) / 2; L := (long1 - long2) / 2; SF := Sin(F*Pi/180); SG := Sin(G*Pi/180); SL := Sin(L*Pi/180); CF := Cos(F*Pi/180); CG := Cos(G*Pi/180); CL := Cos(L*Pi/180); W1 := sqr(SG * CL); W2 := sqr(CF * SL); S := W1 + W2; W1 := sqr(CG * CL); W2 := sqr(SF * SL); C := W1 + W2; O := ArcTan(Sqrt(S/C)); R := Sqrt(S*C) / O; D := 2 * O * 6378.14; H1 := (3*R-1) / (2*C); H2 := (3*R+1) / (2*S); W1 := sqr(SF * CG) * H1 * ff + 1; W2 := sqr(CF * SG) * H2 * ff; if Switch1.IsChecked then //KM result := D * (W1 - W2) * 1.609344 else result := D * (W1 - W2); end; begin //Rua Lutécia (Bairro Vila Carrão - SP, Brazil) //-23.55728,-46.541884 //Alameda Olga (Bairro Lapa - SP, Brazil) //-23.52911,-46.663849 Edit5.Text := FloatToStr(GetDistanceBetween(-23.55728, -46.541884, -23.52911, -46.663849)); end;
Listagem 1. Código do botão de cálculo
Para testar você precisará gerar as coordenadas de dois pontos a partir do maps.google.com. Nesse exemplo inseri as coordenadas de um bairro a outro de São Paulo.
Caso queira descobrir também as coordenadas a partir de uma aplicação Delphi, leia o artigo sobre TGeocoder.

Author: Adriano Santos
Adriano Santos é especialista em linguagens de desenvolvimento, Embarcadero MVP, possui +1000 artigos e vídeo-aulas publicadas em revistas e websites especializados, ex-editor chefe das revistas ClubeDelphi e WebMobile. Atualmente Diretor de Operações na startup GET IT! Technology e Consultor Senior na Embarcadero do Brasil.