Differenze tra le versioni di "Inserire del testo su una MapView"
Riga 85: | Riga 85: | ||
<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> | ||
− | pn = .Children[0] | + | pn = MapView1.Children[0] |
'''End''' | '''End''' |
Versione delle 09:10, 12 gen 2022
Una modalità per poter inserire del testo su una MapView è quella di scrivere il testo su un oggetto Image e successivamente passarlo all'ultimo argomento del Metodo ".AddPoint( ) ".
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": "908"]).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() Dim pt As New Point(Mouse.X, Mouse.Y) mp = MapView1.Map.PixelToMapPointRel(pt) End Public Sub MapView1_MouseUp() 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) .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( )": .Map.AddShape("immagine").AddPoint("immagine", mp, Color.Default, im) .Refresh() .Map.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: .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 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]) .Brush = .Color(Color.Yellow) For i = 0 to mmpp.Max .DrawText("Testo qualsiasi", MapView1.Map.MapPointToPixelRel(mmpp[i]).X, MapView1.Map.MapPointToPixelRel(mmpp[i]).Y, .Font.TextWidth("Testo qualsiasi"), .Font.TextHeight("Testo qualsiasi"), 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": "894"]
Al riguardo vedere: Conoscere la versione più recente di Google Maps satellite