Utilizzare in una MapView mappe fornite secondo lo standard WMS (Web Map Service)

Da Gambas-it.org - Wikipedia.

Come è noto, il Componente gb.map di Gambas è in grado di ottenere e gestire mappe predefinite di servizi WMTS (Web Map Tile Service) che utilizzano il sistema di coordinate EPSG:4326.


Oltre ai servizi WMTS, il componente può anche ottenere dati da servizi WMS (Web Map Service), ma ciò richiede più parametrizzazione.
Esempi di questi casi sono:

............


I servizi WMTS e WMS sono definiti dall'Open Geospatial Consortium (OGC) ed è stabilito che per il WMTS, il livello di zoom 1 è un mosaico di 2x2 tessere, il livello 2 di 4x4, e così via, ed è quello che contempla il Componente gb.map. Ma definisce anche un'altra normativa in cui il livello 1 di zoom è un mosaico di 4x2 tessere, il livello 2 di 8x4 tessere, e così via. Alcuni server hanno questa seconda normativa e falliscono nel loro uso con il Componente gb.map.

E' bene ricordare che, anche se sono servizi liberi, è opportuno riconoscere l'autore delle informazioni con la proprietà Copyright.


Procedura per impostare correttamente il codice per visualizzare le mappe da un servizio WMS

Innanzitutto bisogna individuare un servizio WMS che mette a disposizione mappe (che solitamente rappresentano porzioni di territorio).
Qui prenderemo - come esempio - le mappe relative alla Carta Topografica d'Italia in scala 1:25.000, edita dall'I.G.M., e messe a disposizione del Servizio Geologico d'Italia dell'I.S.P.R.A., e raggiungibile al seguente indirizzo web:

http://portalesgi.isprambiente.it/en/categorie-servizi-wms

Cliccheremo all'interno della pagina del Geoportale dell'I.S.P.R.A. sul collegamento "Raster Data", raggiungibile anche al seguente indirizzo web:

http://portalesgi.isprambiente.it/lista-servizi-wms/Raster%20Data

Cercheremo la mappa prescelta (in questo nostro esempio sarà la mappa 1:25000 della Regione Lazio, che si troverà nella lista al di sotto della voce "Raster Topografia IGM 1:25.000".
E' fondamentale visualizzare e prendere cognizione delle "capacità" della mappa da utilizzare. Pertanto nel nostro esempio cliccheremo sul collegamento "GetCapabilities" sulla destra della riga relativa alla mappa della Regione Lazio.
All'interno della pagina viene mostrato un codice in linguaggio "xml".
Innanzitutto si cercherà l'URL del ServerMap, che si troverà all'interno dell'informazione individuata dall'etichetta <OnlineResource ....>:

http://sgi2.isprambiente.it/arcgis/services/raster/igm25k_lazio_wgs/ImageServer/WMSServer

Nel codice Gambas si dovranno inserire le informazioni:
- l'informazione contenuta nel livello <Name> dell'etichetta <Service>:

<Name>WMS</Name>

- l'informazione <GetMap> quale sottolivello dell'etichetta <Request>.
Si cercherà poi l'etichetta <Layer>, che contiene le informazioni dei vari strati, e in questo caso si trova un livello con etichetta <Title>:

<Title>igm25k_lazio_wgs</Title>

, con etichetta <Title>, ma senza l'etichetta <Name>) che contiene altri livelli, questi sì con etichetta Name>: "AU.Administrativeunit", "GN.Geographicalnames" e "PS.Protectedsite". Nella successiva etichetta <Abstract> è riportata una breve sintesi del contenuto:

<Abstract>Carta topografia regione lazio scala 1:25.000</Abstract>

Altre informazioni necessarie sono:
- l'etichetta <CRS>, che indica quale sistema geografico è utilizzato dalla mappa. Si può notare che vi sono diversi sistemi (individuati con l'etichetta <CRS>) supportati dalla mappa. Si può scegliere uno qualsiasi, noi preferiamo il sistema EPSG:4326:

<CRS>EPSG:4326</CRS>

- l'etichetta <BoundingBox ....>, che specifica i limiti dell'intera mappa che sarà mostrata.
Bisogna individuare in tal caso i valori conformi al sistema geografico scelto; nel nostro caso "EPSG:4326".
Per il sistema EPSG:4326 vediamo che - nel nostro esempio - i limiti sono:

 <BoundingBox CRS="EPSG:4326" minx="40.781553" miny="11.449740" maxx="42.921401" maxy="14.086235"/>

Notare che le "x" hanno valori di longitudine e che le "y" hanno valori di latitudine (al contrario di quello che potrebbe sembrare !).

- la versione, che dovrà essere cercata all'interno della pagina, e che nel nostro esempio si troverà specificata nella prima riga:

<WMS_Capabilities version="1.3.0" ....>

- l'etichetta <layer>, che rappresenta lo strato da visualizzare. Nel nostro caso verrà presa dal sub-livello "<Name>" dell'etichetta "<layer>":

igm25k_lazio_wgs

- l'etichetta format, che rappresenta il formato dell'immagine esportata. Vi possono essere diversi formatp immagine. Nel nostro caso si imposterà "image/png".


Nel codice Gambas si dovranno anche impostare:
- l'argomento bbox: parte variabile dell'url secondo la porzione della mappa che visualizziamo. Poiché le "x" hanno longitudine e le "y" la latitudine, imposteremo con: "{lat2},{lon},{lat},{lon2}".

- gli argomenti "width" e "height": che rappresentano la dimensione in pixel di ogni tile immagine risultante (solitamente questa dimnesione è 256x256; ed è la dimensione supportata dal Componente gb.map).


Va sottolineato che nel codice Gambas va posto a "True" la proprietà ".UseWebMapService" della Classe nascosta "_MapTile".

Un esempio pratico di codice è quello mostrato nel paragrafo seguente, nel quale si mostrerà la mappa 1:25000 della Regione Lazio, basata sulle carte I.G.M., e fornita dal Servizio Geologico d'Italia dell'I.S.P.R.A..

Usare le mappe topografiche IGM 1:25000 di ciascuna Regione, fornite dal Servizio Geologico d'Italia dell'I.S.P.R.A.

Mostriamo un esempio pratico, usando le carte topografiche 1:25000, edite dall'I.G.M. e messe a disposizione dal Servizio Geologico d'Italia dell'I.S.P.R.A., relative all'intero territorio della Regione Lazio:

Private mv As MapView
Private mn1 As Menu
Private mn2 As Menu


Public Sub Form_Open()
 
 Dim tile As _MapTile
 
 With Me
   .W = Screen.AvailableWidth
   .H = Screen.AvailableHeight
 End With
 
 With mn1 = New Menu(Me)
   .Caption = "Lat. "
 End With
 With mn2 = New Menu(Me)
   .Caption = " Lon. "
 End With
 
 With mv = New MapView(Me) As "MapView1"
   .X = 0
   .Y = 0
   .W = Me.W
   .H = Me.H - (Me.H * 0.05)
   .Background = Color.Violet
   .Map.Zoom = 14
   .Map.Center = MapPoint(41.890250, 12.492295)
 End With
 
 With tile = mv.Map.AddTile("Italia Lazio", "http://sgi2.isprambiente.it/arcgis/services/raster/igm25k_lazio_wgs/ImageServer/WMSServer?")
   .MaxBounds = MapBounds(MapPoint(40.781553, 11.449740), MapPoint(42.921401, 14.086235))
   .UseWebMapService = True
   .Copyright = "I.S.P.R.A. - Servizio Geologico d'Italia - http://portalesgi.isprambiente.it/it"
   .WMSArgs!service = "WMS"
   .WMSArgs!request = "GetMap"
   .WMSArgs!version = "1.3.0"
   .WMSArgs!layers = "igm25k_lazio_wgs"
   .WMSArgs!crs = "EPSG:4326"
   .WMSArgs!bbox = "{lat2},{lon},{lat},{lon2}"
   .WMSArgs!format = "image/png"
   .WMSArgs!width = 256
   .WMSArgs!height = 256
 End With
 
End
 

Public Sub MapView1_MouseUp()
 
 Dim pt As New Point(Mouse.X, Mouse.Y)
 
' Otteniamo le coordinate geografiche del punto della carta topografica sul quale si è cliccato con il mouse:
 mn1.Caption = "Lat. " & CStr(mv.Map.PixelToMapPointRel(pt).Lat)
 mn2.Caption = " Lon. " & CStr(mv.Map.PixelToMapPointRel(pt).Lon)
  
End


Note

Pagina in costruzione !