Differenze tra le versioni di "Calcolare il rilevamento (bearing) in gradi"
Riga 10: | Riga 10: | ||
'''oss.''' | '''oss.''' | ||
− | Nell'esempio, che segue, si otterrà il ''bearing'' assoluto fra un punto iniziale e un secondo punto ( | + | 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>[[[#Note|Nota 1]]]</sup> |
− | <BR> | + | <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 | + | With Me |
− | + | .W = Screen.AvailableWidth | |
− | + | .H = Screen.AvailableHeight | |
− | .W = | + | .Arrangement = Arrange.Fill |
− | .H = | ||
− | |||
− | . | ||
− | |||
End With | 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 | ||
<FONT Color=gray>' ''Imposta il centro della mappa:''</font> | <FONT Color=gray>' ''Imposta il centro della mappa:''</font> | ||
− | + | .Center = MapPoint(41.8902142, 12.4900422) | |
− | + | End With | |
− | + | ||
− | |||
'''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) | ||
− | + | 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 | Endif | ||
Riga 75: | Riga 81: | ||
'''End''' | '''End''' | ||
− | + | ||
− | |||
'''Public''' Sub MapView1_MouseUp() | '''Public''' Sub MapView1_MouseUp() | ||
Riga 97: | Riga 102: | ||
'''End''' | '''End''' | ||
− | |||
− | |||
− | |||
− | |||
− |
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