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;
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
Curtir tópico
+ 0
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;
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
Clique aqui para fazer login e interagir na Comunidade :)