Differenze tra le versioni di "Inserire un'immagine come marcatore di coordinate su una MapView"
Riga 52: | Riga 52: | ||
Mostriamo un semplice codice, nel quale sarà mostrata un'immagine sulla mappa nel punto ove si è cliccato con il puntatore del mouse: | Mostriamo un semplice codice, nel quale sarà mostrata un'immagine sulla mappa nel punto ove si è cliccato con il puntatore del mouse: | ||
Private MapView1 As MapView | Private MapView1 As MapView | ||
+ | Private Const ZOOM As Byte = 14 | ||
Private pn As Panel | Private pn As Panel | ||
Private im As Image | Private im As Image | ||
Riga 71: | Riga 72: | ||
With MapView1 = New MapView(Me) As "MapView1" | With MapView1 = New MapView(Me) As "MapView1" | ||
.Map.AddTile("topo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") | .Map.AddTile("topo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") | ||
− | .Map.Zoom = | + | .Map.Zoom = ZOOM |
.Map.Center = mp | .Map.Center = mp | ||
<FONT Color=gray>' ''Individua dapprima l'Oggetto "Figlio" della "MapView", che è un "Panel":''</font> | <FONT Color=gray>' ''Individua dapprima l'Oggetto "Figlio" della "MapView", che è un "Panel":''</font> | ||
Riga 82: | Riga 83: | ||
'''Public''' Sub MapView1_MouseUp() | '''Public''' Sub MapView1_MouseUp() | ||
− | + | ||
+ | If Not Mouse.Right Then Return | ||
+ | |||
Dim pt As New Point(Mouse.X, Mouse.Y) | Dim pt As New Point(Mouse.X, Mouse.Y) | ||
− | + | ||
<FONT Color=gray>' ''Si usa l'Oggetto "MapPoint" per garantire la coerenza del puntamento su un punto della mappa anche nel caso di spostamento o variazione dello zoom della mappa medesima:''</font> | <FONT Color=gray>' ''Si usa l'Oggetto "MapPoint" per garantire la coerenza del puntamento su un punto della mappa anche nel caso di spostamento o variazione dello zoom della mappa medesima:''</font> | ||
mmpp.Push(MapView1.Map.PixelToMapPointRel(pt)) | mmpp.Push(MapView1.Map.PixelToMapPointRel(pt)) | ||
Riga 93: | Riga 96: | ||
'''End''' | '''End''' | ||
− | + | ||
− | |||
'''Public''' Sub MapView1_Draw() | '''Public''' Sub MapView1_Draw() | ||
Riga 103: | Riga 105: | ||
.Begin(pn.Children[0]) | .Begin(pn.Children[0]) | ||
For i = 0 to mmpp.Max | For i = 0 to mmpp.Max | ||
− | <FONT Color=gray>' ''(x / 2) e (y / 2) per centrare l'immagine nel punto dove si clicca con il mouse:''</font> | + | <FONT Color=gray>' ''(x / 2) e (y / 2) per centrare l'immagine nel punto dove si clicca con il mouse ed aggiunge una formula per proporzionare la dimensione dell'immagine rispetto al valore dello zoom corrente:''</font> |
− | .DrawImage(im, MapView1.Map.MapPointToPixelRel(mmpp[i]).X - (im.W / 2), MapView1.Map.MapPointToPixelRel(mmpp[i]).Y - (im.H / 2), im.W, im.H, 0.6, Null) | + | .DrawImage(im, (MapView1.Map.MapPointToPixelRel(mmpp[i]).X - ((im.W <FONT Color=darkgreen>* CSingle(2 ^ (MapView1.Map.Zoom - ZOOM))</font>) / 2)), (MapView1.Map.MapPointToPixelRel(mmpp[i]).Y - ((im.H <FONT Color=darkgreen>* CSingle(2 ^ (MapView1.Map.Zoom - ZOOM))</font>) / 2)), im.W <FONT Color=darkgreen>* CSingle(2 ^ (MapView1.Map.Zoom - ZOOM))</font>, im.H <FONT Color=darkgreen>* CSingle(2 ^ (MapView1.Map.Zoom - ZOOM))</font>, 0.6, Null) |
Next | Next | ||
.End | .End |
Versione delle 17:53, 1 giu 2023
Per inserire un'immagine come marcatore di coordinate su una MapView al posto della classica forma a goccia rossa, è necessario utilizzare il Metodo ".AddPoint()" del Metodo ".AddShape()" della Classe Map.
Mostriamo un semplice esempio, nel quale all'apertura del programma sarà inserito sulla mappa un marcatore di coordinate rappresentato dall'immagine prescelta. Successivamente il marcatore potrà essere inserito sul punto della mappa, ove si clicca con il mouse:
Private im As Image Private mp As New MapPoint Public Sub _New() MapView1.Map.AddTile("GoogleMap", "https://khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "946"]).SubDomains = ["0", "1", "2"] '[Nota 1] End Public Sub Form_Open() im = Image.Load("/percorso/del/file/immagine") ' Imposta il centro della mappa specificandone preliminarmente le coordinate geografiche: mp.Lat = 41.8902142 mp.Lon = 12.4900422 With MapView1.Map .Center = mp .Zoom = 15 End With ' Mostra l'immagine prescelta come marcatore delle coordinate: MapView1.Map.AddShape("immagine").AddPoint("immagine", mp, Color.Default, im) End Public Sub MapView1_MouseUp() Dim pt As New Point(Mouse.X, Mouse.Y) With MapView1 mp = .Map.PixelToMapPointRel(pt) .Map.AddShape("immagine").AddPoint("immagine", mp, Color.Default, im) .Refresh() .Map.Refresh() End With Print mp.Lat, mp.Lon End
Inserire un'immagine su una MapView nel punto ove si è cliccato con il mouse, usando l'Oggetto "Figlio" DrawingArea
L'Oggetto "MapView" mostra la mappa su una "DrawingArea". Tale DrawingArea è un Oggetto "Figlio" di un "Panel", "Figlio" diretto a sua volta dell'Oggetto "MapView".
Pertanto, sarà possibile utilizzare tale "DrawingArea" per disegnare qualsiasi cosa, facendola apparire al di sopra della mappa. [Nota 2]
Mostriamo un semplice codice, nel quale sarà mostrata un'immagine sulla mappa nel punto ove si è cliccato con il puntatore del mouse:
Private MapView1 As MapView Private Const ZOOM As Byte = 14 Private pn As Panel Private im As Image Private mmpp As New MapPoint[] Public Sub Form_Open() Dim mp As New MapPoint mp.Lat = 41.89018 mp.Lon = 12.49230 With Me .W = Screen.AvailableWidth .H = Screen.AvailableHeight .Arrangement = Arrange.Fill End With With MapView1 = New MapView(Me) As "MapView1" .Map.AddTile("topo", "https://a.tile.opentopomap.org/{z}/{x}/{y}.png") .Map.Zoom = ZOOM .Map.Center = mp ' Individua dapprima l'Oggetto "Figlio" della "MapView", che è un "Panel": pn = .Children[0] End With im = Image.Load("/percorso/del/file/immagine") End Public Sub MapView1_MouseUp() If Not Mouse.Right Then Return Dim pt As New Point(Mouse.X, Mouse.Y) ' Si usa l'Oggetto "MapPoint" per garantire la coerenza del puntamento su un punto della mappa anche nel caso di spostamento o variazione dello zoom della mappa medesima: mmpp.Push(MapView1.Map.PixelToMapPointRel(pt)) Me.Caption = CStr(mmpp[mmpp.Max].Lat) & " - " & CStr(mmpp[mmpp.Max].Lon) MapView1.Refresh End Public Sub MapView1_Draw() Dim i As Integer With Paint ' Disegna sull'Oggetto "Figlio" del "Panel", che è una "DrawingArea", la stessa che la Classe "MapView" usa per mostrare la mappa: .Begin(pn.Children[0]) For i = 0 to mmpp.Max ' (x / 2) e (y / 2) per centrare l'immagine nel punto dove si clicca con il mouse ed aggiunge una formula per proporzionare la dimensione dell'immagine rispetto al valore dello zoom corrente: .DrawImage(im, (MapView1.Map.MapPointToPixelRel(mmpp[i]).X - ((im.W * CSingle(2 ^ (MapView1.Map.Zoom - ZOOM))) / 2)), (MapView1.Map.MapPointToPixelRel(mmpp[i]).Y - ((im.H * CSingle(2 ^ (MapView1.Map.Zoom - ZOOM))) / 2)), im.W * CSingle(2 ^ (MapView1.Map.Zoom - ZOOM)), im.H * CSingle(2 ^ (MapView1.Map.Zoom - ZOOM)), 0.6, Null) Next .End End With End
Note
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "946"]
Al riguardo vedere: Conoscere la versione più recente di Google Maps satellite
[2] Al riguardo vedere: Mostrare sulla MapView disegni, immagini e Controlli senza l'uso del Metodo Map.AddShape()