CALCULAR DISTANCIA EM KM ENTRE AEROPORTOS

Delphi

14/10/2011

Estou desenvolvendo um sistema que tenho que calcular a distancia entre aeroportos, achei uma função que calcular mas esta função esta dando um diferença muito grande entre os sites que fazem este calculo, gostaria de saber se alguem tem alguma função que o calculo seja mais preciso, vou colocar aqui a função que eu achei mas não é precisa.

function TFormCalculaDistancia.calcDistancia(LatIni, LonIni, LatFim,
LonFim: Extended): Extended;
var
arcoA, arcoB, arcoC : Extended;
auxPI : Extended;
begin
auxPi := Pi / 180;

arcoA := (LonFim - LonIni) * auxPi;
arcoB := (90 - LatFim) * auxPi;
arcoC := (90 - LatIni) * auxPi;

// cos (a) = cos (b) . cos (c) + sen (b) . sen (c) . cos (A)
Result := Cos(arcoB) * Cos(arcoC) + Sin(arcoB) * Sin(arcoC) * Cos(arcoA);
Result := (40030 * ((180 / Pi) * ArcCos(Result))) / 360;
end;

Valdelir Castanheiro

Valdelir Castanheiro

Curtidas 0

Respostas

Thomás Moreira

Thomás Moreira

14/10/2011

Eu uso essas rotinas e tem me atendido bem: (Lembrando que eu uso coordenadas no formato: XXºYYZZZZ)
Caso precise de maiores esclarecimentos, estou a disposição.


function TransformaCoords(Coord : string) : Double;
begin

Result := strtoint(copy(Coord,1,2))+strtoint(copy(Coord,3,2))/60+strtoint(copy(Coord,5,2))/3600;

end;



function CalculaDistanciaColumb(LatColumb,LongColumb,LatProva,LongProva : integer) : Double;
begin

Result := 111.18*360/2/3.141592*(ARCCOS(SIN(TransformaCoords(inttostr(LatProva))*2*3.141592/360)*SIN(TransformaCoords(inttostr(LatColumb))*2*3.141592/360)+COS(+TransformaCoords(inttostr(LongColumb))*2*3.141592/
360-TransformaCoords(inttostr(LongProva))*2*3.141592/360)*COS(TransformaCoords(inttostr(LatProva))*2*3.141592/360)*COS(TransformaCoords(inttostr(LatColumb))*2*3.141592/360)));


end;
GOSTEI 0
POSTAR