{"id":8862,"date":"2021-07-14T08:30:17","date_gmt":"2021-07-14T06:30:17","guid":{"rendered":"https:\/\/gis.oneteam.it\/?p=8862"},"modified":"2021-07-13T17:33:27","modified_gmt":"2021-07-13T15:33:27","slug":"notebook-per-estrarre-gli-attributi-da-un-popup-kml","status":"publish","type":"post","link":"https:\/\/gis.oneteam.it\/index.php\/2021\/07\/14\/notebook-per-estrarre-gli-attributi-da-un-popup-kml\/","title":{"rendered":"Notebook per estrarre gli attributi da un popup KML"},"content":{"rendered":"<p style=\"text-align: justify;\">La puntata di oggi del nostro blog sar\u00e0 rivolta a chi ha un p\u00f2 di dimestichezza con lo <strong>scripting<\/strong> ed ha interesse nell&#8217;eseguire automazioni. In questo caso non si tratta propriamente di automazioni perch\u00e9 con gli strumenti di Arcgis non sarebbe possibile eseguire l&#8217;operazione di estrazione degli attributi dal popup di un <strong>KML<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Andremo a vedere come aggiungere librerie al nostro <strong>Python<\/strong> in modo da estendere le funzionalit\u00e0 ed utilizzeremo uno strumento molto comodo per chi \u00e8 alle prime armi o vuole eseguire in debug il proprio codice con un riscontro grafico dei risultati: il\u00a0<strong>Python Notebook<\/strong>. Questo strumento presente all&#8217;interno di ArcGIS PRO consente di creare un documento con testo, commenti, immagini e codice in maniera user-friendly. Spesso si \u00e8 spaventati dall&#8217;interfaccia di scrittura ed esecuzione degli script, il Notebook vuole superare questo scoglio eseguendo un ambiente interattivo di Python (denominato <em>IPython<\/em>) basato sul framework <em>Jupyter<\/em>.<\/p>\n<blockquote><p><em>Il debug \u00e8 l&#8217;esecuzione del nostro codice riga per riga cos\u00ec da soffermarsi a vedere i risultati parziali e indagare meglio i possibili errori.<\/em><\/p><\/blockquote>\n<h1>Il Problema: Estrarre gli attributi da un KML<\/h1>\n<p style=\"text-align: justify;\">Partiamo identificando il problema che ci ha fatto sviluppare uno script. Ci \u00e8 stato consegnato un KMZ (archivio compresso di file KML) con diverse geometrie e un popup con degli attributi. Il formato KML\/KMZ \u00e8 utilizzato da Google per mostrare dati geografici via web, non \u00e8 un formato nativo GIS anche se, come vedremo, pu\u00f2 essere letto e convertito.<\/p>\n<p><a href=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/earth.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-8864 size-large\" src=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/earth-1024x489.jpg\" alt=\"\" width=\"640\" height=\"306\" srcset=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/earth-1024x489.jpg 1024w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/earth-300x143.jpg 300w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/earth-768x367.jpg 768w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/earth.jpg 1893w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Attraverso la nuova versione di Google Earth web possiamo aprire il file e vedere com&#8217;\u00e8 strutturato. Come anticipato in precedenza, questo file pu\u00f2 essere aperto e convertito in Arcgis PRO tramite il comando &#8220;KML to Layer&#8221;, l&#8217;unico problema \u00e8 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&#8217;esempio:<\/p>\n<blockquote>\n<h6>&lt;html xmlns:fo=&#8221;http:\/\/www.w3.org\/1999\/XSL\/Format&#8221; xmlns:msxsl=&#8221;urn:schemas-microsoft-com:xslt&#8221;&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;META http-equiv=&#8221;Content-Type&#8221; content=&#8221;text\/html&#8221;&gt;<br \/>\n&lt;meta http-equiv=&#8221;content-type&#8221; content=&#8221;text\/html; charset=UTF-8&#8243;&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body style=&#8221;margin:0px 0px 0px 0px;overflow:auto;background:#FFFFFF;&#8221;&gt;<br \/>\n&lt;table style=&#8221;font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-collapse:collapse;padding:3px 3px 3px 3px&#8221;&gt;<br \/>\n&lt;tr style=&#8221;text-align:center;font-weight:bold;background:#9CBCE2&#8243;&gt;<br \/>\n&lt;td&gt;2&lt;\/td&gt;<br \/>\n&lt;\/tr&gt;<br \/>\n&lt;tr&gt;<br \/>\n&lt;td&gt;<br \/>\n&lt;table style=&#8221;font-family:Arial,Verdana,Times;font-size:12px;text-align:left;width:100%;border-spacing:0px; padding:3px 3px 3px 3px&#8221;&gt;<br \/>\n&lt;tr&gt;<br \/>\n&lt;td&gt;<span style=\"color: #ff0000;\">numero<\/span>&lt;\/td&gt;<br \/>\n&lt;td&gt;<span style=\"color: #339966;\">2<\/span>&lt;\/td&gt;<br \/>\n&lt;\/tr&gt;<br \/>\n&lt;tr bgcolor=&#8221;#D4E4F3&#8243;&gt;<br \/>\n&lt;td&gt;<span style=\"color: #ff0000;\">indirizzo<\/span>&lt;\/td&gt;<br \/>\n&lt;td&gt;<span style=\"color: #339966;\">Via Pasubio\/Fronte civ. 40<\/span>&lt;\/td&gt;<br \/>\n&lt;\/tr&gt;<br \/>\n&lt;tr&gt;<br \/>\n&lt;td&gt;<span style=\"color: #ff0000;\">posizione_planimetria<\/span>&lt;\/td&gt;<br \/>\n&lt;td&gt;<span style=\"color: #339966;\">SI<\/span>&lt;\/td&gt;<br \/>\n&lt;\/tr&gt;<br \/>\n&lt;tr bgcolor=&#8221;#D4E4F3&#8243;&gt;<br \/>\n&lt;td&gt;<span style=\"color: #ff0000;\">tipo_botola<\/span>&lt;\/td&gt;<br \/>\n&lt;td&gt;<span style=\"color: #339966;\">0<\/span>&lt;\/td&gt;<br \/>\n&lt;\/tr&gt;<br \/>\n&lt;\/table&gt;<br \/>\n&lt;\/td&gt;<br \/>\n&lt;\/tr&gt;<br \/>\n&lt;\/table&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<\/h6>\n<\/blockquote>\n<p style=\"text-align: justify;\">Come si pu\u00f2 vedere il popup viene composto attraverso dei TAG &lt;td&gt; dove viene riportato il nome dell&#8217;attributo (evidenziato in rosso) seguito dal relativo valore (in verde). Il nostro obiettivo sar\u00e0 quello di convertire questi TAG in campi della feature class e compilare gli attributi con il rispettivo valore.<\/p>\n<h1>Aggiungere librerie a Python<\/h1>\n<p style=\"text-align: justify;\">Python \u00e8 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 <strong>arcpy<\/strong> sviluppata appositamente da ESRI. In realt\u00e0 Python offre molte pi\u00f9 funzioni di quelle proposte all&#8217;interno del software ArcGIS PRO ed \u00e8 possibile integrarle installando librerie esterne, nel nostro caso utilizzeremo <a href=\"https:\/\/pypi.org\/project\/beautifulsoup4\/\">Beautiful Soup\u00a0<\/a>un modulo sviluppato per riconoscere i TAG e classificarli, operazione che prende il nome di <strong>parsing<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Per installare un nuovo modulo dobbiamo andare nella ribbon <em>Project -&gt; Python<\/em>, qui potremo vedere i pacchetti che sono gi\u00e0 presenti nella versione di Python attiva.<\/p>\n<p style=\"text-align: justify;\">E&#8217; possibile utilizzare Jupiter Notebook con l&#8217;ambiente Python cos\u00ec come viene fornito con ArcGIS Pro, ma se vogliamo installare nuovi moduli esterni \u00e8 necessario clonare il nostro ambiente, anche per evitare che venga corrotto nella fase di installazione rendendo il programma inutilizzabile. Premendo &#8220;<em>Manage Environments<\/em>&#8221; comparir\u00e0 una finestra che ci mostra gli ambienti presenti, se non avete mai fatto questa operazione avrete solamente l&#8217;ambiente di default denominato &#8220;arcgispro-py3&#8221; . Premendo il tasto &#8220;Clone&#8221;, con qualche minuto di attesa, verr\u00e0 creata una copia dell&#8217;ambiente che potremo attivare e modificare a nostro piacimento.<\/p>\n<p><a href=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/python.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-8866\" src=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/python-1024x677.jpg\" alt=\"\" width=\"640\" height=\"423\" srcset=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/python-1024x677.jpg 1024w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/python-300x198.jpg 300w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/python-768x508.jpg 768w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/python.jpg 1528w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Riavviato il software i nostri cambiamenti saranno effettivi e ritornando nella finestra del &#8220;<em>Python Package Manager<\/em>&#8221; potremo installare il modulo desiderato avendo l&#8217;accortezza di verificare che il nostro nuovo ambiente clonato sia quello attivo. Sotto il bottone &#8220;<em>Add Packages<\/em>&#8221; potremo cercare &#8220;<strong>beautifulsoap4<\/strong>&#8221; e procedere con l&#8217;installazione.<\/p>\n<h1>Python Notebook<\/h1>\n<p style=\"text-align: justify;\">Come abbiamo gi\u00e0 visto in <a href=\"https:\/\/gis.oneteam.it\/index.php\/2020\/04\/16\/scrivere-e-utilizzare-script-in-arcgis-pro\/\">articoli precedenti<\/a>, in ArcGIS PRO \u00e8 possibile sviluppare ed eseguire script che automatizzano operazioni. Spesso per\u00f2 \u00e8 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\u00e8 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.<\/p>\n<p><a href=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/2021-07-12-12_08_23_LI.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-8868\" src=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/2021-07-12-12_08_23_LI-1024x576.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/2021-07-12-12_08_23_LI-1024x576.jpg 1024w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/2021-07-12-12_08_23_LI-300x169.jpg 300w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/2021-07-12-12_08_23_LI-768x432.jpg 768w, https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/2021-07-12-12_08_23_LI.jpg 1920w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Per aprire un Notebook bisogna andare nella ribbon <em>Analysis -&gt; Python -&gt; Python Notebook<\/em>. Nel catalog comparir\u00e0 una nuova cartella con all&#8217;interno il nostro file in formato <em>.ipynb<\/em>. La creazione del nostro script sar\u00e0 molto semplice e guidata: premendo il tasto &#8220;+&#8221; o andando nella tab &#8220;<em>Insert<\/em>&#8221; potremo aggiungere nuove celle al nostro documento e potremo scegliere se aggiungere una cella testuale (<em>Markdown<\/em>) un titolo (<em>Heading<\/em>) oppure del codice (<em>Code<\/em>) scegliendo tra le opzioni nel men\u00f9 a tendina.<\/p>\n<p style=\"text-align: justify;\">Nel nostro caso ho aggiunto un titolo &#8220;<em>Script: Add Field from KMZ<\/em>&#8221; con un testo che ricorda di eseguire il comando &#8220;<em>KMZ to Layer<\/em>&#8221; prima dell&#8217;esecuzione dello script. In seguito ho inserito il codice di mio interesse partendo sempre dall&#8217;importazione dei moduli che andr\u00f2 ad utilizzare. Come possiamo vedere, oltre all&#8217;onnipresente modulo <em>arcpy<\/em>, ho importato anche <em>bs4<\/em> (beautifulsoap4) e <em>itertools<\/em> (modulo di sistema gi\u00e0 presente) che andr\u00f2 a richiamare per utilizzare le loro funzioni.<\/p>\n<h1>\u00a0Il Codice<\/h1>\n<p>Di seguito potete scaricare il notebook contenente il codice per poter replicare l&#8217;operazione esposta nell&#8217;articolo. Per caricare il file in ArcGIS PRO bisogna andare nella cartella &#8220;<em>Notebooks<\/em>&#8221; all&#8217;interno del catalog, selezionarla con il tasto destro e scegliere &#8220;<em>Add Notebook<\/em>&#8221;<\/p>\n<p><a href=\"https:\/\/gis.oneteam.it\/wp-content\/uploads\/2021\/07\/Field_KMZ.rar\">Field_KMZ<\/a><\/p>\n<p>Le prime righe del codice sono riservate all&#8217;importazione dei moduli contenenti le funzioni che saranno utilizzate nel codice. In seguito bisogna aggiungere il percorso al layer frutto della conversione del KML.<\/p>\n<p>Nel secondo blocco viene inizializzato il cursore e successivamente abbiamo due cicli:<\/p>\n<ol>\n<li>Il primo ciclo \u00e8 eseguito su ogni record del nostro layer dove verr\u00e0 preso il campo PopupInfo contenente il codice HTML da scomporre. Attraverso il modulo di BeautifulSoap vengono riconosciuti e classificati tutti i tag<\/li>\n<li>Il secondo ciclo invece \u00e8 eseguito su tutti i tag che vengono ritrovati all&#8217;interno del campo PopupInfo. Il primo tag \u00e8 il nome del campo mentre il seguente sar\u00e0 il contenuto, per questo motivo viene eseguito un ciclo con step di due elementi.<\/li>\n<\/ol>\n<p>Per terminare viene aggiornato il cursore ed eliminato l&#8217;oggetto utilizzato per eseguire i cicli.<\/p>\n<h1>Conclusioni<\/h1>\n<p>Jupyter Notebook \u00e8 stato creato per rendere pi\u00f9 semplice mostrare il proprio lavoro di programmazione e per consentire ad altri utenti di interpretare in maniera pi\u00f9 intuitiva il codice scritto. Questo strumento consente di combinare codice, commenti, contenuti multimediali e visualizzazioni in un documento interattivo che pu\u00f2 essere condiviso, riutilizzato e rielaborato. Notebook Jupyter \u00e8 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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>La puntata di oggi del nostro blog sar\u00e0 rivolta a chi ha un p\u00f2 di dimestichezza con lo scripting ed ha interesse nell&#8217;eseguire automazioni. In questo caso non si tratta propriamente di automazioni perch\u00e9 con gli strumenti di Arcgis non sarebbe possibile eseguire l&#8217;operazione di estrazione degli attributi dal popup di un KML. Andremo a&hellip;<\/p>\n","protected":false},"author":1,"featured_media":8884,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,14,29],"tags":[688,81,758,343,344,470],"class_list":["post-8862","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arcgis-pro","category-articoli-tecnici","category-python","tag-arcgis-notebooks","tag-arcgis-pro","tag-convertire","tag-kml","tag-kmz","tag-python"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/posts\/8862","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/comments?post=8862"}],"version-history":[{"count":18,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/posts\/8862\/revisions"}],"predecessor-version":[{"id":8888,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/posts\/8862\/revisions\/8888"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/media\/8884"}],"wp:attachment":[{"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/media?parent=8862"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/categories?post=8862"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gis.oneteam.it\/index.php\/wp-json\/wp\/v2\/tags?post=8862"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}