Differenze tra le versioni di "Usare il Metodo .AddPolygon di gb.map"

Da Gambas-it.org - Wikipedia.
 
(2 versioni intermedie di uno stesso utente non sono mostrate)
Riga 11: Riga 11:
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   With Me
 
   With Me
Riga 25: Riga 25:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
    
 
    
 
   
 
   
  '''Public''' Sub MapView1_MouseDown()
+
  Public Sub MapView1_MouseDown()
 
    
 
    
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
Riga 35: Riga 35:
 
    
 
    
 
  <FONT Color=gray>' ''Mostra la latitudine e la longitudine del punto ove si è cliccato:''</font>
 
  <FONT Color=gray>' ''Mostra la latitudine e la longitudine del punto ove si è cliccato:''</font>
   Me.Text = "Lat. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") &
+
   Me.Text = "Lat. " & Format(lat, "0.000000") &
             "  -  Lon. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000")
+
             "  -  Lon. " & Format(lon, "0.000000")
 
    
 
    
 
   If Not Mouse.Right Then Return
 
   If Not Mouse.Right Then Return
Riga 48: Riga 48:
 
   If llaa.count == 4 Then  
 
   If llaa.count == 4 Then  
 
  <FONT Color=gray>' ''Al Metodo ".AddPolygon()" si dovrà poi passare un vettore bidimensionale "MapPoint[][]":''</font>
 
  <FONT Color=gray>' ''Al Metodo ".AddPolygon()" si dovrà poi passare un vettore bidimensionale "MapPoint[][]":''</font>
     mmpp = [[MapPoint(llaa[0], lloo[0]), MapPoint(llaa[1], lloo[1]), MapPoint(llaa[2], lloo[2]), MapPoint(llaa[3], lloo[3])], Null]
+
     mmpp = [[MapPoint(llaa[0], lloo[0]), MapPoint(llaa[1], lloo[1]), MapPoint(llaa[2], lloo[2]), MapPoint(llaa[3], lloo[3])]]
    MapView1.Map.Center = MapPoint.GetCenter(mmpp[0])
+
<FONT Color=gray>' ''Volendo si potrebbe anche porre al centro della mappa il poligono disegnato - ad esempio - sulla base delle prime coordinate impostate (ossia del primo vertice impostato):''
 +
  ' '''MapView1.Map.Center = MapPoint.GetCenter(mmpp[0])'''</font>
 
   Endif
 
   Endif
 
   
 
   
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub MapView1_MouseUp()
+
  Public Sub MapView1_MouseUp()
 
   
 
   
 
   If Not Mouse.Right Then Return
 
   If Not Mouse.Right Then Return
 +
  If llaa.Count < 4 Then Return
 
   
 
   
   If Object.IsValid(mmpp) Then
+
   With MapView1
    With MapView1
 
 
  <FONT Color=gray>' ''Si usa dunque il Metodo ".AddPolygon()", per disegnare sulla "MapView" il poligono, e gli si passa il vettore bidimensionale "mmpp[][]":''</font>
 
  <FONT Color=gray>' ''Si usa dunque il Metodo ".AddPolygon()", per disegnare sulla "MapView" il poligono, e gli si passa il vettore bidimensionale "mmpp[][]":''</font>
      .Map.AddShape("polygon").<FONT Color=#B22222>AddPolygon</font>("polygon", mmpp, Color.Red, 1, Line.DashDot)
+
    .Map.AddShape("polygon").<FONT Color=#B22222>AddPolygon</font>("polygon", mmpp, Color.Red, 1, Line.DashDot)
      .Refresh()
+
    .Refresh()
    End With
+
  End With
    mmpp = Null
+
  mmpp = Null
    llaa = Null
+
  llaa = Null
    lloo = Null
+
  lloo = Null
  Endif
 
 
   
 
   
  '''End'''
+
  End
 
+
In quest'altro esempio, cliccando con il tasto destro del mouse si individuano sulla "MapView" i punti delle coordinate che rappresentano la tessera (tile), parte della mappa e contenente il punto ove si è cliccato. Tali coordinate formeranno un poligono quadrato.
In quest'alto esempio, cliccando con il tasto destro del mouse si individuano sulla "MapView" i punti delle coordinate che rappresentano la tessera (tile), parte della mappa e contenente il punto ove si è cliccato. Tali coordinate formeranno un poligono quadrato.
 
 
  Private MapView1 As MapView
 
  Private MapView1 As MapView
 
  Private mmpp As <FONT Color=#B22222>MapPoint[][]</font>
 
  Private mmpp As <FONT Color=#B22222>MapPoint[][]</font>
 
   
 
   
 
   
 
   
  '''Public''' Sub Form_Open()
+
  Public Sub Form_Open()
 
   
 
   
 
   With Me
 
   With Me
Riga 90: Riga 90:
 
   End With
 
   End With
 
    
 
    
  '''End'''
+
  End
 
    
 
    
 
   
 
   
  '''Public''' Sub MapView1_MouseDown()
+
  Public Sub MapView1_MouseDown()
 
    
 
    
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
 
   Dim pt As New Point(Mouse.X, Mouse.Y)
 
   Dim tl As Point
 
   Dim tl As Point
 
   Dim mb As MapBounds
 
   Dim mb As MapBounds
 
+
   
  <FONT Color=gray>' ''Mostra la latitudine e la longitudine del punto ove si è cliccato:''</font>
 
  Me.Text = "Lat. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") &
 
            "  -  Lon. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000")
 
 
 
 
   If Not Mouse.Right Then Return  
 
   If Not Mouse.Right Then Return  
 
  <FONT Color=gray>' ''Individua la tessera (tile) della mappa che comprende il punto ove si è cliccato:''</font>
 
  <FONT Color=gray>' ''Individua la tessera (tile) della mappa che comprende il punto ove si è cliccato:''</font>
Riga 109: Riga 105:
 
    
 
    
 
  <FONT Color=gray>' ''Al Metodo ".AddPolygon()" si dovrà poi passare un vettore bidimensionale "MapPoint[][]":''</font>
 
  <FONT Color=gray>' ''Al Metodo ".AddPolygon()" si dovrà poi passare un vettore bidimensionale "MapPoint[][]":''</font>
   mmpp = [[MapPoint(mb.North, mb.Est), MapPoint(mb.North, mb.West), MapPoint(mb.South, mb.West), MapPoint(mb.South, mb.Est)], Null]
+
   mmpp = &#091;[MapPoint(mb.North, mb.Est), MapPoint(mb.North, mb.West), MapPoint(mb.South, mb.West), MapPoint(mb.South, mb.Est)]]
 
    
 
    
   MapView1.Map.Center = MapPoint.GetCenter(mmpp[0])
+
<FONT Color=gray>' ''Mostra la latitudine e la longitudine del punto ove si è cliccato, nonché i numeri identificativi (x, y) della tessera corrispondente a quel punto:''</font>
 +
   Me.Text = "Lat. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") &
 +
            "  -  Lon. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000") &
 +
            "  -  Tessera: " & tl
 
    
 
    
  '''End'''
+
  End
 +
 
   
 
   
  '''Public''' Sub MapView1_MouseUp()
+
  Public Sub MapView1_MouseUp()
 
   
 
   
 
   If Not Mouse.Right Then Return  
 
   If Not Mouse.Right Then Return  
Riga 125: Riga 125:
 
   End With
 
   End With
 
   
 
   
  '''End'''
+
  End

Versione attuale delle 10:21, 30 dic 2023

Il Metodo ".AddPolygon()" del Metodo ".AddShape()" della Classe "Map" consente di creare poligoni (da tre lati in su).

Esso si serve di un vettore bidimensionale di tipo "MapPoint" contenente tre o più Oggetti di tale tipo. All'interno di tale vettore bidimensionale è possibile usare anche la Classe "MapPoint" come statica.
La quantità di Oggetti o di Classi statiche di tipo "MapPoint" determina la quantità di angoli costituenti il poligono che verrà disegnato sulla "MapView".

Mostriamo un esempio, nel quale, cliccando con il tasto destro su quattro punti diversi sulla mappa, si disegnerà un poligono di quattro lati:

Private MapView1 As MapView
Private llaa As Float[]
Private lloo As Float[]
Private mmpp As 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("GoogleMap", "http://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Map.Center = MapPoint(41.8903, 12.49226)
   .Map.Zoom = 14
 End With
 
End
 

Public Sub MapView1_MouseDown()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 Dim lat As Float = MapView1.Map.PixelToMapPointRel(pt).Lat
 Dim lon As Float = MapView1.Map.PixelToMapPointRel(pt).Lon
 
' Mostra la latitudine e la longitudine del punto ove si è cliccato:
 Me.Text = "Lat. " & Format(lat, "0.000000") &
           "  -  Lon. " & Format(lon, "0.000000")
 
 If Not Mouse.Right Then Return

 If Not Object.IsValid(llaa) Then 
   llaa = New Float[]
   lloo = New Float[]
 Endif
 llaa.Push(lat)
 lloo.Push(lon)
 If llaa.count == 4 Then 
' Al Metodo ".AddPolygon()" si dovrà poi passare un vettore bidimensionale "MapPoint[][]":
   mmpp = [[MapPoint(llaa[0], lloo[0]), MapPoint(llaa[1], lloo[1]), MapPoint(llaa[2], lloo[2]), MapPoint(llaa[3], lloo[3])]]
' Volendo si potrebbe anche porre al centro della mappa il poligono disegnato - ad esempio - sulla base delle prime coordinate impostate (ossia del primo vertice impostato):
 ' MapView1.Map.Center = MapPoint.GetCenter(mmpp[0])
 Endif

End


Public Sub MapView1_MouseUp()

 If Not Mouse.Right Then Return
 If llaa.Count < 4 Then Return

 With MapView1
' Si usa dunque il Metodo ".AddPolygon()", per disegnare sulla "MapView" il poligono, e gli si passa il vettore bidimensionale "mmpp[][]":
   .Map.AddShape("polygon").AddPolygon("polygon", mmpp, Color.Red, 1, Line.DashDot)
   .Refresh()
 End With
 mmpp = Null
 llaa = Null
 lloo = Null

End

In quest'altro esempio, cliccando con il tasto destro del mouse si individuano sulla "MapView" i punti delle coordinate che rappresentano la tessera (tile), parte della mappa e contenente il punto ove si è cliccato. Tali coordinate formeranno un poligono quadrato.

Private MapView1 As MapView
Private mmpp As 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("GoogleMap", "http://mt0.google.com/vt/lyrs=s&hl=&x={x}&y={y}&z={z}")
   .Map.Center = MapPoint(41.8903, 12.49226)
   .Map.Zoom = 14
 End With
 
End
 

Public Sub MapView1_MouseDown()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 Dim tl As Point
 Dim mb As MapBounds

 If Not Mouse.Right Then Return 
' Individua la tessera (tile) della mappa che comprende il punto ove si è cliccato:
 tl = Geo.MapPointToTile(MapView1.Map.PixelToMapPointRel(pt), MapView1.Map.Zoom)
 mb = Geo.TileBounds(tl.X, tl.Y, MapView1.Map.Zoom)
 
' Al Metodo ".AddPolygon()" si dovrà poi passare un vettore bidimensionale "MapPoint[][]":
 mmpp = [[MapPoint(mb.North, mb.Est), MapPoint(mb.North, mb.West), MapPoint(mb.South, mb.West), MapPoint(mb.South, mb.Est)]]
 
' Mostra la latitudine e la longitudine del punto ove si è cliccato, nonché i numeri identificativi (x, y) della tessera corrispondente a quel punto:
 Me.Text = "Lat. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lat, "0.000000") &
           "  -  Lon. " & Format(MapView1.Map.PixelToMapPointRel(pt).Lon, "0.000000") &
           "  -  Tessera: " & tl
 
End


Public Sub MapView1_MouseUp()

 If Not Mouse.Right Then Return 
 
 With MapView1
' Si usa dunque il Metodo ".AddPolygon()", per disegnare sulla "MapView" il poligono, e gli si passa il vettore bidimensionale "mmpp[][]":
   .Map.AddShape("polygon").AddPolygon("polygon", mmpp, Color.Red, 1, Line.DashDot)
   .Refresh()
 End With

End