Differenze tra le versioni di "Utilizzando un Oggetto di visualizzazione diverso da una MapView consentire uno spostamento morbido e uniforme della mappa"
Da Gambas-it.org - Wikipedia.
Riga 9: | Riga 9: | ||
Private pt As New Point | Private pt As New Point | ||
Private cpx As New Point | Private cpx As New Point | ||
+ | |||
+ | Public Sub DrawingArea1_MouseDown() | ||
+ | |||
+ | pt = Point(Mouse.X, Mouse.Y) | ||
+ | |||
+ | mx = pt.X | ||
+ | my = pt.Y | ||
+ | |||
+ | cpx = Geo.MapPointToPixel(mappa.Center, mappa.Zoom) | ||
+ | |||
+ | End | ||
+ | |||
+ | Public Sub DrawingArea1_MouseMove() | ||
+ | |||
+ | Dim pix As New Point(cpx.X, cpx.Y) | ||
+ | |||
+ | pix.X += mx - Mouse.X | ||
+ | pix.Y += my - Mouse.Y | ||
+ | |||
+ | <FONT Color=darkgreen>' ''Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom:''</font> | ||
+ | <FONT Color=#B22222>mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat | ||
+ | mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon</font> | ||
+ | |||
+ | End | ||
+ | |||
+ | ====Un esempio completo==== | ||
+ | Mostriamo di seguito un esempio completo: | ||
+ | Private DrawingArea1 As DrawingArea | ||
+ | Private mappa As Map | ||
+ | Private mx As Integer | ||
+ | Private my As Integer | ||
+ | Private pt As New Point | ||
+ | Private cpx As New Point | ||
+ | |||
+ | |||
+ | Public Sub _new() | ||
+ | |||
+ | With Me | ||
+ | .W = Screen.AvailableWidth | ||
+ | .H = Screen.AvailableHeight | ||
+ | .Arrangement = Arrange.Fill | ||
+ | End With | ||
+ | |||
+ | DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" | ||
+ | |||
+ | With mappa = New Map As "Mappa" | ||
+ | .AddTile("topo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") | ||
+ | .Zoom = 15 | ||
+ | .Center = MapPoint(41.89018, 12.49230) | ||
+ | End With | ||
+ | |||
+ | End | ||
+ | |||
+ | |||
+ | Public Sub DrawingArea1_Draw() | ||
+ | |||
+ | With mappa | ||
+ | <FONT Color=gray>' ''Imposta la dimensione della mappa mostrata sulla "DrawingArea":''</font> | ||
+ | .Width = DrawingArea1.W | ||
+ | .Height = DrawingArea1.H | ||
+ | <FONT Color=gray>' ''Disegna quindi la mappa sulla "DrawingArea":''</font> | ||
+ | .Draw() | ||
+ | End With | ||
+ | |||
+ | <FONT Color=gray>' ''L'uso del Metodo "Me.Refresh" consente alla "DrawingArea" di mostrare completamente la mappa:''</font> | ||
+ | Me.Refresh | ||
+ | |||
+ | End | ||
+ | |||
Public Sub DrawingArea1_MouseDown() | Public Sub DrawingArea1_MouseDown() |
Versione attuale delle 07:10, 9 giu 2024
Utilizzando un Oggetto di visualizzazione diverso da una MapView (ad esempio una DrawingArea oppure una ImageView)l lo spostamento della mappa mediante il puntatore del mouse non avviene in modo omogeneo e coerente con il mouse.
Per consentire dunque lo spostamento morbido, coerente e uniforme della mappa con il movimento del puntatore del mouse, bisogna in particolare utilizzare alcune risorse della Classe statica "Geo" del Componente "gb.map".
Mostriamo gli elementi essenziali e necessari del codice per ottenere quel risultato, usando ad esempio una DrawingArea:
Private mappa As Map Private mx As Integer Private my As Integer Private pt As New Point Private cpx As New Point Public Sub DrawingArea1_MouseDown() pt = Point(Mouse.X, Mouse.Y) mx = pt.X my = pt.Y cpx = Geo.MapPointToPixel(mappa.Center, mappa.Zoom) End Public Sub DrawingArea1_MouseMove() Dim pix As New Point(cpx.X, cpx.Y) pix.X += mx - Mouse.X pix.Y += my - Mouse.Y ' Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom: mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon End
Un esempio completo
Mostriamo di seguito un esempio completo:
Private DrawingArea1 As DrawingArea Private mappa As Map Private mx As Integer Private my As Integer Private pt As New Point Private cpx As New Point Public Sub _new() With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill End With DrawingArea1 = New DrawingArea(Me) As "DrawingArea1" With mappa = New Map As "Mappa" .AddTile("topo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") .Zoom = 15 .Center = MapPoint(41.89018, 12.49230) End With End Public Sub DrawingArea1_Draw() With mappa ' Imposta la dimensione della mappa mostrata sulla "DrawingArea": .Width = DrawingArea1.W .Height = DrawingArea1.H ' Disegna quindi la mappa sulla "DrawingArea": .Draw() End With ' L'uso del Metodo "Me.Refresh" consente alla "DrawingArea" di mostrare completamente la mappa: Me.Refresh End Public Sub DrawingArea1_MouseDown() pt = Point(Mouse.X, Mouse.Y) mx = pt.X my = pt.Y cpx = Geo.MapPointToPixel(mappa.Center, mappa.Zoom) End Public Sub DrawingArea1_MouseMove() Dim pix As New Point(cpx.X, cpx.Y) pix.X += mx - Mouse.X pix.Y += my - Mouse.Y ' Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom: mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon End