Fórum CALCULAR DISTANCIA EM KM ENTRE AEROPORTOS #408468

14/10/2011

0

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

Responder

Posts

14/10/2011

Thomás Moreira

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;
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar