Calcolare il rilevamento (bearing) in gradi: differenze tra le versioni

Da Gambas-it.org - Wikipedia.
Vai alla navigazione Vai alla ricerca
(Creata pagina con "Il ''bearing'' è l'angolo orizzontale (angolo azimutale) tra la direzione di un oggetto e un altro oggetto (''bearing'' relativo), o tra esso e quello del nord vero (''bearin...")
 
Nessun oggetto della modifica
 
(26 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
Il ''bearing'' è l'angolo orizzontale (angolo azimutale) tra la direzione di un oggetto e un altro oggetto (''bearing'' relativo), o tra esso e quello del nord vero (''bearing'' assoluto).
Il ''bearing'' è l'angolo orizzontale (angolo azimutale) tra la direzione di un oggetto e un altro oggetto (''bearing'' relativo), o tra esso e quello del nord vero (''bearing'' assoluto).
<BR>Più in particolare il rilevamento ''relativo'' si riferisce all'angolo tra la direzione in avanti di un oggetto e la posizione di un altro oggetto considerato. Mentre il rilevamento ''assoluto'' si riferisce all'angolo rispetto al punto dell'osservatore tra il nord magnetico (rilevamento magnetico) o il nord reale (rilevamento reale) e un oggetto.


Più in particolare il rilevamento ''relativo'' si riferisce all'angolo tra la direzione in avanti di un oggetto e la posizione di un altro oggetto considerato. Mentre il rilevamento ''assoluto'' si riferisce all'angolo rispetto al punto dell'osservatore tra il nord magnetico (rilevamento magnetico) o il nord reale (rilevamento reale) e un oggetto.
    '''<FONT size=5>Ⓝ</font>'''
 
      |   '''oggetto'''
   '''N'''  '''ogg'''
      |  /
  |  /
      |  /
  |  /
      |^/
  |^/
      |/
  |/
      <FONT Size=4>🔭</font>
  '''oss.'''
  '''osservatore'''
 
Nell'esempio, che segue <SUP>&#091;[[#Note|nota 1]]&#093;</sup>, si otterrà il ''bearing'' assoluto fra un punto iniziale (l'<I>Osservatore</i>) e un secondo punto (l'<I>Oggetto</i>), cliccando con il tasto destro del mouse sulla ''MapView'' ovviamente su due punti differenti.
Nell'esempio, che segue, si otterrà il ''bearing'' assoluto fra un punto iniziale e un secondo punto (finale), cliccando con il mouse sulla ''MapView'' su due punti differenti.
<BR>Per ottenere l'angolo di inclinazione tra due punti su una MapView rispetto alla direzione nord dell'asse della latitudine del punto iniziale, bisognerà utilizzare il Metodo .Bearing( ) della Classe "MapPoint" del Componente "gb.map".
Private mmpp As New MapPoint[]
Public Sub Form_Open()
 
  Dim mp As New MapPoint
 
  With Me
    .W = Screen.AvailableWidth
    .H = Screen.AvailableHeight
    .Arrangement = Arrange.Fill
  End With
 
  With MapView1.Map
    .AddTile("GoogleMap", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "999"]).SubDomains = ["0", "1", "2"] 
    .Zoom = 13
<FONT Color=gray>' ''Imposta il centro della mappa:''</font>
    .Center = MapPoint(41.8902142, 12.4900422)
  End With
 
End
Public Sub MapView1_MouseDown()
 
  Dim pt As New Point(Mouse.X, Mouse.Y)
 
<FONT Color=gray>' ''Mostra semplicemente le coordinate geografiche decimali del punto ove si è cliccato:''</font>
  Me.Text = "Lat. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") &
            " - Lon. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000")
 
End
   
   
Public Sub MapView1_MouseUp()
 
  Dim pt As New Point(Mouse.X, Mouse.Y)
 
  If Mouse.Right Then
    mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))
    If mmpp.Count == 2 Then
<FONT Color=gray>' ''Ottiene e mostra nell'intestazione del "Form" il "Bearing" fra i due punti clliccati:''</font>
      Me.Text = "Rilevamento: " & Format(MapPoint.<FONT Color=#B22222>Bearing</font>(mmpp[0], mmpp[1]), "0.00") & " gradi"
      mmpp = Null
      mmpp = New MapPoint[]
    Endif
  Endif
 
End


Public Sub Form_Open()
oppure così:
 
Public Sub Form_Open()
 
   Dim mp As New MapPoint
   Dim mp As New MapPoint
      
      
Riga 22: Riga 72:
     .W = Me.W
     .W = Me.W
     .H = Me.H
     .H = Me.H
     .Map.AddTile("GoogleMap", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "860"]).SubDomains = ["0", "1", "2"]
     .Map.AddTile("GoogleMap", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "999"]).SubDomains = ["0", "1", "2"]
     .Map.Zoom = 13
     .Map.Zoom = 13
     .Map["GoogleMap"].Visible = True
     .Map["GoogleMap"].Visible = True
   End With
   End With
    
    
  <FONT Color=gray>' ''Imposta il centro dellla mappa:''</font>
  <FONT Color=gray>' ''Imposta il centro della mappa:''</font>
   mp.Lat = 41.8903
   mp.Lat = 41.8902142
   mp.Lon = 14.492255
   mp.Lon = 12.4900422
   MapView1.Map.Center = mp
   MapView1.Map.Center = mp
    
    
  '''End'''
  End
   
   
   
   
  '''Public''' Sub MapView1_MouseUp()
  Public Sub MapView1_MouseUp()
    
    
   Dim pt As New Point(Mouse.X, Mouse.Y)
   Dim pt As New Point(Mouse.X, Mouse.Y)
   Dim f As Float
   Dim f As Float
    
    
   Print " Latitudine "; CStr(MapView1.Map.PixelToMapPointRel(pt).Lat); ", "; CStr(MapView1.Map.PixelToMapPointRel(pt).Lon)
   Print " Latitudine "; MapView1.Map.PixelToMapPointRel(pt).Lat; ", "; MapView1.Map.PixelToMapPointRel(pt).Lon
    
    
   br.Push(Rad(MapView1.Map.PixelToMapPointRel(pt).Lat))
   br.Push(Rad(MapView1.Map.PixelToMapPointRel(pt).Lat))
Riga 49: Riga 99:
  ' ''Dove: φ1,λ1 è il punto iniziale; φ2,λ2 è il punto finale (Δλ è la differenza in longitudine)''</font>
  ' ''Dove: φ1,λ1 è il punto iniziale; φ2,λ2 è il punto finale (Δλ è la differenza in longitudine)''</font>
     f = ATan2(Sin(br[3] - br[1]) * Cos(br[2]), Cos(br[0]) * Sin(br[2]) - Sin(br[0]) * Cos(br[2]) * Cos(br[3] - br[1]))
     f = ATan2(Sin(br[3] - br[1]) * Cos(br[2]), Cos(br[0]) * Sin(br[2]) - Sin(br[0]) * Cos(br[2]) * Cos(br[3] - br[1]))
     Print "Bearing:    "; (CInt(Deg(f)) + 360) Mod 360; "°\n\n"
     Print "Bearing:    "; (CInt(<FONT Color=#B22222>Deg</font>(f)) + 360) Mod 360; "°\n\n"
     br.Clear
     br.Clear
     br = New Float[]
     br = New Float[]
   Endif
   Endif
    
    
  '''End'''
  End
 
 
 
=Note=
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "999"].

Versione attuale delle 00:49, 27 lug 2025

Il bearing è l'angolo orizzontale (angolo azimutale) tra la direzione di un oggetto e un altro oggetto (bearing relativo), o tra esso e quello del nord vero (bearing assoluto).
Più in particolare il rilevamento relativo si riferisce all'angolo tra la direzione in avanti di un oggetto e la posizione di un altro oggetto considerato. Mentre il rilevamento assoluto si riferisce all'angolo rispetto al punto dell'osservatore tra il nord magnetico (rilevamento magnetico) o il nord reale (rilevamento reale) e un oggetto.

    Ⓝ
     |   oggetto
     |   /
     |  /
     |^/
     |/
     🔭
osservatore

Nell'esempio, che segue [nota 1], si otterrà il bearing assoluto fra un punto iniziale (l'Osservatore) e un secondo punto (l'Oggetto), cliccando con il tasto destro del mouse sulla MapView ovviamente su due punti differenti.
Per ottenere l'angolo di inclinazione tra due punti su una MapView rispetto alla direzione nord dell'asse della latitudine del punto iniziale, bisognerà utilizzare il Metodo .Bearing( ) della Classe "MapPoint" del Componente "gb.map".

Private mmpp As New MapPoint[]


Public Sub Form_Open()
 
 Dim mp As New MapPoint
 
 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
   .Arrangement = Arrange.Fill
 End With
 
 With MapView1.Map
   .AddTile("GoogleMap", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "999"]).SubDomains = ["0", "1", "2"]  
   .Zoom = 13
' Imposta il centro della mappa:
   .Center = MapPoint(41.8902142, 12.4900422)
 End With
 
End


Public Sub MapView1_MouseDown()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 
' Mostra semplicemente le coordinate geografiche decimali del punto ove si è cliccato:
 Me.Text = "Lat. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") &
           " - Lon. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000")
 
End


Public Sub MapView1_MouseUp()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 
 If Mouse.Right Then
   mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))
   If mmpp.Count == 2 Then
' Ottiene e mostra nell'intestazione del "Form" il "Bearing" fra i due punti clliccati:
     Me.Text = "Rilevamento: " & Format(MapPoint.Bearing(mmpp[0], mmpp[1]), "0.00") & " gradi"
     mmpp = Null
     mmpp = New MapPoint[]
   Endif
 Endif
 
End

oppure così:

Public Sub Form_Open()
 
 Dim mp As New MapPoint
   
 With MapView1
   .X = 0
   .Y = 0
   .W = Me.W
   .H = Me.H
   .Map.AddTile("GoogleMap", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "999"]).SubDomains = ["0", "1", "2"]
   .Map.Zoom = 13
   .Map["GoogleMap"].Visible = True
 End With
 
' Imposta il centro della mappa:
  mp.Lat = 41.8902142
  mp.Lon = 12.4900422
  MapView1.Map.Center = mp
  
End


Public Sub MapView1_MouseUp()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 Dim f As Float
 
 Print " Latitudine "; MapView1.Map.PixelToMapPointRel(pt).Lat; ", "; MapView1.Map.PixelToMapPointRel(pt).Lon
 
 br.Push(Rad(MapView1.Map.PixelToMapPointRel(pt).Lat))
 br.Push(Rad(MapView1.Map.PixelToMapPointRel(pt).Lon))
 
 If br.Count = 4 Then
' Si applica la seguente formula: θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )
' Dove: φ1,λ1 è il punto iniziale; φ2,λ2 è il punto finale (Δλ è la differenza in longitudine)
   f = ATan2(Sin(br[3] - br[1]) * Cos(br[2]), Cos(br[0]) * Sin(br[2]) - Sin(br[0]) * Cos(br[2]) * Cos(br[3] - br[1]))
   Print "Bearing:    "; (CInt(Deg(f)) + 360) Mod 360; "°\n\n"
   br.Clear
   br = New Float[]
 Endif
  
End


Note

[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "999"].