-----------------------------------

Acquista i software ArcGIS tramite Studio A&T srl, rivenditore autorizzato dei prodotti Esri.

I migliori software GIS, il miglior supporto tecnico!

I migliori software GIS, il miglior supporto tecnico!
Azienda operante nel settore GIS dal 2001, specializzata nell’utilizzo della tecnologia ArcGIS e aderente ai programmi Esri Italia Business Network ed Esri Partner Network

-----------------------------------



domenica 15 gennaio 2012

Shapefile (il vecchio) e ArcGIS.com (il nuovo)

Come avete potuto leggere o avete già provato,  è possibile aggiungere feature alla nostra mappa in ArcGIS.com tramite file di testo con separatori, file GPS (.gpx) e shapefile (compresso in un file zip).
Il visualizzatore di mappa di ArcGIS.com aggiunge informazioni di localizzazione, visualizza feature sulla mappa per ogni dato nel file e memorizza l'informazione nella mappa web come un layer.
Un volta aggiunta la feature class dal file nella mappa, è possibile modificare le proprietà del layer che è stato creato.  Ad esempio è possibile configurare la finestra di pop-up, modificare i simboli, impostare l'intervallo di visibilità, abilitare la modifica della feature class e rimuovere il pop-up. Per modificare le proprietà del layer cliccare su Details, poi su Contents e infine sulla freccia a destra del nome del layer.


Per aggiungere un file alla mappa, aprire il visualizzatore di mappa di ArcGIS.com e cliccare su Add, scegliere Add Layer from File, selezionare il file sul computer e cliccare su Import Layer. Aggiungendo uno shapefile, scegliere di generalizzare le feature per la visualizzazione sul web (è raccomandata) o prendere le feature originali. Il layer è memorizzato con la mappa. Per browser che supportano il drag and drop dell' HTML5, è possibile trascinare il file direttamente sulla mappa.


In questo caso, aggiungiamo lo shapefile delle principali autostrade degli Stati Uniti.
Il nostro caro vecchio shapefile - come sapete - è un formato vettoriale che memorizza posizione, geometria ed attributi delle feature geografiche. E' memorizzato fisicamente mediante un insieme di file che contengono una feature class. Gli shapefile spesso contengono molte geometrie con associati dati e storicamente sono stati utilizzati dalle applicazioni GIS Desktop come ArcGIS Desktop e ArcGIS Explorer. Però, se abbiamo pochi dati nello shapefile - generamente non più 1000 feature - è possibile renderlo disponibile ad altri facendolo visualizzare attraverso il web con un browser: aggiungendolo tramite un file zip contenente i file fisici che memorizzano lo shapefile (file .shp, .shx, .dbf e .prj) sulla mappa che si crea con il visualizzatore di mappa di ArcGIS.com. Quando aggiungiamo uno shapefile, il visualizzatore di mappa di ArcGIS.com lo serializza in formato json ESRI per essere letto velocemente e visualizzato dai web client. Chiaramente, così facendo, siamo in un'ottica file server e quindi una soluzione non scalabile rispetto ad un feature service. Per aiutare ulteriormente le prestazioni di visualizzazione, è possibile scegliere di generalizzare  le feature dello shapefile. La generalizzazione riduce le dimensioni  dello shapefile semplificando le feature ed è spesso adatto per dati da rappresentare a piccole scale. Sì può generalizzare utilizzando applicazioni desktop come ArcGIS Desktop che ArcGIS.com quando aggiungiamo il file alla mappa (vedi immagine precedente).
La generalizzazione di ArcGIS.com riduce la risoluzione del layer shapefile e "spunta" la precisione delle feature. Per maggiori dettagli vedere qui.  La generalizzazione adottata dovrebbe essere un buon compromesso tra mantenere l'informazione e l'accuratezza di visualizzazione delle feature, mentre riduce soprattutto la dimensione dei dati e consente pertanto una veloce visualizzazione sulla mappa. La logica utilizzata da ArcGIS.com è calcolare al volo la dimensione in unità di mappa del pixel nella corrente visualizzazione e impostare questa misura come maxAllowableOffset, poichè il dettaglio è inutile al di sotto del pixel, rimuovendo quindi inutili vertici. Chiaramente se il feature layer è impostato come modificabile, la generalizzazione non verrà applicata perchè la gestione sarebbe un po' più complessa. Shapefile con più di 1000 feature o in alcuni casi anche con meno feature (visualizzazione di errori in fase di caricamento) non possono essere aggiunti nella mappa perchè non adatti ad una visualizzazione veloce su web. L'alternativa è creare un feature service con ArcGIS Server o in futuro con 10.1 sottoscrivendo una subscription ad ArcGIS Online per creare feature service.

Una volta caricato il layer possiamo rinominarlo con Rename utilizzando la finestra di pop-up:



Una volta caricato possiamo, come detto precedentemente, modificare i simboli. In questo esempio ho impostato ad Unique Values: in pratica si visualizza ogni feature utilizzando una particolare caratteristica che la identifica.



A questo punto, la nostra mappa è pronta per essere salvata. Correntemente quindi fa riferimento ad una basemap, ad uno shapefile (operational layer) che abbiamo caricato ed alle impostazioni fatte sul layer basato sullo shape (unique values, label ecc.).  Per la mappa sono presenti comunque anche altre informazioni che possiamo memorizzare, ad esempio i bookmark.

Salviamo la mappa con il pulsante Save ed inseriamo Title, Tags, Summary e indichiamo in quale cartella salvare la definizione della mappa (le cartelle possono essere create in ArcGIS.com per poter suddividere le proprie mappe, applicazioni, layer ecc.). I tag permettono ad altri di cercare la tua mappa mediante le parole chiave che sono state inserite (separare più tag mediante una virgola) mentre il summary è una descrizione per tua mappa. Con Save As faremo invece una copia della definizione della mappa.


Una volta salvata la mappa, possiamo decidere se condividerla con altre persone.


Cliccando su Share possiamo condividere con tutti o uno o più gruppi ai quali ci siamo uniti. Per unirsi ad un gruppo vedi il seguente video:

Anche noi possiamo crearci il nostro gruppo ed invitare altri utenti ad unirsi:


Una volta salvata la mappa è possibile anche modificare le feature del layer.


Per chi è la prima volta che si collega ad ArcGIS.com ricordo che occorre avere un ESRI Global Account (cliccare su Create an Account) e successivamente bisogna registrare l'account in ArcGIS.com (cliccare su Register your ESRI Global Account) . Il link per la registrazione è: https://www.arcgis.com/home/signin.html.

In questo esempio che abbiamo visto tutte le informazioni sono memorizzate su ArcGIS.com (mappa e dati). Vediamo un po' più nel dettaglio come sono memorizzate.

Alla nostra mappa è associato un UUID (identificatore univoco universale). In questo caso per recuperare il nostro item passiamo l'UUID della mappa (cioè l'ID della mappa) creata: b4ad815cb1ec46dcac03ecd8a31c82ff
https://www.arcgis.com/home/item.html?id=b4ad815cb1ec46dcac03ecd8a31c82ff.
Se desideriamo visualizzare la mappa nel viewer messo a disposizione di ArcGIS.com possiamo semplicemente passare l'UUID al parametro webmap.

http://www.arcgis.com/home/webmap/viewer.html?webmap=b4ad815cb1ec46dcac03ecd8a31c82ff



Come parametri possiamo passare anche:
- center
- level
- extent
- baseUrl
- url
- displayslider
- displayscalebar
- displaylegend
- displaydetails
- displaysearch
ecc.
Per maggiori dettagli sui parametri che si possono passare vedere qui.

Per creare una web application possiamo direttamente da ArcGIS.com cliccare su Share.


Con Link to this map possiamo condividere il link alla mappa mediante un URL shortening ad esempio in Twitter e Facebook.

Oppure possiamo inglobarla nel nostro sito, blog, WCMS ecc. mediante il tag IFRAME.

Mentre cliccando su Make a Web Application possiamo creare, utilizzando uno dei tanti template, un'applicazione in javascript utilizzando le API ESRI javascript. Una volta selezionato il template, ArcGIS.com imposterà automaticamente i riferimenti della mappa nel codice javascript - se decidiamo di pubblicarla - salvandola su ArcGIS.com. Per identificare l'applicazione web ArcGIS.com crea un altro UUID: ced2d4e31f9b4afd9d644bb1770b8041.
http://studioat.maps.arcgis.com/apps/OnePane/chrome/index.html?appid=ced2d4e31f9b4afd9d644bb1770b8041&webmap=b4ad815cb1ec46dcac03ecd8a31c82ff

L'alternativa è pubblicarla sul nostro server scaricando il template e cliccando su Download. In questo caso configureremo manualmente l'id della mappa nel template.



Possiamo anche creare una webmap anche direttamente da un json senza passare da ArcGIS.com.
Qui possiamo vederne un esempio (utilizzo di esri.arcgis.utils.createWebMap).

Qui possiamo vedere la definizione della mappa (l'url base è http://www.arcgis.com/sharing/content/items) :
http://www.arcgis.com/sharing/content/items/b4ad815cb1ec46dcac03ecd8a31c82ff?f=pjson

{
  "id""b4ad815cb1ec46dcac03ecd8a31c82ff",
  "item""usa_-_major_highways_1326046703296",
  "itemType""text",
  "owner""ciava.at",
  "uploaded": 1326046716000,
  "modified": 1326046717000,
  "guid"null,
  "name"null,
  "title""USA - Major highways",
  "type""Web Map",
  "typeKeywords": [
    "Web Map",
    "Explorer Web Map",
    "Map",
    "Online Map",
    "ArcGIS Online"
  ],
  "description"null,
  "tags": ["USA Major highways"],
  "snippet""USA - Major highways",
  "thumbnail""thumbnail/ago_downloaded.png",
  "documentation"null,
  "extent": [
    [
      -128.4263,
      23.7584
    ],
    [
      -65.4088,
      51.5041
    ]
  ],
  "lastModified": -1,
  "spatialReference"null,
  "accessInformation"null,
  "licenseInfo"null,
  "culture""it",
  "url"null,
  "access""public",
  "size": 806736,
  "numComments": 0,
  "numRatings": 0,
  "avgRating": 0,
  "numViews": 41
}

Che possiamo 'replicare' in javascript:
 var webmap = {};    
  webmap.item = {  "title":"USA - Major highways", 
    .....
  }; 

Analogamente possiamo fare con i dati della mappa:
Qui possiamo vedere la "serializzazione" del nostro shapefile in formato json ESRI:
http://www.arcgis.com/sharing/content/items/b4ad815cb1ec46dcac03ecd8a31c82ff/data?f=pjson

{
  "operationalLayers": [{
    "id""usa_major_highways_9585",
    "title""USA - Major highways",
    "featureCollection": {
      "showLegend"true,
      "layers": [{
        "layerDefinition": {
          "currentVersion": 10.1,
          "id": 0,
          "name""usa_major_highways",
          "type""Feature Layer",
          "displayField""",
          "description""",
          "copyrightText""",
          "supportsRollbackOnFailure"true,
          "geometryType""esriGeometryPolyline",
          "minScale": 0,
          "maxScale": 0,
          "extent": {
            "xmin": -1.75985065262543E7,
            "ymin": 2424999.05112109,
            "xmax": -7545366.07247812,
            "ymax": 8893656.17013185,
            "spatialReference": {"wkid": 102100}
          },
          "drawingInfo": {
            "renderer": {
              "type""uniqueValue",
              "field1""FULL_NAME",
              "defaultSymbol": {
                "color": [
                  0,
                  0,
                  0,
                  255
                ],
                "width": 2,
                "type""esriSLS",
                "style""esriSLSSolid"
              },
              "uniqueValueInfos": [
                {
                  "value""I 10",
                  "symbol": {
....

Che possiamo impostare in javascript:
 webmap.itemData = {    
               "operationalLayers": [{      
                ...

Se invece desideriamo creare la mappa da id possiamo utilizzare:
var mapDeferred = esri.arcgis.utils.createMap("b4ad815cb1ec46dcac03ecd8a31c82ff""map", {
              mapOptions: {
                slider: true,
                nav:false
              }
            });

Infine abbiamo la possibilità di modificare l'ArcGIS URL mediante arcgisUrl. Il default è http://arcgis.com/sharing/content/items

esri.arcgis.utils.arcgisUrl = http://arcgis.com/sharing/content/items;

E' possibile così impostare il proprio dominio dove è localizzata la nostra mappa (es. http://mydomain/sharing/content/items) ed utilizzare le api di ESRI. Nel 2012 sarà disponibile Portal for ArcGIS che permetterà alle organizzazioni di fare il proprio deployment con le caratteristiche di 'ArcGIS Online' nella propria intrastruttura.
Per connetterti con il tuo smartphone al tuo ArcGIS Server puoi seguire il seguente documento.

Analogamente in Silverlight API e Flex API abbiamo funzionalità per caricare e per gestire webmap.

Infine, volevo sottolineare che ho fatto una breve panoramica ma le funzionalità messe a disposizione da ArcGIS.com - soprattutto con la possibilità dalla 10.1 di poter (tramite subscription) creare servizi direttamente su ArcGIS.com (tiled map service e feature service per ora) - sono tantissime.

3 commenti:

Michele ha detto...

Ciao NicoGis, complimenti per il blog!
E' possibile ottenere lo stesso risultato su un viewer con ArcGIS web API? Intendo selezionare una feature class sul client e trasformarla in feature layer che poi possa essere visualizzata nel viewer tramite rest e ottenere quindi una generalizzazione on the fly.

Ing. Domenico Ciavarella ha detto...

Serializzare in json lato server è abbastanza semplice. Un esempio con gli AO: conversione di un IRecordset in json ESRI:

[code]
public static byte[] ToJson(IRecordSet recordset)
{
IGeometryResultOptions geometryResultOptions = new GeometryResultOptionsClass {
GeneralizeGeometries = true,
DensifyGeometries = true
};
IPropertySet propertySet = new PropertySetClass();
propertySet.SetProperty("GeometryResultOptions", geometryResultOptions);
IJSONWriter writer = new JSONWriterClass();
writer.WriteToString();
IJSONSerializer serializer = new JSONSerializerGdbClass();
serializer.InitSerializer(writer, null);
serializer.WriteObject(recordset, propertySet);
return writer.GetStringBuffer();
}
[/code]

Con arcgis.com nella serializzazione c'è anche la parte layer che potresti ignorare utilizzando solo la geometria/attributi (vedi codice sopra) e poi puoi utilizzare js (vedi http://help.arcgis.com/en/webapi/javascript/arcgis/help/jssamples/ags_createwebmapitem.html )
oppure puoi vedere un esempio in sl:
http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#FeatureLayerFromJson

Ing. Domenico Ciavarella ha detto...

Dimenticavo:
Ci sarà la possibilità di replicare quello che fa ArcGIS Online tramite Portal per ArcGIS (per dettagli http://www.esri.com/news/arcnews/summer11articles/portal-for-arcgis-new-software-product-for-making-maps-sharing-and-collaborating-in-a-secure-environment.html).
Portal per ArcGIS sarà disponibile quando ci sarà la versione ArcGIS 10.1.