Differenze tra le versioni di "Calcolare il rilevamento (bearing) in gradi"

Da Gambas-it.org - Wikipedia.
Riga 10: Riga 10:
 
  '''oss.'''
 
  '''oss.'''
  
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.  <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
Nell'esempio, che segue, 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.  <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
<BR>Con il Metodo "''.Bearing''" della Classe "''MapPoint''" del Componente ''gb.map'':
+
<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[]
 
  Private mmpp As New MapPoint[]
 
   
 
   
Riga 18: Riga 18:
 
    
 
    
 
   Dim mp As New MapPoint
 
   Dim mp As New MapPoint
   
+
 
   With MapView1
+
   With Me
    .X = 0
+
     .W = Screen.AvailableWidth
    .Y = 0
+
     .H = Screen.AvailableHeight
     .W = Me.W
+
     .Arrangement = Arrange.Fill
     .H = Me.H
 
    .Map.AddTile("GoogleMap", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "894"]).SubDomains = ["0", "1", "2"]
 
     .Map.Zoom = 13
 
    .Map["GoogleMap"].Visible = True
 
 
   End With
 
   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": "894"]).SubDomains = ["0", "1", "2"]
 +
    .Zoom = 13
 
  <FONT Color=gray>' ''Imposta il centro della mappa:''</font>
 
  <FONT Color=gray>' ''Imposta il centro della mappa:''</font>
  mp.Lat = 41.8902142
+
    .Center = MapPoint(41.8902142, 12.4900422)
  mp.Lon = 12.4900422
+
   End With
   MapView1.Map.Center = mp
+
 
 
 
 
  '''End'''
 
  '''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()
 
  '''Public''' Sub MapView1_MouseUp()
Riga 41: Riga 48:
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
 
    
 
    
   Print " Latitudine "; MapView1.Map.PixelToMapPointRel(pt).Lat; ", "; MapView1.Map.PixelToMapPointRel(pt).Lon
+
   If Mouse.Right Then
 
+
    mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))
  mmpp.Push(MapView1.Map.PixelToMapPointRel(pt))
+
    If mmpp.Count == 2 Then
 
+
      Me.Text = "Rilevamento: " & Format(MapPoint.Bearing(mmpp[0], mmpp[1]), "0.00") & " gradi"
  If mmpp.Count = 2 Then
+
      mmpp = Null
  Print "Rilevamento "; Fix(MapPoint.<FONT Color=#B22222>Bearing</font>(mmpp[0], mmpp[1])); "*\n\n"
+
      mmpp = New MapPoint[]
    mmpp.Clear
+
    Endif
    mmpp = New MapPoint[]
 
 
   Endif
 
   Endif
 
    
 
    
Riga 75: Riga 81:
 
    
 
    
 
  '''End'''
 
  '''End'''
+
 
 
 
  '''Public''' Sub MapView1_MouseUp()
 
  '''Public''' Sub MapView1_MouseUp()
 
    
 
    
Riga 97: Riga 102:
 
    
 
    
 
  '''End'''
 
  '''End'''
 
 
 
=Note=
 
[1] Vedere anche la seguente pagina: [[Ottenere_l'angolo_di_inclinazione_tra_due_punti_su_una_MapView_rispetto_alla_latitudine_del_punto_iniziale|Ottenere l'angolo di inclinazione tra due punti su una MapView rispetto alla latitudine del punto iniziale]]
 

Versione delle 18:17, 1 mag 2021

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.


 |   ogg.
 |   /
 |  /
 |^/
 |/
oss.

Nell'esempio, che segue, 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. [Nota 1]
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": "894"]).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
     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": "894"]).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