cálculo da distância entre as longitudes latitude.

R

retardat

Guest
Olá a todos,
Eu preciso calcular a distância entre dois conjuntos de latitudes e longitudes.Eu preciso disto para um sistema baseado em GPS que eu estou projetando o que mostra a distância percorrida pelo veículo.

Alguém pode me ajudar nisso?Eu vi na net que Haversine fórmula é boa, mas eu estou tendo problema portá-la para o meu controlador PIC16F877A PIC compilador utilizando-HT.

Todas as sugestões / conselhos são bem-vindos.

Agradecemos antecipadamente.

 
Supondo que você deseja que a distância geodésica, essa rotina funciona bem e com boa velocidade:Código:/ Lat entradas / Long em radianos saída intervalo, em metros

/ * Esta versão da distância entre dois pontos na terra

baseia-se na fórmula apresentada no apêndice A do Sodano, EM,

"A solução não iterativo Geral da geodésica inversa e direta

problemas ", Boletim Geodesique, vol 75 (março 1965), pp 69-84.

* /

/ / Constantes usadas pelo método Sodano

A dupla const = 6.378.137,0; / semi-eixo maior do elipsóide

const RECF duplo = 298,257223563; / recíproco de achatamento (1 / F)

const F duplo = (1,0 / RECF); / achatamento f

const ES dupla = ((2,0 - F) F *); / Excentricidade Primeira quadrado

const B duplo = sqrt (A * A * (1,0 - ES)); / semi-eixo maior

F * const F2 duplo = F;

F2 * const F2_2 duplo = 0,5;

const F_1 F = 1,0 - o dobro;static void

ComputeRangeSodano (pt1Lat casal, pt1Lon casal,

pt2Lat casal, pt2Lon casal,

* intervalo de casal)

(

pt1Lon pt2Lon L duplo = -;const dupla TESTV = 1.0E-11;

if (fabs (pt1Lat - pt2Lat) <TESTV & & fabs (L) <TESTV)

(

* Escala = 0,0;

retorno / / pontos coincidentes

)duplo beta1 = atan (tan * F_1 (pt1Lat));

duplo beta2 = atan (tan * F_1 (pt2Lat));uma dupla = sin (beta1) * sin (beta2);

b duplo = cos (beta1) * cos (beta2);cos_phi dobro = a b * cos (L);duplo temp1, temp2;

sin_phi casal, phi;temp1 = sin (L) * cos (beta2);

temp2 = sin (beta2) * cos (beta1) - sin (beta1) * cos (beta2) * cos (L);

sin_phi = sqrt (temp1 * temp2 temp1 * temp2);

phi = atan2 (sin_phi, cos_phi);c dupla = (b * sin (L)) / sin_phi;m duplo = 1,0 - c * c;csc_phi duplo = 1,0 / sin_phi;

cot_phi duplo = cos_phi / sin_phi;duplo cos_phi2 = cos_phi * cos_phi;

sin_cos_phi duplo = sin_phi * cos_phi;duplo phi2 phi = phi *;Sdb duplo =

(1,0 F F2) * phi

A (* (F F2) * * sin_phi - F2_2 phi2 * csc_phi)

m * 0.5 * (- (F F2) * (phi sin_cos_phi) F2 * * phi2 cot_phi)

- A * a * F2_2 * (* sin_phi cos_phi)

* F2_2 m m * (0,125 * (phi sin_cos_phi) - phi2 cot_phi * - 0,25 * * sin_cos_phi cos_phi2)

A m * * * F2_2 (phi2 * csc_phi sin_phi * cos_phi2);duplo S = sdb * B;* Range = S;

)

 

Welcome to EDABoard.com

Sponsor

Back
Top