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.
(Creata pagina con "Utilizzando un Oggetto di visualizzazione diverso da una ''MapView'' (ad esempio una ''DrawingArea'' oppure una ''ImageView'')l lo spostamento della mappa mediante il puntator...") |
|||
(2 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
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. | 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". | + | 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 <SPAN Style="text-decoration:underline">essenziali e necessari</span> del codice per ottenere quel risultato, usando ad esempio una ''DrawingArea'': | Mostriamo gli elementi <SPAN Style="text-decoration:underline">essenziali e necessari</span> del codice per ottenere quel risultato, usando ad esempio una ''DrawingArea'': | ||
Riga 29: | Riga 29: | ||
<FONT Color=darkgreen>' ''Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom:''</font> | <FONT Color=darkgreen>' ''Le seguenti righe di comando consentono uno spostamento morbido e uniforme della mappa per ciascun livello di zoom:''</font> | ||
− | mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat | + | <FONT Color=#B22222>mappa.Center.Lat = Geo.PixelToMapPoint(pix, mappa.Zoom).Lat |
− | mappa.Center.Lon = Geo.PixelToMapPoint(pix, mappa.Zoom).Lon | + | 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() | ||
+ | |||
+ | 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 | End |
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