La puntata di oggi del nostro blog sarà rivolta a chi ha un pò di dimestichezza con lo scripting ed ha interesse nell’eseguire automazioni. In questo caso non si tratta propriamente di automazioni perché con gli strumenti di Arcgis non sarebbe possibile eseguire l’operazione di estrazione degli attributi dal popup di un KML.

Andremo a vedere come aggiungere librerie al nostro Python in modo da estendere le funzionalità ed utilizzeremo uno strumento molto comodo per chi è alle prime armi o vuole eseguire in debug il proprio codice con un riscontro grafico dei risultati: il Python Notebook. Questo strumento presente all’interno di ArcGIS PRO consente di creare un documento con testo, commenti, immagini e codice in maniera user-friendly. Spesso si è spaventati dall’interfaccia di scrittura ed esecuzione degli script, il Notebook vuole superare questo scoglio eseguendo un ambiente interattivo di Python (denominato IPython) basato sul framework Jupyter.

Il debug è l’esecuzione del nostro codice riga per riga così da soffermarsi a vedere i risultati parziali e indagare meglio i possibili errori.

Il Problema: Estrarre gli attributi da un KML

Partiamo identificando il problema che ci ha fatto sviluppare uno script. Ci è stato consegnato un KMZ (archivio compresso di file KML) con diverse geometrie e un popup con degli attributi. Il formato KML/KMZ è utilizzato da Google per mostrare dati geografici via web, non è un formato nativo GIS anche se, come vedremo, può essere letto e convertito.

Attraverso la nuova versione di Google Earth web possiamo aprire il file e vedere com’è strutturato. Come anticipato in precedenza, questo file può essere aperto e convertito in Arcgis PRO tramite il comando “KML to Layer”, l’unico problema è che gli attributi del popup che vediamo in figura vengono trasferiti come file HTML essendo un formato di interscambio ideato per il web. Riportiamo un estratto a titolo d’esempio:

<html xmlns:fo=”http://www.w3.org/1999/XSL/Format” xmlns:msxsl=”urn:schemas-microsoft-com:xslt”>
<head>
<META http-equiv=”Content-Type” content=”text/html”>
<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″>
</head>
<body style=”margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;”>
<table style=”font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px”>
<tr style=”text-align:center;font-weight:bold;background:#9CBCE2″>
<td>2</td>
</tr>
<tr>
<td>
<table style=”font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px”>
<tr>
<td>numero</td>
<td>2</td>
</tr>
<tr bgcolor=”#D4E4F3″>
<td>indirizzo</td>
<td>Via Pasubio/Fronte civ. 40</td>
</tr>
<tr>
<td>posizione_planimetria</td>
<td>SI</td>
</tr>
<tr bgcolor=”#D4E4F3″>
<td>tipo_botola</td>
<td>0</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>

Come si può vedere il popup viene composto attraverso dei TAG <td> dove viene riportato il nome dell’attributo (evidenziato in rosso) seguito dal relativo valore (in verde). Il nostro obiettivo sarà quello di convertire questi TAG in campi della feature class e compilare gli attributi con il rispettivo valore.

Aggiungere librerie a Python

Python è il cervello di ArcGIS, ogni comando che eseguiamo da interfaccia grafica ha un codice equivalente che appartiene ad una libreria. La maggior parte dei comandi fanno parte della libreria arcpy sviluppata appositamente da ESRI. In realtà Python offre molte più funzioni di quelle proposte all’interno del software ArcGIS PRO ed è possibile integrarle installando librerie esterne, nel nostro caso utilizzeremo Beautiful Soup un modulo sviluppato per riconoscere i TAG e classificarli, operazione che prende il nome di parsing.

Per installare un nuovo modulo dobbiamo andare nella ribbon Project -> Python, qui potremo vedere i pacchetti che sono già presenti nella versione di Python attiva.

E’ possibile utilizzare Jupiter Notebook con l’ambiente Python così come viene fornito con ArcGIS Pro, ma se vogliamo installare nuovi moduli esterni è necessario clonare il nostro ambiente, anche per evitare che venga corrotto nella fase di installazione rendendo il programma inutilizzabile. Premendo “Manage Environments” comparirà una finestra che ci mostra gli ambienti presenti, se non avete mai fatto questa operazione avrete solamente l’ambiente di default denominato “arcgispro-py3” . Premendo il tasto “Clone”, con qualche minuto di attesa, verrà creata una copia dell’ambiente che potremo attivare e modificare a nostro piacimento.

Riavviato il software i nostri cambiamenti saranno effettivi e ritornando nella finestra del “Python Package Manager” potremo installare il modulo desiderato avendo l’accortezza di verificare che il nostro nuovo ambiente clonato sia quello attivo. Sotto il bottone “Add Packages” potremo cercare “beautifulsoap4” e procedere con l’installazione.

Python Notebook

Come abbiamo già visto in articoli precedenti, in ArcGIS PRO è possibile sviluppare ed eseguire script che automatizzano operazioni. Spesso però è necessario installare un editor appropriato, collegarlo alla corretta versione di Python ed eseguirlo senza avere un riscontro grafico delle proprie istruzioni. Attraverso Notebook invece vengono superati tutti questi limiti perchè abbiamo uno strumento interno al software che ci permette di scrivere del codice accompagnato da testo e immagini che lo descrivono, eseguirlo una riga per volta vedendo il risultato delle operazioni direttamente in mappa oltre che nella finestra Python.

Per aprire un Notebook bisogna andare nella ribbon Analysis -> Python -> Python Notebook. Nel catalog comparirà una nuova cartella con all’interno il nostro file in formato .ipynb. La creazione del nostro script sarà molto semplice e guidata: premendo il tasto “+” o andando nella tab “Insert” potremo aggiungere nuove celle al nostro documento e potremo scegliere se aggiungere una cella testuale (Markdown) un titolo (Heading) oppure del codice (Code) scegliendo tra le opzioni nel menù a tendina.

Nel nostro caso ho aggiunto un titolo “Script: Add Field from KMZ” con un testo che ricorda di eseguire il comando “KMZ to Layer” prima dell’esecuzione dello script. In seguito ho inserito il codice di mio interesse partendo sempre dall’importazione dei moduli che andrò ad utilizzare. Come possiamo vedere, oltre all’onnipresente modulo arcpy, ho importato anche bs4 (beautifulsoap4) e itertools (modulo di sistema già presente) che andrò a richiamare per utilizzare le loro funzioni.

 Il Codice

Di seguito potete scaricare il notebook contenente il codice per poter replicare l’operazione esposta nell’articolo. Per caricare il file in ArcGIS PRO bisogna andare nella cartella “Notebooks” all’interno del catalog, selezionarla con il tasto destro e scegliere “Add Notebook

Field_KMZ

Le prime righe del codice sono riservate all’importazione dei moduli contenenti le funzioni che saranno utilizzate nel codice. In seguito bisogna aggiungere il percorso al layer frutto della conversione del KML.

Nel secondo blocco viene inizializzato il cursore e successivamente abbiamo due cicli:

  1. Il primo ciclo è eseguito su ogni record del nostro layer dove verrà preso il campo PopupInfo contenente il codice HTML da scomporre. Attraverso il modulo di BeautifulSoap vengono riconosciuti e classificati tutti i tag
  2. Il secondo ciclo invece è eseguito su tutti i tag che vengono ritrovati all’interno del campo PopupInfo. Il primo tag è il nome del campo mentre il seguente sarà il contenuto, per questo motivo viene eseguito un ciclo con step di due elementi.

Per terminare viene aggiornato il cursore ed eliminato l’oggetto utilizzato per eseguire i cicli.

Conclusioni

Jupyter Notebook è stato creato per rendere più semplice mostrare il proprio lavoro di programmazione e per consentire ad altri utenti di interpretare in maniera più intuitiva il codice scritto. Questo strumento consente di combinare codice, commenti, contenuti multimediali e visualizzazioni in un documento interattivo che può essere condiviso, riutilizzato e rielaborato. Notebook Jupyter è la soluzione ideale per chi vuole scrivere script e testarli in tempo reale, visualizzare dati attraverso grafici o fare calcoli matematici. I risultati si possono esportare con pochi clic in diversi formati o essere inviati direttamente per e-mail.

Leave a Comment