tile_Service

Tramite i Servizi Tile è possibile pubblicare mappe anche molto complesse su web, estendendo la fruizione dei propri dati e progetti GIS verso l’esterno, massimizzando le performance.

In questo post vedremo come pubblicare un documento ArcMap su ArcGIS Online (AGOL) come servizio tile, esattamente come vengono servite le basemap ESRI.

tile_Service

Esistono vari modi di pubblicare un servizio Tiled su AGOL. Il più immediato è quello da File -> Share As… -> Service e poi si segue la procedura guidata in maniera abbastanza lineare attivando nelle Capabilities l’opzione Tiled Mapping. Questo metodo è il più semplice, ma richiede un consumo di crediti (la valuta virtuale di AGOL) per la generazione della cache, dal momento che il processo è a carico dei server di ESRI.

Un altro metodo interessante è quello di sfruttare gli strumenti del Toolset Tile Cache, oppure attivare i Runtime Tools e in particolare lo strumento Tile Package (sempre disponibile da File -> Share As…). Queste ultime due modalità non consumano crediti per la generazione della cache, dal momento che il tutto è fatto sul proprio pc in locale.

In ogni caso, pubblicare dei Tile Service può richiedere anche parecchio tempo se l’estensione della mappa è ampia e i livelli di scala sono molto dettagliati.

Ma facciamo un passo indietro e cerchiamo di capire cos’è un Tile Service

Cos’è un Tile Service

Anzitutto, chiariamo subito che quando si parla di servizi tiled, si parla di immagini. Le mappe pubblicate come servizi tile su ArcGIS Online non sono interrogabili, a meno di collegarle ad un servizio Feature  (ecco come). Esse rappresentano la “fotografia” di una cartografia al momento della sua pubblicazione. Per lo stesso motivo, se il dato cartografico viene aggiornato, non c’è modo di vedere gli aggiornamenti nel servizio tile, a meno di ripubblicare il dato stesso. Una cartografia pubbliata su un portale web GIS come ArcGIS Online è consultabile tramite un browser e una connessione internet, senza necessariamente bisogno di un client desktop come ArcMap. Ma perchè se sono immagini si chiamano servizi “Tile” (che in inglese significa letteralmente “piastrella”)?

Sarà capitato quasi a tutti di usare Google Maps per cercare un indirizzo. In Google Maps, navigando col mouse nella mappa si nota che alcune parti prima di comparire rimangono grigie per qualche attimo. Queste aree hanno forma quadrata (come se fossero delle piastrelle), e piano piano queste “piastrelle” grigie vengono sostituite dalle immagini effettive della mappa come a comporre un puzzle che nell’insieme rappresenta la zona che desideriamo visualizzare.

In pratica un servizio tiled è la rappresentazione di una cartografia sotto forma di immagine suddivisa in tanti riquadri di uguale dimensione. Ogni volta che un client (un utente) accede a un server (ad es. Google Maps), vengono richieste, trasferite e scaricate sul client solo le tile necessarie a ricoprire l’area sulla quale si sta navigando, in funzione della scala di visualizzazione. Man mano che ci si sposta nella mappa, vengono richieste le tile delle aree non ancora precedentemente scaricate, mentre per le aree già visitate non è più necessario il trasferimento di immagini dal server al client, in quanto già salvate nella cache del browser. Ovviamente, più la connessione internet è veloce, minore è l’attesa per la composizione completa del puzzle, ma generalmente i tiles sono così leggeri da rendere la navigazione molto veloce e interattiva anche con reti lente.

Un concetto fondamentale dei servizi Tiled sono i livelli di scala. Nelle mappe web (in quelle di ArcGIS Online ad esempio), si ha l’impressione di zoomare in maniera continua, ma in realtà gli zoom si fermano sempre su intervalli di scala predefiniti, ovvero quelli per cui le immagini tiled sono state realizzate (si parla di schema di tile). Un esempio semplice per chiarire questo concetto: se una mappa viene pubblicata come servizio Tiled per gli intervalli di scala 1:1000 e 1:500, un utente zoomando col mouse si sposterà avanti e indietro sempre in queste due scale precise, mai in una via di mezzo.

Essendo la dimensione delle tile sempre la stessa per intervalli di scala diversi (quella di default in ArcMap è 256×256 pixel), per livelli di scala minori sono necessarie meno tile per ricoprire completamente una certa estensione, mentre per scale via via maggiori il numero di tile cresce esponenzialmente per poter ricoprire lo stesso extent (un po’ come si evince dall’immagine a inizio articolo). Da qui il fatto che più il dettaglio del servizio tile è maggiore, maggiore è la scala, maggiore il numero di tile e di conseguenza, a partità di estensione geografica, maggiore lo spazio di archiviazione su disco. Di fatto, se il livello di scala raddoppia, il numero delle tile del livello più dettagliato è il quadrato di quello precedente.

In sintesi: un servizio Tiled rappresenta la fotografia di una cartografia, suddivisa in piastrelle della stessa dimensione, generate su intervalli di scala prestabiliti, che aumentano di numero in maniera esponenziale in funzione dell’aumento di dettaglio (di scala).

Ora che sappiamo cos’è un Tile Service, vediamo come si pubblica su ArcGIS Online usando ArcMap.

Creazione del Tile Package con ArcMap

E’ possibile trasformare le proprie mappe GIS create con ArcMap in Tile Service pubblicabili e condivisibili tramite ArcGIS Online. Dei vari metodi accennati a inizio articolo, vedremo solo l’ultimo (chiamato Tile Package), che secondo gli autori di questo post è quello migliore sotto molti aspetti: non consuma crediti per la generazione della cache, è semplice, e mantiene la separazione dei layer.

Prima di poterlo sfruttare è necessario andare nel menù Customize -> ArcMap Options…, quindi nella tab Sharing sezione Packaging spuntare la voce Enable ArcGIS Runtime Tools. In questo modo in File -> Share As… sarà comparsa la nuova voce Tile Package.

Runtime_Tools

Tile_Package_01

Il processo genera un pacchetto tile, ovvero un unico file compresso con estensione “.tpk” contenente tutti tiles che rappresentano ciascuna l’immagine di una porzione di mappa ad una certa scala, per tutti i livelli di scala desiderati. Questo pacchetto potrà poi essere caricato su ArcGIS Online direttamente o in un secondo momento, per poi essere decompresso (pubblicato), e diventare disponibile come effettivo Tile Service, navigabile e condivisibile via web.

Cliccando su Tile Package si apre una finestra divisa in più sezioni. La sezione “Tile Package” consente di decidere se salvare il pacchetto (tpk) in una cartella locale, oppure di generarlo e caricarlo direttamente sul proprio account di ArcGIS Online (per questa opzione è necessario aver prima effettuato l’accesso tramite File -> Sign In dal menu principale di ArcMap).

Tile_package_02

La seconda sezione, “Tile Format”, consente di decidere per prima cosa lo schema di tile. Questo definisce quali sono i livelli di scala per cui le tile verranno generate. La maggior parte dei servizi web oggigiorno usa uno schema di tile comune. Quello di ArcGIS Online ad esempio è allineato allo standard utilizzato anche dalle mappe Bing e Google. Una scelta indicata per pubblicare i primi servizi tile è quella di scegliere proprio questo schema di tile, in modo da rendere il proprio servizio il più possibile interoperabile con gli altri servizi esistenti nel web. Con questo schema è possibile avere tile fino alla scala di circa 1:1000, ma recentemente i livelli di scala dellle basemap ESRI si spingono fino a 1:70 (si veda un esempio a questo link). Se si desidera avere maggiore dettaglio, o usare degli intervalli personalizzati, è possibile crearsi un proprio schema di tile tramite lo strumento Generate Tile Cache Tiling Scheme (ma lo sconsigliamo fortemente, a meno che non sappiate esattamente a cosa andate incontro!). In alternativa, forniamo per convenienza l’xml con lo schema di tile ArcGIS Online fino alla scala 1:70 che potete utilizzare per pubblicare servizi tile che necessitano di un grado di dettaglio elevato (copia e incolla il codice a fine articolo in un qualsiasi editor di testo e salvalo in formato xml). Potete scegliere dal menu a tendina della voce “Tiling scheme” l’opzione “A tiling scheme file” e selezionare questo xml anzichè “ArcGIS Online / Bing Maps / Google Maps”.

ATTENZIONE: Le mappe di ArcGIS Online offrono zoom per i livelli impostati nel layer usato come mappa di base. Per questo motivo, servizi tile con livelli di scala diversi da quelli della mappa di base scelta non saranno visibili. Inoltre, ArcGIS Online non è in grado di fare conversione di sistemi di coordinare on-the-fly, quindi un servizio pubblicato con un sistema di coordinate diverso da quello della mappa di base non sarà visibile nella mappa web. Il sistema di riferimento delle mappe di base ESRI è il Web Mercator (codice EPSG: 3857 oppure 102100). Una consiglio: anzichè riproettare tutti i layer di un progetto, impostare il sistema di coordinate del Data Frame su Web Mercator e pubblicare il servizio Tiled.

In generale poter sovrapporre il proprio servizio Tiled con una o più mappe di base è un valore aggiunto importante e fortemente consigliato.

Il secondo parametro è la scelta del formato delle immagini: attenzione a scegliere quello più idoneo, perche se ci sono trasparenze JPG non le supporta, mentre generalmente PNG dovrebbe andare bene per tutte le situazioni.

L’ultimo parametro di questa sezione determina fino a che livello di dettaglio dello schema di tile prescelto generare la cache. Questo significa che le piastrelle verranno costruite per i livelli dallo 0 (il livello meno dettagliato) a quello scelto in questa fase (nel caso dell’immagine seguente si arriva fino al livello di dettaglio massimo, ovvero il 20).

Tile_package_03

In ultimo, la sezione “Item Description” ha una serie di parametri che vanno compilati obbligatoriamente, quali il riassunto, l’inserimento di una o più tag, e una descrizione del servizio da pubblicare (tutte informazioni che poi renderanno più facile comprendere lo scopo del servizio da parte di eventuali utenti terzi). Opzionalmente, è anche possibile inserire i crediti e eventuali limiti di utilizzo che saranno poi visibili dal portale ArcGIS Online e che potrebbero servire in caso si voglia pubblicare dei dati verso l’esterno ma limitandone l’utilizzo (per esempio) alla sola consultazione.

Tile_package_04

Una volta terminato l’inserimento di tutti i parametri, è possibile fare un click su “Analyze” per verificare che non vi siano problemi nella propria mappa prima della pubblicazione e quindi generare il Tile Package col tasto “Share”.

Esistono tre livelli di messaggio nella finestra che si apre col tasto Analyze:

  • Info: il meno grave, denota informazioni utili al processo di pubblicazione.
  • Warning: suddiviso in tre livelli di attenzione (high, medium, low). Consente di ottimizzare o risolvere problematiche relative alla pubblicazione.
  • Error: messaggio di errore. Tutti gli errori vanno risolti per poter pubblicare un servizio.

Upload e pubblicazione su ArcGIS Online

Se alla prima sezione è stato scelto di salvare il pacchetto in locale, per fare l’upload su ArcGIS Online lo strumento in ArcMap è lo Share Package, in Data Management Tools -> Package Toolset.  Una volta effettuato l’accesso via browser al proprio account AGOL (https://www.arcgis.com/home/signin.html), ne “I miei contenuti” sarà disponibile un elemento di tipo “Tile Package”.

agol_tpk

Essendo un file compresso, è necessario decomprimerlo (pubblicarlo) per vedere effettivamente comparire il proprio Tile Service sul proprio AGOL. La procedura è semplice: si aprono i dettagli dell’elemento, si fa click su “Pubblica” e si attende il termine della procedura (potrebbe volerci anche parecchio tempo, a seconda della grandezza del tpk).

agol_tpk_publish

Alla fine, avremo ottenuto un servizio Tiled da poter usare nelle mappe web di ArcGIS Online.

agol_tileservice

In conclusione, cerchiamo di chiarire alcuni aspetti per cui scegliere di pubblicare un servizio Tiled.

Quando utilizzare un servizio Tiled

  • quando si desidera pubblicare una mappa che contiene layer complessi (es. tante geometrie (>1000), simbologie complesse categorizzate su più campi)
  • quando si vuole pubblicare un servizio da utilizzare come sfondo (mappa di base) per i propri dati

Pro e Contro rispetto ai Feature Service.

PRO CONTRO
  • Servizio molto più prestante perché il motore cartografico non va a leggere il dato ma risponde inviando i tiles pregenerati
  • Possibilità di pubblicare dati raster
  • Unico modo per bypassare i limiti di pubblicazione di numero di geometrie su web
  • Il servizio preserva l’aspetto e la simbologia di una mappa
  • Pubblicazione un po’ più complessa, specialmente se fatta con intervalli di scala personalizzati
  • Essendo i tile delle immagini, non si può interrogare il dato (a meno di non collegarlo a un Feature Service)
  • I Tile sono immagini statiche, quindi è richiesto di ripetere tutta la procedura in caso di variazioni sui dati.

Di seguito, il codice dello schema di tile ArcGIS Online fino alla scala 1:70 (copia e incolla il codice in un qualsiasi editor di testo e salvalo in formato xml per poterlo utilizzare).

<?xml version="1.0" encoding="UTF-8"?>
<CacheInfo xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.4" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="typens:CacheInfo">
 <TileCacheInfo xsi:type="typens:TileCacheInfo">
 <SpatialReference xsi:type="typens:ProjectedCoordinateSystem">
 <WKT>PROJCS["WGS_1984_Web_Mercator_Auxiliary_Sphere",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Mercator_Auxiliary_Sphere"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",0.0],PARAMETER["Standard_Parallel_1",0.0],PARAMETER["Auxiliary_Sphere_Type",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",3857]]</WKT>
 <XOrigin>-20037700</XOrigin>
 <YOrigin>-30241100</YOrigin>
 <XYScale>148923141.92838538</XYScale>
 <ZOrigin>-100000</ZOrigin>
 <ZScale>10000</ZScale>
 <MOrigin>-100000</MOrigin>
 <MScale>10000</MScale>
 <XYTolerance>0.001</XYTolerance>
 <ZTolerance>0.001</ZTolerance>
 <MTolerance>0.001</MTolerance>
 <HighPrecision>true</HighPrecision>
 <WKID>102100</WKID>
 <LatestWKID>3857</LatestWKID>
 </SpatialReference>
 <TileOrigin xsi:type="typens:PointN">
 <X>-20037508.342787</X>
 <Y>20037508.342787</Y>
 </TileOrigin>
 <TileCols>256</TileCols>
 <TileRows>256</TileRows>
 <DPI>96</DPI>
 <PreciseDPI>96</PreciseDPI>
 <LODInfos xsi:type="typens:ArrayOfLODInfo">
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>0</LevelID>
 <Scale>591657527.591555</Scale>
 <Resolution>156543.03392800014</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>1</LevelID>
 <Scale>295828763.79577702</Scale>
 <Resolution>78271.516963999937</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>2</LevelID>
 <Scale>147914381.89788899</Scale>
 <Resolution>39135.758482000092</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>3</LevelID>
 <Scale>73957190.948944002</Scale>
 <Resolution>19567.879240999919</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>4</LevelID>
 <Scale>36978595.474472001</Scale>
 <Resolution>9783.9396204999593</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>5</LevelID>
 <Scale>18489297.737236001</Scale>
 <Resolution>4891.9698102499797</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>6</LevelID>
 <Scale>9244648.8686180003</Scale>
 <Resolution>2445.9849051249898</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>7</LevelID>
 <Scale>4622324.4343090001</Scale>
 <Resolution>1222.9924525624949</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>8</LevelID>
 <Scale>2311162.2171550002</Scale>
 <Resolution>611.49622628137968</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>9</LevelID>
 <Scale>1155581.108577</Scale>
 <Resolution>305.74811314055756</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>10</LevelID>
 <Scale>577790.55428899999</Scale>
 <Resolution>152.87405657041106</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>11</LevelID>
 <Scale>288895.27714399999</Scale>
 <Resolution>76.437028285073239</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>12</LevelID>
 <Scale>144447.638572</Scale>
 <Resolution>38.21851414253662</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>13</LevelID>
 <Scale>72223.819285999998</Scale>
 <Resolution>19.10925707126831</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>14</LevelID>
 <Scale>36111.909642999999</Scale>
 <Resolution>9.5546285356341549</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>15</LevelID>
 <Scale>18055.954822</Scale>
 <Resolution>4.7773142679493699</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>16</LevelID>
 <Scale>9027.9774109999998</Scale>
 <Resolution>2.3886571339746849</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>17</LevelID>
 <Scale>4513.9887049999998</Scale>
 <Resolution>1.1943285668550503</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>18</LevelID>
 <Scale>2256.994353</Scale>
 <Resolution>0.59716428355981721</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>19</LevelID>
 <Scale>1128.4971760000001</Scale>
 <Resolution>0.29858214164761665</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>20</LevelID>
 <Scale>564.24858800000004</Scale>
 <Resolution>0.14929107082380833</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>21</LevelID>
 <Scale>282.12429400000002</Scale>
 <Resolution>0.074645535411904163</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>22</LevelID>
 <Scale>141.06214700000001</Scale>
 <Resolution>0.037322767705952081</Resolution>
 </LODInfo>
 <LODInfo xsi:type="typens:LODInfo">
 <LevelID>23</LevelID>
 <Scale>70.531073500000005</Scale>
 <Resolution>0.018661383852976041</Resolution>
 </LODInfo>
 </LODInfos>
 </TileCacheInfo>
 <TileImageInfo xsi:type="typens:TileImageInfo">
 <CacheTileFormat>MIXED</CacheTileFormat>
 <CompressionQuality>75</CompressionQuality>
 <Antialiasing>false</Antialiasing>
 <BandCount>1</BandCount>
 <LERCError>0</LERCError>
 </TileImageInfo>
 <CacheStorageInfo xsi:type="typens:CacheStorageInfo">
 <StorageFormat>esriMapCacheStorageModeCompact</StorageFormat>
 <PacketSize>128</PacketSize>
 </CacheStorageInfo>
</CacheInfo>

Leave a Comment