Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Formula per calcolo distanza KM

654 views
Skip to first unread message

Claus

unread,
Jun 18, 2001, 1:41:21 PM6/18/01
to
Salve gente, ci risiamo con un problemuccio:

.... Stavolta il nostro eroe dovrebbe realizzare un programma in VB che
calcola la distanza chilometrica fra due punti (conoscendo esattamente
LATITUDINE e LONGITUDINE)

...... sapere se e' possibile realizzare cio' in VB, e soprattutto dove
trovo la formula per trovare la distanza fra i due punti ? ? ? ?


Franco Languasco

unread,
Jun 18, 2001, 2:08:34 PM6/18/01
to Claus
Claus:
ti passo due routines per il calcolo di distanze fra due punti
determinati da coordinate date in Latitudine e Longitudine: sono
tratte dal mio programma Volpian per la pianificazione dei voli VFR.

Per convertire fra i diversi sistemi angolari e per la definizione
delle costanti necessarie, ti rimando al progetto
LL_UTM reperibile a: http://members.xoom.it/flanguasco/

Ciao e se poi avessi problemi ad usarle, contattami pure.

Public Sub Ortho(ByVal Lg1 As Single, ByVal Lt1 As Single _
, ByVal Lg2 As Single, ByVal Lt2 As Single _
, Radiale As Single, Distanza As Single)
'
' Calcola la Radiale e la Distanza del punto di coordinate (Lg2, Lt2)
' rispetto al punto con coordinate (Lg1, Lt1) su di un arco di
' cerchio massimo (linea ortodromica).
' Le coordinate Lg1, Lt1, Lg2, Lt2 devono essere in radianti.
' La Distanza e' in Nautical Miles [nm].
' La Radiale in Gradi Decimali [Grd].
'
Dim D As Single, A As Single
'
D = (Sin((Lt1 - Lt2) / 2!)) ^ 2 _
+ Cos(Lt1) * Cos(Lt2) * (Sin((Lg1 - Lg2) / 2!)) ^ 2
D = 2! * Asin(Sqr(D))
'
If D > 0! Then
A = Acos((Sin(Lt2) - Sin(Lt1) * Cos(D)) / (Sin(D) * Cos(Lt1)))
Else
A = 0!
End If
If Sin(Lg2 - Lg1) < 0! Then A = 2! * CSng(PI) - A
'
Radiale = (RadToGrd(A) - Declinazione + 360!) Mod 360!
'
Distanza = R_TERRA * D
'
'
'
End Sub

Public Sub CONV(ByVal Lg1 As Single, ByVal Lt1 As Single _
, ByVal Lg2 As Single, ByVal Lt2 As Single _
, Velocita As Long, Rotta As Single _
, Distanza As Single, Tempo As Single)
'
' Calcola la Rotta e la Distanza per raggiungere il punto di
' coordinate (Lg2,Lt2) partendo dal punto con coordinate (Lg1,Lt1).
' Calcola anche il Tempo necessario usando la Velocita' data.
' Le coordinate Lg1, Lt1, Lg2, Lt2 devono essere in radianti.
' La Velocita e' in Nodi [kts]. Se = 0 viene usata e ritornata
' la velocita' di crociera.
' La Rotta! in Gradi Decimali [Grd].
' La Distanza! in Nautical Miles [nm].
' Il Tempo! in Minuti [mn].
'
Dim x As Single, y As Single, Angolo As Single
'
x = (Lg2 - Lg1) * Cos((Lt1 + Lt2) / 2!)
y = Lt2 - Lt1
If y = 0! Then y = 0.000001
'
Angolo = Atn(x / y)
If y < 0! Then Angolo = Angolo + CSng(PI)
Rotta = (RadToGrd(Angolo) - Declinazione + 360!) Mod 360!
'
Distanza = R_TERRA * Sqr(x * x + y * y)
'
If Velocita = 0 Then Velocita = VelCrociera
Tempo = 60! * Distanza / CSng(Velocita)
'
'
'
End Sub

Private Function Acos(ByVal X As Double) As Double
'
' Calcola l' ArcoCoseno di x con -1 <= x <= 1.
' Acos e' in radianti.
'
If 0# < X And X <= 1# Then
Acos = Atn(Sqr(1# - X * X) / X)
ElseIf -1# <= X And X < 0# Then
Acos = PI + Atn(Sqr(1# - X * X) / X)
ElseIf X = 0# Then
Acos = PI / 2#
Else
Err.Raise 5, "Acos Function", "Argomento illegale per Acos"
End If
'
'
'
End Function

Public Function Asin(ByVal X As Double) As Double
'
' Calcola l' ArcoSeno di x con -1 <= x <= 1.
' Asin e' in radianti.
'
If Abs(X) < 1# Then
Asin = Atn(X / Sqr(1# - X * X))
ElseIf X = 1# Then
Asin = PI / 2#
ElseIf X = -1# Then
Asin = -PI / 2#
Else
Err.Raise 5, "Asin Function", "Argomento illegale per Asin"
End If
'
'
'
End Function

Stefano Piersigilli già News

unread,
Jun 18, 2001, 6:22:44 PM6/18/01
to
Sarà perchè mi piace X-Files ....ma quando vedo certe soluzioni penso
veramente che gli alieni sono tra noi.
OKKIO!!! Che questo è un complimento, qui non si tratta solo di essere bravi
a programmare, ma anche (secondo il mio modesto avviso) di avere anche
profonde conoscenzze in altre materie. Per esempio io oltre la bussola
faccio fatica a ragionare.....figuriamoci a parlare di latitudine e
longitudine, o meglio chi mi dice, dove trovo, dove cerco per esempio la
latitudine e la longitudine di casa mia e di quella dei miei genitori se mi
venisse mai in mente di calcolare la distanza tra i due punti ?!?!??!?!
Ciao a presto
Stephen


"Franco Languasco" <MC7...@MCLINK.IT> ha scritto nel messaggio
news:3B2E43A2...@MCLINK.IT...

Claus

unread,
Jun 19, 2001, 3:45:05 AM6/19/01
to
Grazie Mille!!!!!!
.....ma purtroppo con queste formule mi sono accorto che il database in mio
possesso non e' completo e tantomento i dati in esso contenuti (lat e long)
non sono molto affidabili.

Sai mica dove posso trovare un database completo di tutti i
paesi/comuni/citta' d' Italia con le relative coordinate Lat e Long ? ? ? ?
?

Ciao e grazie ancora !!!!

"Franco Languasco" <MC7...@MCLINK.IT> ha scritto nel messaggio
news:3B2E43A2...@MCLINK.IT...

Franco Languasco

unread,
Jun 19, 2001, 1:38:28 PM6/19/01
to Claus
Claus:
ieri sera, quando ti ho risposto, avevo fretta e non ho nemmeno firmato...

> Sai mica dove posso trovare un database completo di tutti i
> paesi/comuni/citta' d' Italia con le relative coordinate Lat e Long ? ? ? ?

Esiste un libro con le coordinate geografiche (Lat, Lon) di tutti i comuni
di Italia: io non l' ho mai comperato ma dovresti facilmente trovarlo in rete.
Ma, forse, in Internet trovi anche qualche sito con tutte le coordinate.

Altri metodi:
- con una carta geografica, squadra e righello puoi facilmente trovare le
posizioni. Tieni presente che con una carta a scala 1:500,000 puoi
apprezzare i 10" di grado (circa 300 [m]).
- ti posso mandare un D.B. (in formato .txt) con qualche centinaio di
posizioni. Purtroppo sono in gran parte posizioni di aeroporti, avio-
superfici ed altri punti di riporto VFR.
- con un GPS da poche lire vai sui punti di tuo interesse e li misuri
(incoraggiamento al turismo...).
- se scarichi il mio programma Volpian2 (ed anche le carte... decine di
MBytes!!) puoi usare la funzione Atlante, andare con il cursore del
mouse sul punto di tuo interesse e leggere direttamente Lat & Long.

Ciao e se poi vuoi, posso darti una mano.

Franco


0 new messages