Foro XOne

Versión completa: Calculo de distancias entre coordenadas GPS
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Tengo una funcion que en teoria calcula la distancia entre dos coordenadas GPS, es la siguiente:
Function Metros (lat1,long1,lat2,long2)
'Funcion que devuelve la distancia en metros entre dos posiciones GPS
dim x1,y1,x2,y2,DAVLAT,DAVLON
E18=6378.3888
E19=297
E14=749.671
E20=1/E19
E21=(2*E20)-(E20*E20)
' Posicion 1
DAVLAT=(Cdbl(lat1)/180)*3.1416
DAVLON=(Cdbl(long1)/180)*3.1416
E22=E18/(sqr(1-(E21*Sin(DAVLAT)*Sin(DAVLAT))))
x1=(E22+E14)*Cos(DAVLAT)*Cos(DAVLON)
y1=(E22+E14)*Cos(DAVLAT)*Sin(DAVLON)
' Posicion 2
DAVLAT=(Cdbl(lat2)/180)*3.1416
DAVLON=(Cdbl(long2)/180)*3.1416
E22=E18/(sqr(1-(E21*Sin(DAVLAT)*Sin(DAVLAT))))
x2=(E22+E14)*Cos(DAVLAT)*Cos(DAVLON)
y2=(E22+E14)*Cos(DAVLAT)*Sin(DAVLON)
Metros=sqr(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2)))
End Function

dando los siguientes valores:
1 punto: latitud 43,25748 longitud: -8,25241
2 punto: latitud 43,26365 longitud: -8,24959

devuelve: 1930,009398
no sé si son metros o kilometros, para kilometros me parece excesivo porque la lectura entre los dos puntos fue en un periodo de 1 minuto y si son metros me parece muy rapido el desplazamiento.
Intenta esta fómula, que me da mejores resultados:


Código XOne:
Distancia 6371 ACOS(COS(Lat1) * COS(Lat2) * COS(Long2 Long1) + SIN(Lat1) * SIN(Lat2)) 

Siendo:

Código XOne:
Lat1=(LATITUD1*3.141592654)/180
Lat2
=(LATITUD2*3.141592654)/180

Long1
=(LONGITUD1*3.141592654)/180
Long2
=(LONGITUD2*3.141592654)/180 


El resultado lo da en kilometros, y SIEMPRE es la distancia en línea recta entre los 2 puntos.

Saludos
Me comenta el compañero Cardama que en VBScript no existe el ACOS, así que vamos a usar el ATN, que sí existe.

El Script quedaría de la siguiente forma, lo dejo en forma de función para usarlo directamente en cualquier funciones.vbs:


Código XOne:
Function DistanciaEnKM(latitud1,longitud1,latitud2,longitud2)

dim PI,lat1,lat2,long1,long2,val

PI
=4*ATN(1)

lat1=(latitud1*PI)/180
lat2
=(latitud2*PI)/180

long1
=(longitud1*PI)/180
long2
=(longitud2*PI)/180 

val 
COS(lat1) * COS(lat2) * COS(long2 long1) + SIN(lat1) * SIN(lat2)

DistanciaEnKM 6371 * (PI - (ATN(val / (Sqr(- (val val))))))

End Function 


Saludos
URLs de referencia