Differenze tra le versioni di "Inserire un'immagine come marcatore di coordinate su una MapView"

Da Gambas-it.org - Wikipedia.
(25 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
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''.
 
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: <SUP>&#091;[[#Note|Nota 1]]&#093;</sup>
+
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 tasto destro del mouse:
 
  Private im As Image
 
  Private im As Image
 
  Private mp As New MapPoint
 
  Private mp As New MapPoint
 
   
 
   
  '''Public''' Sub _New()
+
  Public Sub _New()
 
    
 
    
   MapView1.Map.AddTile("GoogleMap", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "908"]).SubDomains = ["0", "1", "2"]  <SUP><FONT Color=gray>'</font>&#091;[[#Note|Nota 1]]&#093;</sup>
+
   MapView1.Map.AddTile("GoogleMap", "https&#058;//khms{s}.google.it/kh/v={version}&src=app&x={x}&y={y}&z={z}&s=Galile", ["version": "967"]).SubDomains = ["0", "1", "2"]  <SUP><FONT Color=gray>'</font>&#091;[[#Note|nota 1]]&#093;</sup>
 +
 
 +
End
 
    
 
    
'''End'''
 
 
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
    
 
    
   im = Image.Load("<FONT Color=gray>''/percorso/del/file/immagine''</font>")
+
   im = Image.Load("<FONT Color=darkgreen>''/percorso/del/file/immagine''</font>")   <SUP><FONT Color=gray>'</font>&#091;[[#Note|nota 2]]&#093;</sup>
 
    
 
    
 
  <FONT Color=gray>' ''Imposta il centro della mappa specificandone preliminarmente le coordinate geografiche:''</font>
 
  <FONT Color=gray>' ''Imposta il centro della mappa specificandone preliminarmente le coordinate geografiche:''</font>
Riga 22: Riga 22:
 
     .Center = mp
 
     .Center = mp
 
     .Zoom = 15
 
     .Zoom = 15
 +
<FONT Color=gray>' ''Mostra l'immagine prescelta come marcatore delle coordinate:''</font>
 +
    .AddShape("IM1").AddPoint("immagine", mp, Color.'''<FONT Color=#B22222>Default</font>''', im)
 
   End With
 
   End With
 
 
<FONT Color=gray>' ''Mostra l'immagine prescelta come marcatore delle coordinate:''</font>
 
  MapView1.Map.AddShape("immagine").AddPoint("immagine", mp, Color.'''<FONT Color=#B22222>Default</font>''', im)
 
 
 
'''End'''
 
 
   
 
   
 +
End
 +
 +
 +
Public Sub MapView1_MouseUp()
 
   
 
   
  '''Public''' Sub MapView1_MouseUp()
+
  <FONT Color=gray>' ''Se si clicca con il tasto "destro" del mouse, viene mostrata l'immagine:''</font>
 +
  If Not Mouse.Right Then Return
 
    
 
    
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
Riga 36: Riga 38:
 
   With MapView1
 
   With MapView1
 
     mp = .Map.PixelToMapPointRel(pt)
 
     mp = .Map.PixelToMapPointRel(pt)
     .Map.AddShape("immagine").<FONT Color=#B22222>AddPoint</font>("immagine", mp, Color.'''<FONT Color=#B22222>Default</font>''', im)
+
     .Map.AddShape("IM1").<FONT Color=#B22222>AddPoint</font>("immagine", mp, Color.'''<FONT Color=#B22222>Default</font>''', im)
 
     .Refresh()
 
     .Refresh()
    .Map.Refresh()
 
 
   End With
 
   End With
 
    
 
    
   Print mp.Lat, mp.Lon
+
   Me.Title = "Lat.: " & mp.Lat & "  Lon.: " & mp.Lon
 
    
 
    
  '''End'''
+
  End
 +
Un'altra possibilità è:
 +
  .......
 +
  With MapView1
 +
    .Map.Center = mp
 +
    .Map.Zoom = 15
 +
<FONT Color=gray>' ''Mostra l'immagine prescelta come marcatore delle coordinate:''</font>
 +
    .Map.AddShape("IM1")
 +
    .Map<FONT Color=#B22222>["IM1"]</font>.AddPoint("immagine", mp, Color.Default, im)
 +
    .Refresh()
 +
  End With
 +
......
  
  
==Disegnare un'immagine su una MapView nel punto ove si è cliccato con il mouse, usando l'Oggetto "Figlio" DrawingArea==
+
==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", che è un Oggetto "Figlio" di un "Panel", "Figlio" a sua volta dell'Oggetto "MapView".
+
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".
<BR>Pertanto, sarà possibile utilizzare tale "DrawingArea" per disegnare qualsiasi cosa, facendola apparire al di sopra della mappa.
+
<BR>Pertanto, sarà possibile utilizzare tale "DrawingArea" per disegnare qualsiasi cosa, facendola apparire al di sopra della mappa. <SUP>&#091;[[#Note|nota 3]]&#093;</sup>
  
Mostriamo un semplice codice esemplificativo:
+
Mostriamo un semplice codice, nel quale sarà mostrata un'immagine sulla mappa nel punto ove si è cliccato con il tasto destro 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 57: Riga 70:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   Dim mp As New MapPoint
 
   Dim mp As New MapPoint
Riga 71: Riga 84:
 
   With MapView1 = New MapView(Me) As "MapView1"
 
   With MapView1 = New MapView(Me) As "MapView1"
 
     .Map.AddTile("topo", "https&#058;//a.tile.opentopomap.org/{z}/{x}/{y}.png")
 
     .Map.AddTile("topo", "https&#058;//a.tile.opentopomap.org/{z}/{x}/{y}.png")
     .Map.Zoom = 15
+
     .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 77: Riga 90:
 
   End With
 
   End With
 
    
 
    
   im = Image.Load("<FONT Color=gray>/percorso/del/file/immagine"</font>)
+
   im = Image.Load("<FONT Color=darkgreen>/percorso/del/file/immagine"</font>)
 
    
 
    
  '''End'''
+
  End
 +
 +
 +
Public Sub MapView1_MouseUp()
 +
 +
  If Not Mouse.Right Then Return  <FONT Color=gray>' ''Se si clicca con il tasto "destro" del mouse, viene mostrata l'immagine''</font>
 
   
 
   
'''Public''' Sub MapView1_MouseUp()
 
 
 
 
   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 92: Riga 108:
 
   MapView1.Refresh
 
   MapView1.Refresh
 
    
 
    
  '''End'''
+
  End
 
   
 
   
+
 
  '''Public''' Sub MapView1_Draw()
+
  Public Sub MapView1_Draw()
 
    
 
    
 
   Dim i As Integer
 
   Dim i As Integer
Riga 103: Riga 119:
 
     .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
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
  
  
  
 
=Note=
 
=Note=
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "908"]
+
[1] Qualora la mappa non appaia, verificare la versione GoogleMap, ed eventualmente modificarla in questo punto del codice: ["version": "949"]
<BR>Al riguardo vedere: [[Conoscere_la_versione_più_recente_di_Google_Maps_satellite|Conoscere la versione più recente di Google Maps satellite]]
+
<BR>Al riguardo vedere: [[Conoscere la versione più recente di Google Maps satellite]]
 +
 
 +
[2] Per le icone, fornite da Gambas, vedere le seguenti pagine:
 +
* [[Caricare in un oggetto le icone messe a disposizione da Gambas]]
 +
* [[Icone messe a disposizione da Gambas]]
 +
 
 +
[3] Al riguardo vedere: [[Mostrare sulla MapView disegni, immagini e Controlli senza l'uso del Metodo Map.AddShape()]]

Versione delle 04:46, 18 gen 2024

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 tasto destro del 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": "967"]).SubDomains = ["0", "1", "2"]   '[nota 1]
 
End
 

Public Sub Form_Open()
 
 im = Image.Load("/percorso/del/file/immagine")   '[nota 2]
 
' 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
' Mostra l'immagine prescelta come marcatore delle coordinate:
   .AddShape("IM1").AddPoint("immagine", mp, Color.Default, im)
 End With

End


Public Sub MapView1_MouseUp()

' Se si clicca con il tasto "destro" del mouse, viene mostrata l'immagine:
 If Not Mouse.Right Then Return
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
  
 With MapView1
   mp = .Map.PixelToMapPointRel(pt)
   .Map.AddShape("IM1").AddPoint("immagine", mp, Color.Default, im)
   .Refresh()
 End With
 
 Me.Title = "Lat.: " & mp.Lat & "  Lon.: " & mp.Lon
 
End

Un'altra possibilità è:

 .......
 With MapView1
   .Map.Center = mp
   .Map.Zoom = 15
' Mostra l'immagine prescelta come marcatore delle coordinate:
   .Map.AddShape("IM1")
   .Map["IM1"].AddPoint("immagine", mp, Color.Default, im)
   .Refresh()
 End With
......


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 3]

Mostriamo un semplice codice, nel quale sarà mostrata un'immagine sulla mappa nel punto ove si è cliccato con il tasto destro 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   ' Se si clicca con il tasto "destro" del mouse, viene mostrata l'immagine

 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": "949"]
Al riguardo vedere: Conoscere la versione più recente di Google Maps satellite

[2] Per le icone, fornite da Gambas, vedere le seguenti pagine:

[3] Al riguardo vedere: Mostrare sulla MapView disegni, immagini e Controlli senza l'uso del Metodo Map.AddShape()