CALCULAR DISTANCIA EM KM ENTRE AEROPORTOS
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;
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
Curtidas 0
Respostas
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;
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