Differenze tra le versioni di "Calcolare il rilevamento (bearing) in gradi"
(22 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. | ||
− | + | '''<FONT size=5>Ⓝ</font>''' | |
− | + | | '''ogg.''' | |
− | '''<FONT size=5>Ⓝ</font>''' | ||
| / | | / | ||
| / | | / | ||
Riga 9: | Riga 9: | ||
|/ | |/ | ||
'''oss.''' | '''oss.''' | ||
+ | Nell'esempio, che segue <SUP>[[[#Note|Nota 1]]]</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. | ||
+ | <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://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "991"]).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 | ||
− | + | oppure così: | |
− | + | Public Sub Form_Open() | |
Dim mp As New MapPoint | Dim mp As New MapPoint | ||
Riga 20: | Riga 70: | ||
.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": " | + | .Map.AddTile("GoogleMap", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "991"]).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 | + | <FONT Color=gray>' ''Imposta il centro della mappa:''</font> |
mp.Lat = 41.8902142 | mp.Lat = 41.8902142 | ||
mp.Lon = 12.4900422 | mp.Lon = 12.4900422 | ||
MapView1.Map.Center = mp | MapView1.Map.Center = mp | ||
− | + | End | |
− | + | 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 "; | + | 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 47: | Riga 97: | ||
' ''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 | |
+ | |||
+ | |||
+ | |||
+ | =Note= | ||
+ | [1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "991"]. |
Versione attuale delle 10:33, 19 nov 2024
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 [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": "991"]).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": "991"]).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": "991"].