Inserire del testo su una MapView: differenze tra le versioni
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| (20 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 3: | Riga 3: | ||
Vediamo un semplice esempio: <SUP>[[[#Note| | Vediamo un semplice esempio: <SUP>[[[#Note|nota 1]]]</sup> | ||
Private mp As New MapPoint | Private mp As New MapPoint | ||
Public Sub Form_Open() | |||
With MapView1 | With MapView1 | ||
| Riga 14: | Riga 14: | ||
.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": "999"]).SubDomains = ["0", "1", "2"] | ||
.Map.Zoom = 16 | .Map.Zoom = 16 | ||
mp.Lat = 41.8902142 | mp.Lat = 41.8902142 | ||
| Riga 21: | Riga 21: | ||
End With | End With | ||
''' | End | ||
Public Sub MapView1_MouseDown() | |||
<FONT Color=gray>' ''Se si clicca con il tasto centrale del mouse, si cancelleranno le immagini con il testo, se presenti, cominciando dalla prima inserita:''</font> | |||
If Mouse.Middle Then | |||
With MapView1 | |||
If Not Object.IsValid(.Map.GetShape("immagine")) Then Return | |||
.Map.Remove("immagine") | |||
.Refresh | |||
End With | |||
Endif | |||
Dim pt As New Point(Mouse.X, Mouse.Y) | Dim pt As New Point(Mouse.X, Mouse.Y) | ||
mp = MapView1.Map.PixelToMapPointRel(pt) | mp = MapView1.Map.PixelToMapPointRel(pt) | ||
End | |||
Public Sub MapView1_MouseUp() | |||
If Not Mouse.Right Then Return | |||
Dim im As Image | Dim im As Image | ||
Dim s As String | Dim s As String | ||
| Riga 44: | Riga 57: | ||
With Paint | With Paint | ||
.Begin(im) | .Begin(im) | ||
.Brush = .Color(Color.Orange) | |||
.Arc(Me.Font.TextWidth(s) / 2 + 1, Me.Font.TextHeight(s) / 2 + 1, 2, Rad(0), Rad(360), False) | |||
.Fill | |||
.Font.Size = 10 | .Font.Size = 10 | ||
.Brush = .Color(Color.Red) | .Brush = .Color(Color.Red) | ||
.DrawText(s, 0, 0, im.W, im.H, Align.Normal) | <FONT Color=#B22222>.DrawText</font>(s, 0, 0, im.W, im.H, Align.Normal) | ||
.End | .End | ||
End With | End With | ||
With MapView1 | With MapView1 | ||
<FONT Color=gray>' ''Passa l'oggetto "Image" al 3° argomento del Metodo ".AddPoint( )":''</font> | <FONT Color=gray>' ''Passa l'oggetto "Image" al 3° argomento del Metodo ".AddPoint( )" e mostra sulla mappa l'immagine contenente il testo:''</font> | ||
.Map.AddShape("immagine").<FONT Color= | .Map.AddShape("immagine").<FONT Color=red>AddPoint</font>("immagine", mp, Color.Default, <FONT Color=red><B>im</b></font>) | ||
.Refresh() | .Refresh() | ||
End With | End With | ||
End | |||
| Riga 70: | Riga 85: | ||
Public Sub Form_Open() | |||
With Me | With Me | ||
| Riga 87: | Riga 102: | ||
pn = MapView1.Children[0] | pn = MapView1.Children[0] | ||
End | |||
Public Sub MapView1_MouseUp() | |||
Dim pt As New Point(Mouse.X, Mouse.Y) | Dim pt As New Point(Mouse.X, Mouse.Y) | ||
| Riga 100: | Riga 116: | ||
MapView1.Refresh | MapView1.Refresh | ||
End | |||
Public Sub MapView1_Draw() | |||
Dim i As Integer | Dim i As Integer | ||
| Riga 108: | Riga 125: | ||
With Paint | With Paint | ||
<FONT Color=gray>' ''Disegna sull'Oggetto "Figlio" del "Panel", che è una "DrawingArea" | <FONT Color=gray>' ''Disegna sull'Oggetto "Figlio" del "Panel", che è una "DrawingArea" (ossia lo stesso Oggetto che la Classe "MapView" usa ordinariamente per mostrare la mappa):''</font> | ||
.Begin(pn.Children[0]) | .Begin(pn.Children[0]) | ||
.Brush = .Color(Color.Red) | .Brush = .Color(Color.Red) | ||
| Riga 117: | Riga 134: | ||
End With | End With | ||
End | |||
Se si vuole inserire uno sfondo colorato al testo, allora bisognerà usare il Metodo ".DrawRichText()" (oppure: il Metodo ".TextRich()"), e la precedente routine potrà essere così ad esempio impostata: | Se si vuole inserire uno sfondo colorato al testo, allora bisognerà usare il Metodo ".DrawRichText()" (oppure: il Metodo ".TextRich()"), e la precedente routine potrà essere così ad esempio impostata: | ||
Public Sub MapView1_Draw() | Public Sub MapView1_Draw() | ||
| Riga 125: | Riga 142: | ||
s = "Testo qualsiasi" | s = "Testo qualsiasi" | ||
<FONT Color=gray>' ''Attribuisce uno sfondo colorato al testo:''</font> | |||
rt = "<SPAN style=background-color:white>" & s & "</span>" | rt = "<SPAN style=background-color:white>" & s & "</span>" | ||
| Riga 131: | Riga 149: | ||
.Brush = .Color(Color.Red) | .Brush = .Color(Color.Red) | ||
For i = 0 To mmpp.Max | For i = 0 To mmpp.Max | ||
<FONT Color= | <FONT Color=red><B>.DrawRichText</b></font>(rt, MapView1.Map.MapPointToPixelRel(mmpp[i]).X, MapView1.Map.MapPointToPixelRel(mmpp[i]).Y, .Font.TextWidth(s), .Font.TextHeight(s), Align.Right) | ||
Next | Next | ||
.End | .End | ||
| Riga 141: | Riga 159: | ||
=Note= | =Note= | ||
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": " | [1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "999"] | ||
<BR>Al riguardo vedere: [[ | <BR>Al riguardo vedere: [[Conoscere la versione più recente di Google Maps satellite]] | ||
Versione attuale delle 00:55, 27 lug 2025
Una modalità per poter inserire del testo su una MapView è quella di scrivere il testo su un Oggetto Image, che dovrà essere successivamente passato all'ultimo argomento del sotto-Metodo ".AddPoint()" del Metodo ".AddShape()" della Classe Map.
Pur spostando con il mouse la mappa, il testo resterà stabile sul punto ove era stato disegnato.
Vediamo un semplice esempio: [nota 1]
Private mp As New MapPoint
Public Sub Form_Open()
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": "999"]).SubDomains = ["0", "1", "2"]
.Map.Zoom = 16
mp.Lat = 41.8902142
mp.Lon = 12.4900422
.Map.Center = mp
End With
End
Public Sub MapView1_MouseDown()
' Se si clicca con il tasto centrale del mouse, si cancelleranno le immagini con il testo, se presenti, cominciando dalla prima inserita:
If Mouse.Middle Then
With MapView1
If Not Object.IsValid(.Map.GetShape("immagine")) Then Return
.Map.Remove("immagine")
.Refresh
End With
Endif
Dim pt As New Point(Mouse.X, Mouse.Y)
mp = MapView1.Map.PixelToMapPointRel(pt)
End
Public Sub MapView1_MouseUp()
If Not Mouse.Right Then Return
Dim im As Image
Dim s As String
s = Format(mp.Lat, "#.######") & "\n" & Format(mp.Lon, "#.######")
' Crea l'oggetto "Image" impostando la sua dimensione coerente con l'area occupata dal testo:
im = New Image(Me.Font.TextWidth(s), Me.Font.TextHeight(s), Color.Transparent, Image.Standard)
' Scrive le coordinate geografiche nell'oggetto "Image" in forma testuale:
With Paint
.Begin(im)
.Brush = .Color(Color.Orange)
.Arc(Me.Font.TextWidth(s) / 2 + 1, Me.Font.TextHeight(s) / 2 + 1, 2, Rad(0), Rad(360), False)
.Fill
.Font.Size = 10
.Brush = .Color(Color.Red)
.DrawText(s, 0, 0, im.W, im.H, Align.Normal)
.End
End With
With MapView1
' Passa l'oggetto "Image" al 3° argomento del Metodo ".AddPoint( )" e mostra sulla mappa l'immagine contenente il testo:
.Map.AddShape("immagine").AddPoint("immagine", mp, Color.Default, im)
.Refresh()
End With
End
Disegnare il testo su una MapView usando l'Oggetto "Figlio" DrawingArea
L'Oggetto "MapView" mostra la mappa su una "DrawingArea", che è un Oggetto "Figlio" di un "Panel", "Figlio" a sua volta dell'Oggetto "MapView". Pertanto, sarà possibile utilizzare tale "DrawingArea" per disegnare qualsiasi cosa, facendola apparire al di sopra della mappa.
Mostriamo un semplice codice esemplificativo:
Private MapView1 As MapView
Private pn As Panel
Private mmpp As New MapPoint[]
Public Sub Form_Open()
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 = 14
' Imposta il centro della mappa all'inizio:
.Map.Center = MapPoint(41.89018, 12.49230)
End With
' Individua dapprima l'Oggetto "Figlio" della "MapView", che è un "Panel":
pn = MapView1.Children[0]
End
Public Sub MapView1_MouseUp()
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
Dim s As String = "Testo qualsiasi"
With Paint
' Disegna sull'Oggetto "Figlio" del "Panel", che è una "DrawingArea" (ossia lo stesso Oggetto che la Classe "MapView" usa ordinariamente per mostrare la mappa):
.Begin(pn.Children[0])
.Brush = .Color(Color.Red)
For i = 0 to mmpp.Max
.DrawText(s, MapView1.Map.MapPointToPixelRel(mmpp[i]).X, MapView1.Map.MapPointToPixelRel(mmpp[i]).Y, .Font.TextWidth(s), .Font.TextHeight(s), Align.Normal)
Next
.End
End With
End
Se si vuole inserire uno sfondo colorato al testo, allora bisognerà usare il Metodo ".DrawRichText()" (oppure: il Metodo ".TextRich()"), e la precedente routine potrà essere così ad esempio impostata:
Public Sub MapView1_Draw()
Dim i As Integer
Dim s, rt As String
s = "Testo qualsiasi"
' Attribuisce uno sfondo colorato al testo:
rt = "<SPAN style=background-color:white>" & s & ""
With Paint
.Begin(pn.Children[0])
.Brush = .Color(Color.Red)
For i = 0 To mmpp.Max
.DrawRichText(rt, MapView1.Map.MapPointToPixelRel(mmpp[i]).X, MapView1.Map.MapPointToPixelRel(mmpp[i]).Y, .Font.TextWidth(s), .Font.TextHeight(s), Align.Right)
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": "999"]
Al riguardo vedere: Conoscere la versione più recente di Google Maps satellite