Newsgroup: it.comp.lang.visual-basic
Titolo: Formula per calcolo distanza KM

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 ? ? ? ?

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


 ha scritto nel messaggio
news:3B2E43A2...@MCLINK.IT...


 ha scritto nel messaggio
news:3B2E43A2...@MCLINK.IT...


 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