<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
    <channel>
        <title>TANTO</title>
        <description>Le cose che ci piacciono tanto ...</description>
        <link>https://medium.com/tantotanto?source=rss----85ace5983d95---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>tantotanto - Medium</title>
            <link>https://medium.com/tantotanto?source=rss----85ace5983d95---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 31 Mar 2026 09:05:20 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/tantotanto" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>Le cose che ci piacciono … - Medium</itunes:subtitle><item>
            <title><![CDATA[Esplorare ECOSTRESS: scaricare e organizzare i dati termici della Terra offerti da NASA]]></title>
            <link>https://medium.com/tantotanto/esplorare-ecostress-scaricare-e-organizzare-i-dati-termici-della-terra-offerti-da-nasa-fa554861e117?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/fa554861e117</guid>
            <dc:creator><![CDATA[Maurizio Napolitano]]></dc:creator>
            <pubDate>Wed, 19 Jul 2023 16:12:01 GMT</pubDate>
            <atom:updated>2023-07-19T18:29:12.463Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<h3>La missione ECOSTRESS</h3><p>Leggere il tema “ECOSTRESS” in particolare nel contesto di cambiamento climatico e con una mappa associata fa scattare subito nell’immaginario collettivo qualcosa che è in grado di calcolare lo “stress ecologico” del pianeta.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/330/0*Ik3PFEOnCp37W2wg" /><figcaption>il radiometro ECOSTRESS della International Space Station</figcaption></figure><p>In realtà si tratta dell’azzeccato acronimo di <strong>E</strong>cosystem <strong>S</strong>paceborne <strong>T</strong>hermal <strong>R</strong>adiometer <strong>E</strong>xperiment on <strong>S</strong>pace <strong>S</strong>tation ( = esperimento del radiometro termico spaziale per l’osservazione degli ecosistemi dalla stazione spaziale): un esperimento scientifico della NASA, partito nel 2018 e che si concluderà quest’anno, dove un radiometro avanzato montato sulla <a href="https://www.nasa.gov/mission_pages/station/main/index.html">International Space Station (ISS)</a> raccoglie misure dalle piante che rispondono a stress dovuto al riscaldamento globale.</p><p>I dati raccolti da ECOSTRESS servono a rispondere principalmente a queste domande:</p><ol><li>Come sta rispondendo la biosfera terrestre ai cambiamenti nella disponibilità di acqua?</li><li>Come influiscono i cambiamenti nello stress idrico vegetale diurno sul ciclo globale del carbonio?</li><li>È possibile ridurre la vulnerabilità agricola mediante il monitoraggio avanzato del consumo di acqua agricola e un miglioramento della stima delle siccità?</li></ol><p>E lo fa misurando accuratamente la temperatura delle piante. Le piante regolano la loro temperatura rilasciando acqua attraverso piccoli pori sulle loro foglie chiamati stomi. Se dispongono di acqua sufficiente, possono mantenere la loro temperatura, ma se l’acqua è insufficiente, le loro temperature aumentano e questo aumento di temperatura può essere misurato con ECOSTRESS. Le immagini acquisite da ECOSTRESS sono le immagini di temperatura più dettagliate mai acquisite dalla superficie dello spazio e possono essere utilizzate per misurare la temperatura di un singolo campo agricolo.</p><p>Uno dei principali prodotti della missione ECOSTRESS è l’Indice di Stress Evaporativo (ESI): un indicatore leader di siccità in grado di indicare quanto le piante sono sotto stress è pertanto con quale probabilità si può verificare una siccità.<br>Maggiori informazioni si trovano al <a href="https://ecostress.jpl.nasa.gov">sito ufficiale</a>.</p><h3>Mappe delle isole di calore</h3><p>Nel 2022 l’Agenzia Spaziale Europea ha pubblicato una serie di <a href="https://www.esa.int/ESA_Multimedia/Images/2022/07/Land-surface_temperature_in_Milan_on_18_June_2022">immagini</a> a partire da quei dati raccolti nel”articolo <a href="https://www.esa.int/Applications/Observing_the_Earth/Copernicus/City_heat_extremes">City heat extremes</a> — all’interno del progetto — mostrando così le isole di calore di diverse città del mondo ed evidenziando ancora di più che la presenza di alberi è fondamentale.<br>Un esempio è la comparazione fra Praga e Milano dove le immagini confermano da sole l’importanza della presenza degli alberi.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*bOcOr-YEChF9QJCK" /><figcaption>la temperatura di superficie di Praga a luglio 2022</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*WGwg4E7R_ac41NDM" /><figcaption>la temperatura di superficie di Milano a luglio 2022</figcaption></figure><p>La curiosità quindi degli appassionati di mappe diventa immediata nel momento in cui si domanda se ECOSTRESS raccoglie anche dati della zona in cui vive.</p><h3>Scaricare i dati</h3><p>Per scoprirlo è sufficiente navigare i dati che NASA espone sul suo portale <a href="https://search.earthdata.nasa.gov/">Earthdata</a>.<br>Cercando la parola “<em>ecostress</em>” e scegliendo il prodotto “<em>ECOSTRESS Land Surface Temperature and Emissivity Daily L2 Global 70m V001″</em> ed infine disegnando un rettangolo sull’Italia (eventualmente inserendo anche il periodo storico che si vuole esaminare), l’interfaccia mostra tutte le zone che ECOSTRESS ha raccolto.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*E3j1DDPdfNkJTStSOssmPA.png" /><figcaption>Interfaccia del portale dei dati di NASA: il rettangolo azzurro è la zona scelta per la ricerca, mentre in verde una delle aree da poter scaricare</figcaption></figure><p>Per conoscere a fondo i dati è importante andare a leggere le informazioni sui dettagli che si raggiungono con un clic sulla barra verticale tratteggiata a sinistra del nome del file.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/398/1*Ggcpqn_fpJm3VTgVkyamEA.png" /><figcaption>accedere ai metadati</figcaption></figure><p>Questo apre una finestra con una importante serie di metadati che si consiglia di guardare con molta attenzione in particolare a risorse in PDF come questa guida <a href="https://lpdaac.usgs.gov/documents/423/ECO2_User_Guide_V1.pdf">ECO2_User_Guide_V1.pdf</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mMx7QXaE22R6lT4Rqw9SZg.png" /><figcaption>la pagina con i metadati</figcaption></figure><h3>Processare i dati per elaborali</h3><p>questo anche perché la prima azione della persona desiderosa di vedere i dati è quella di scaricare e aprire con un software come QGIS</p><p>I file sono griglie di 70m (raster) in formato HDF5, pertanto ricchi di informazioni.<br>Infatti, l’apertura di uno di questi in QGIS, mostra diverse sorgenti.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/739/1*XVk32Db0zy7VtKlFfrlU2g.png" /><figcaption>la finestra di QGIS con l&#39;elenco dei layer disponibili</figcaption></figure><p>Il file con le informazioni delle temperature di superficie è LST — Land Surface Temperature.</p><p>La sola visualizzazione anche come scale di grigi però non aiuta a comprendere dove ci si trova e sembra molto lontana da quella che è l’immagine di anteprima che il portale offre.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/575/0*ZWBc0XqpKXeIWXwX" /><figcaption>come appare il raster in QGIS</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NnMIq-gEb-q92ZEW" /><figcaption>l&#39;anteprima dell&#39;immagine dal portale EarthData di Nasa</figcaption></figure><p>Inoltre non è presente nemmeno l’informazione sul sistema di riferimento e quindi questo rende il tutto ancora più difficile.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n4s7u5hKWV_tFV8i4a9F6A.png" /><figcaption>le meta informazioni del raster in QGIS — notare il sistema di riferimento</figcaption></figure><p>Questo perché il dato è grezzo ed ha bisogno di essere elaborato al fine di ottenere tutti i prodotti in formato geoTIFF.<br>La serie di operazioni da svolgere è contenuta nello script python <a href="https://git.earthdata.nasa.gov/projects/LPDUR/repos/ecostress_swath2grid/browse/ECOSTRESS_swath2grid.py">ECOSTRESS_swath2grid.py</a></p><p>Leggendo le istruzioni nel <a href="https://git.earthdata.nasa.gov/projects/LPDUR/repos/ecostress_swath2grid/browse">repository</a> che contiene il sorgente si scopre che è necessario avere anche i dati del prodotto ECO1BGEO che contiene il layer di dati per valori di latitudine e longitudine, informazioni sulla geometria solare e della vista, altezza della superficie e frazione di pixel sulla terra rispetto all’acqua necessari quindi per aver un raster completo e georiferito.</p><p>Questo prodotto si può scaricare sempre dal sito EarthData di NASA ma diventa estremamente più facile scaricarlo direttamente dal sito web che esporta i file verso l’esterno raggiungibile a questo <a href="https://e4ftl01.cr.usgs.gov/ECOSTRESS/ECO1BGEO.001/">indirizzo</a>.</p><p>L’interfaccia è quella tipica delle directory esposte via web.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/618/0*S4PHXs4vi9Sr0hQ1" /><figcaption>come si presenta la pagina web con i prodotti ECO1BGEO</figcaption></figure><p>per raggiungere il file giusto si tratta quindi di dare una occhiata al nome del file .h5 scaricato precedentemente. <br>Nel mio caso il file si chiama <em>ECOSTRESS_L2_LSTE_28491_008_20230716T002924_0601_02.h5</em></p><p>Il primo passaggio è quindi individuare la data che è <em>20230716</em> quindi <em>2023.07.16</em> e da qui cercare il file che contiene la stringa <em>_28491_008_20230716T002924_0601</em> con estensione<em> .h5</em> e scaricarlo nella stessa directory del file precedente</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/831/0*HFZoDJr50ukgyOvP" /><figcaption>l&#39;elenco dei file disponibili nella cartella con la data selezionata</figcaption></figure><p>Ora l’operazione è più facile di quello che sembra.<br>Una volta scaricato lo script python e verificato di avere installato tutte le librerie dipendenti (<em>h5py pyproj pyresample gdal pandas scipy</em>) si tratta solo di eseguirlo specificando la directory dove si trovano i file da elaborare e se si vuole avere i dati proiettati usando unità in metri (UTM) oppure in gradi (GEO).<br>Ad esempio se i file sono nella directory download e si vorrà ottenere una proiezione UTM allora il comando sarà:</p><pre>python ECOSTRESS_swath2grid.py --proj UTM --dir download/</pre><p>Il computer comincerà a calcolare e, a fine calcolo, nella sottodirectory “output” si troveranno tutti i geoTIFF convertiti.</p><p>Il file che contiene il suffisso “LST_UTM.tif” è quello con le temperature di superficie che si presenterà — nel mio caso — con la proiezione WGS84 — UTM32N (epsg 32632) <br>Infatti, sovrapponendolo ad una mappa di OpenStreetMap compare sopra l’Italia</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TYVIAxUcOxpZMPQE_ZVvew.png" /><figcaption>il raster con la temperatura della superficie terrestre riproiettato con OpenStreetMap in background</figcaption></figure><p>la cui colorazione poi può essere fatta in con una scala dal blu al rosso passando per il verde e il giallo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*HuOPPuXRXIU5d3B8gsv5yw.png" /><figcaption>il raster con la temperatura della superficie terrestre riproiettato con OpenStreetMap in background usando una scala di colori dal blu al rosso</figcaption></figure><p>ed evidenziare così quali sono le zone dove le temperature sono più o meno alte in una cella di 70m, giocando poi con zoom e trasparenze individuare le aree di una città.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/959/1*X2OVF02ZGUjjs2Ro9bK6IA.png" /><figcaption>scorcio sull’area di Trento usando una immagine satellitare come sfondo e il raster delle temperature di superficie in trasparenza</figcaption></figure><p>Qui però arriva il momento più importante: studiare meglio i dati dalla documentazione fornita da ECOSTRESS verificando anche date e orari del giorno e proseguire con le proprie analisi e considerazioni.</p><p>Il consiglio è <strong>DIVERTIRSI</strong> e <strong>STUDIARE</strong>!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fa554861e117" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/esplorare-ecostress-scaricare-e-organizzare-i-dati-termici-della-terra-offerti-da-nasa-fa554861e117">Esplorare ECOSTRESS: scaricare e organizzare i dati termici della Terra offerti da NASA</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        <enclosure length="1043210" type="application/pdf" url="https://lpdaac.usgs.gov/documents/423/ECO2_User_Guide_V1.pdf"/><itunes:explicit>no</itunes:explicit></item>
        <item>
            <title><![CDATA[Create an animated gif of cartographic data via command line]]></title>
            <link>https://medium.com/tantotanto/create-an-animated-gif-of-cartographic-data-via-command-line-76da47710f?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/76da47710f</guid>
            <category><![CDATA[gif]]></category>
            <category><![CDATA[mapserver]]></category>
            <category><![CDATA[cli]]></category>
            <category><![CDATA[maps]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Mon, 07 Feb 2022 07:20:39 GMT</pubDate>
            <atom:updated>2022-02-07T08:25:14.905Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<h4>The MapServer way to do it</h4><p>A person I respect very much, has written to me an email in which he asks to me how to create an animated gif of cartographic data, using the <strong>simple </strong>and <strong>convenient ways </strong>typical of the <strong>command line</strong>.</p><p>Several ways to do it, here is the <a href="https://mapserver.org/"><strong>MapServer</strong></a><strong> one</strong>.</p><h3>The goal</h3><blockquote><em>What I did was build an animation GIF with my collecting sites in Tasmania. The data are from here: </em><a href="https://doi.org/10.3897/BDJ.9.e70463"><em>https://doi.org/10.3897/BDJ.9.e70463</em></a><em> but I extracted the Tasmanian collecting events and reduced them to a 3-column table — year, lat, lon — with unique entries (sort | uniq).</em></blockquote><p>The data are points, and in the desired output the red points are those of the specified year and the blue ones, those of the previous years. This is the GIF created by my friend, but his problem was how slow he was doing it:</p><blockquote>The slow part was making each of the year categories visible, one after the other, changing the marker stylings and exporting as a PNG with year as filename — 45 minutes.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/773/0*NdcvH1Ea9u-sRXNJ.gif" /></figure><h3>The MapServer way</h3><blockquote><em>MapServer is an </em><a href="https://opensource.org/"><em>Open Source</em></a><em> platform for publishing spatial data and interactive mapping applications to the web. Originally developed in the mid-1990’s at the University of Minnesota, MapServer is released under an </em><a href="https://mapserver.org//copyright.html#license"><em>MIT-style license</em></a><em>, and runs on all major platforms (</em><a href="https://mapserver.org//download.html#windows"><em>Windows</em></a><em>, </em><a href="https://mapserver.org//download.html#linux"><em>Linux</em></a><em>, </em><a href="https://mapserver.org//download.html#osx"><em>Mac OS X</em></a><em>).</em></blockquote><p>It has a cli — <a href="https://mapserver.org/cgi/mapserv.html#mapserv">mapserv</a> - that you can use to create outputs. Moreover it can use <a href="https://mapserver.org/cgi/runsub.html">run-time substitution</a> to change variables values at run-time.</p><p>Then I can use it to create a PNG output file for every year, and then to process these and create an animated GIF.</p><p>To use MapServer it’s necessary to create a map file, a configuration file in which set the geographical bounding box, the input layers you want to use, the graphic styles to apply, etc..<br>I will not explain here what the syntax is, it is not the purpose of this post, I&#39;ll just make a few comments.</p><p>Some points for the <a href="https://github.com/aborruso/animated-gif-mapserver/blob/main/processing/data.map">example map file</a> I have created:</p><ul><li>I have set a decimal degrees <a href="https://github.com/aborruso/animated-gif-mapserver/blob/main/processing/data.map#L7">bounding box</a> (<a href="https://epsg.io/4326">EPSG:4326)</a>;</li><li>the coordinate reference system (CRS) of the output is again “latitude, longitude”, but it is possible to set the CRS you want;</li><li>I have used 3 layers: 1) one to have a background map, the polygons of <a href="https://www.naturalearthdata.com/downloads/110m-cultural-vectors/">Natural Earh </a><a href="https://www.naturalearthdata.com/downloads/110m-cultural-vectors/">Admin 0 – Countries layer</a>, low resolution, used to create an example; 2) the <a href="https://github.com/aborruso/animated-gif-mapserver/blob/main/processing/data.txt">data layer</a>, a 3 fields CSV (decimalLatitude, decimalLongitude and year); 3) the layer used to add the year as a label;</li><li>I have set 2 styles for data layer, the red dots for the specified year and the blue dots the previous years. The definition is by variable, passed at run-time via cli (EXPRESSION (&quot;[year]&quot; &lt; &#39;%year%&#39;)).</li></ul><p>The data layer, is defined as <a href="https://gdal.org/drivers/vector/vrt.html">GDAL/OGR virtual layer</a>, that is one of MapServer input formats. It’s based on a <a href="https://github.com/aborruso/animated-gif-mapserver/blob/main/processing/data.vrt">XML definition file</a>, to map CSV coordinates fields (and some other metadata).</p><p>Then to create a PNG, just run something like:</p><pre>mapserv -nh &quot;QUERY_STRING=map=data.map&amp;mode=map&amp;year=1977&quot; &gt;1977.png</pre><p>data.map is the Mapserver configuratione file and year is a variable that you can change at run-time. Then in bash it could be:</p><pre>for i in {1975..2000}; do<br>  mapserv -nh &quot;QUERY_STRING=map=data.map&amp;mode=map&amp;year=${i}&quot; &gt;${i}.png<br>done</pre><p>To add for each year, the year as label, I have added this in the query (labelyear is the name that I use to add labels to the PNG output):</p><pre>&amp;map_layer[labelyear]=FEATURE+POINTS+300+-560+END+TEXT+&quot;1977&quot;+END</pre><p>It’s possible to do it, because in MapServer you can <a href="https://mapserver.org/cgi/controls.html#changing-map-file-parameters-via-a-form-or-a-url">change map file parameters via URL</a>.</p><h3>The bash script</h3><p>I have created a <a href="https://github.com/aborruso/animated-gif-mapserver/blob/main/myDearRobert.sh">bash script</a> to run all:</p><ul><li>first of all it downloads the data layer and extract decimalLatitude, decimalLongitude and year;</li><li>then it creates a PNG for every year, using MapServer cli;</li><li>then it creates the below animated GIF using <a href="https://imagemagick.org/script/convert.php">convert ImageMagick</a> utility.</li></ul><p>The tools I use in it are MapServer, <a href="https://miller.readthedocs.io/en/latest/">Miller</a> and ImageMagick.</p><h3>The output</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/0*6K0KZG3XktKkLlc7.gif" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=76da47710f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/create-an-animated-gif-of-cartographic-data-via-command-line-76da47710f">Create an animated gif of cartographic data via command line</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Lo stress dei percorsi ciclabili]]></title>
            <link>https://medium.com/tantotanto/lo-stress-dei-percorsi-ciclabili-ee7573ec8284?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/ee7573ec8284</guid>
            <category><![CDATA[stress]]></category>
            <category><![CDATA[openstreetmap]]></category>
            <category><![CDATA[italy]]></category>
            <category><![CDATA[bikes]]></category>
            <category><![CDATA[open-data]]></category>
            <dc:creator><![CDATA[Maurizio Napolitano]]></dc:creator>
            <pubDate>Fri, 17 Sep 2021 14:14:44 GMT</pubDate>
            <atom:updated>2021-09-20T12:38:04.408Z</atom:updated>
            <content:encoded><![CDATA[<p>il modello di Bike Ottawa applicato all’Italia</p><p>I cittadini di Ottawa sembrano avere una lunga <a href="https://apt613.ca/history-of-cycling-in-ottawa/">tradizione</a> con l’uso della bicicletta e non stupisce quindi che dal 1984 esista un’associazione senza fini di lucro dal nome “Bike Ottawa” che crede fortemente che muoversi in bicicletta ad Ottawa dovrebbe essere una scelta facile e sicura per chiunque e pertanto si impegnano a fare in modo che le strade della loro città siano sicure.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*q2QdQ7SSohueAMqCauk8jQ.jpeg" /><figcaption>Bike Ottawa</figcaption></figure><p>Negli anni il collettivo di Bike Ottawa così è cresciuto in maniera importante mantenendo sempre l’attenzione alta e costruendo strumenti utili alla discussione sul tema.</p><p>Sul sito ufficiale si trovano quindi tantissimi articoli, raccolta di documentazione sul tema della ciclabilità, report, analisi ed altro ancora che raccontano e stimolano a ragionare sul valore dell’uso della bicicletta.</p><p>Fra gli strumenti anche mappe con cui <a href="https://maps.bikeottawa.ca/planner/web/#map=11/45.3999/-75.5997/1065&amp;&amp;roadsPen=0.2&amp;sidewalkPen=0.5&amp;surfacePen=0.1&amp;litPen=0&amp;plowPen=0&amp;stopSignPen=0.1">pianificare</a> percorsi sicuri, raccogliere informazioni su <a href="https://maps.bikeottawa.ca/amenities/">punti di interesse,</a> <a href="https://maps.bikeottawa.ca/desire/">immaginare percorsi</a> per il futuro, mostrare una mappa di come la ciclabilità cambia <a href="https://maps.bikeottawa.ca/desire/">d’inverno</a>, dove sono avvenuti <a href="https://maps.bikeottawa.ca/collisions/">incidenti</a> negli anni ed altro ancora.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/823/1*_EOO0bOdMA_vNt0pfLY60g.png" /><figcaption>maps.bikeottawa.ca</figcaption></figure><p>In questo “altro ancora” una mappa molto affascinante è quella del livello da stress che si subisce percorrendo una singola strada in bicicletta.</p><p>Uno stress che è calcolato sulla base di come si presenta il percorso ciclabile in relazione alla strada che lo contiene e nel rapporto con le strade che incrocia. Ad esempio si tratta di un percorso condiviso con auto o con pedoni o è vicino a strade alto scorrimento ecc…</p><p>Un modello che il data working group di Bike Ottawa ha costruito sulla base della conoscenza maturata in questi anni, fatto da una serie di regole basate sui dati con cui sono descritti ogni singoli tratti di strade.</p><p>L’aspetto più affascinante di tutto questo è poi la riproducibilità con cui il modello può essere applicato.</p><p>Questo perché, Bike Ottawa non solo rilascia tutto il codice che produce su <a href="https://github.com/BikeOttawa">GitHub</a>, ma utilizza anche i dati di OpenStreetMap.</p><p>Questo fa sì che, dando una sbirciatina al codice e leggendo le poche e semplici istruzioni, chiunque è in grado di applicare il modello del livello di stress di ciclabilità su una qualsiasi parte del mondo.</p><p>E così, curiosando sul singolo repository dello <a href="https://github.com/BikeOttawa/stressmodel">stressmodel</a>, ecco che noi due (<a href="https://twitter.com/napo">Maurizio Napolitano</a> e <a href="https://twitter.com/matt_fortini/">Matteo Fortini</a>) ci siamo messi a sviluppare le mappe da “stress in bicicletta” delle città dove viviamo (<a href="https://napo.github.io/trentocyclestressmap/#15/46.0686/11.1234">Trento</a> e <a href="https://mfortini.github.io/centocyclestressmap/#13/44.7641/11.3214">Cento</a>).</p><p>Da lì in poi, in brevissimo tempo, è nata l’idea di fare una mappa per tutta Italia dando vita a “<a href="https://bicistressatedaltraffico.it/">Bici stressate dal traffico</a>”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*WzxuVK_T9HXHtyuGsOfO9w.png" /><figcaption><a href="https://bicistressatedaltraffico.it/#5/42.98/12.79">https://bicistressatedaltraffico.it</a></figcaption></figure><p>Appena si visita la mappa il primo pensiero è quello di fare zoom sulla propria città per farsi subito un’idea se, quanto elaborato corrisponde a realtà e se ci sono caratteristiche da scoprire. E così ci si da da subito risposta a domande come: “<em>la ciclabilità nella mia città è rilassante oppure bisogna sempre stare attenti?</em>” oppure “<em>Il percorso da casa al lavoro ha delle strade che non mi mettono in difficoltà?</em>”.</p><p>C’è chi rimane soddisfatto, c’è invece che pensa che qualcosa proprio non torna.</p><p>In effetti, se si guarda la mappa di tutta Italia, ci si incuriosisce subito nel vedere che, sulla montagna, sembrano esserci percorsi a basso livello di stress se non addirittura percorribili da bambini.</p><p>Le motivazioni sono diverse, e il fatto che ci sia un errore e che questo venga evidenziato, a noi piace molto, perché scopo della mappa è anche quello di stimolare il dibattito, replicare, modificare il modello (è costruito su Ottawa e quindi qualcosa potrebbe essere diverso — le informazioni si trovano nel lavoro di <a href="https://peterfurth.sites.northeastern.edu/2014/05/21/criteria-for-level-of-traffic-stress/">Peter Furth delle Northeastern University</a>)</p><p>Sicuramente uno dei problemi principali è anche la mancanza di dettaglio nei dati (o la totale mancanza).</p><p>La comunità di Bike Ottawa è molto attenta al dettaglio ed ha creato anche una guida su come <a href="https://github.com/BikeOttawa/OSM-Bike-Ottawa-Tagging-Guide">mappare i dati della ciclabilità</a> dentro OpenStreetMap.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/904/1*8IWk7bHucvSIPzRf18g3bw.png" /><figcaption>la guida di Bike Ottawa sugli attributi da raccogliere in OpenStreetMap per la cicalbilità</figcaption></figure><p>Forse anche questa andrebbe rivista su un modello italiano, rimane però il fatto che la quantità di dettagli necessaria fa capire da subito quanto le persone di Bike Ottawa abbiano amore per il loro territorio e quanto credano fortemente in questo progetto.</p><p>Un suggerimento che ci piace dare a chi ci sta leggendo e a chi vorrebbe partecipare per migliorare il progetto è quello di contribuire a OpenStreetMap, magari cominciando a “giocare” con l’app per android “<a href="https://play.google.com/store/apps/details?id=de.westnordost.streetcomplete&amp;hl=it&amp;gl=US">StreetComplete</a>”.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*E6PAOM7Ab24JEIlSg5Mjlw.png" /><figcaption>StreetComplete: conoscere la città e aggiornare i dati di OpenStreetMap</figcaption></figure><p>Una volta installata l’applicazione ci si potrà divertire a gironzolare per la propria città raccogliendo dati di dettaglio su percorsi pedonali, ciclabili, altezze degli edifici, conferma della presenza di panchine, cestini, fontanelle dell’acqua, descrizione del manto stradale, numero di scalini … ecc.. ecc…</p><p>Piccoli dati di dettaglio che sono poi in grado di fare la differenza e di aiutare non solo ciclisti, ma chiunque abbia la necessità di raggiungere un luogo con mezzi diversi.</p><p>Il nostro desiderio poi è quello di aggiornare di volta in volta questa mappa che abbiamo creato, sperando che il dibattito sulla necessità di creare spazi per una mobilità sostenibile parta anche da considerazioni oggettive che guardano anche ai dati.</p><p>Grazie!<br>Maurizio e Matteo</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ee7573ec8284" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/lo-stress-dei-percorsi-ciclabili-ee7573ec8284">Lo stress dei percorsi ciclabili</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[L’elaborazione dei dati per la mappa del decreto “di Natale”, in chilometri]]></title>
            <link>https://medium.com/tantotanto/lelaborazione-dei-dati-per-la-mappa-del-decreto-di-natale-in-chilometri-9b95e4dbc975?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/9b95e4dbc975</guid>
            <category><![CDATA[geospatial]]></category>
            <category><![CDATA[bash]]></category>
            <category><![CDATA[spatialite]]></category>
            <category><![CDATA[cli]]></category>
            <category><![CDATA[gis]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Tue, 29 Dec 2020 12:38:50 GMT</pubDate>
            <atom:updated>2020-12-30T10:51:18.069Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<h4>La versione “a riga di comando”</h4><p>Con <a href="https://twitter.com/napo">Maurizio</a> e <a href="https://twitter.com/totofiandaca">Salvatore</a> abbiamo raccontato <a href="https://medium.com/tantotanto/il-decreto-di-natale-in-chilometri-8af38744a7d5"><strong>Il decreto “di Natale”, in chilometri</strong></a>, ovvero come calcolare le aree in cui sarà possibile spostarsi nei giorni 28, 29, 30 dicembre 2020 e 4 gennaio 2021, secondo quanto indicato nel <a href="https://www.gazzettaufficiale.it/eli/id/2020/12/18/20G00196/s">Decreto Legge numero 172 del 18 dicembre 2020</a>.</p><p>Maurizio le ha calcolate usando <a href="https://github.com/ondata/30cappa/blob/main/script/conpython/README.md">Python</a>, Salvatore <a href="https://pigrecoinfinito.com/2020/12/24/il-decreto-di-natale-in-chilometri">con QGIS e SpatiaLite</a>; io l’ho fatto “<strong>a riga di comando</strong>”, sfruttando alcune <em>utility</em> e uno <a href="https://github.com/ondata/30cappa/blob/main/script/arigadicomando/dataETL.sh">script <em>bash</em></a>.</p><h3>Utility usate</h3><p>Lo script sfrutta principalmente queste 4 <em>utility</em>:</p><ul><li><strong>GDAL/OGR</strong>, la più importante libreria <em>open source</em> per leggere e scrivere file geografici vettoriali e <em>raster</em> <a href="https://gdal.org/">https://gdal.org/</a></li><li><strong>Mapshaper</strong> (usare versione &gt;= 0.5.22), una straordinaria applicazione <em>open source</em> per modificare file in formato Shapefile, GeoJSON, TopoJSON, CSV, ecc. <a href="https://github.com/mbloch/mapshaper">https://github.com/mbloch/mapshaper</a></li><li><strong>Miller</strong>, una straordinaria applicazione <em>open source</em> per elaborare file in formato CSV, TSV, ecc. <a href="https://miller.readthedocs.io/en/latest/features.html">https://miller.readthedocs.io/en/latest/features.html</a></li><li><strong>SpatiaLite</strong>, uno straordinario RDBMS <em>open source</em> con funzioni spaziali <a href="https://www.gaia-gis.it/fossil/libspatialite/index">https://www.gaia-gis.it/fossil/libspatialite/index</a>.</li></ul><p>Per usare lo <em>script</em>, <strong>è necessario installarle</strong>.</p><h3>Lo script</h3><p>È diviso in tre parti:</p><ul><li>l’elaborazione dei <strong>dati </strong>sulla <strong>popolazione</strong>;</li><li>l’elaborazione dei <strong>dati geografici</strong>;</li><li>l’elaborazione per produrre i <strong>dati </strong>a supporto della <strong>mappa <em>online</em> </strong>che abbiamo realizzato.</li></ul><h4>Elaborazione dati sulla popolazione</h4><p>Abbiamo scelto come <strong>fonte</strong> questa di <strong>ISTAT</strong>: <a href="http://demo.istat.it/pop2020/dati/comuni.zip">http://demo.istat.it/pop2020/dati/comuni.zip</a>.</p><p>Sono dati aggiornati a gennaio 2020 con queste caratteristiche:</p><ul><li>formato CSV, <em>encoding</em> UTF-8 e la , come separatore di campi;</li><li>807.233 righe;</li><li>2 righe di intestazione, una descrittiva e una con i nomi dei campi;</li><li>2 righe al piede, con note, a partire da riga 807.232;</li><li>19 campi. Tra questi: il codice ISTAT in formato numerico del comune, il nome del comune, la classe di età della popolazione (da 0 a 100 a passo di un anno, con uno speciale valore di 999 per il totale di popolazione per comune), il totale di popolazione dei maschi, il totale di popolazione delle femmine;</li><li>per ogni comune un record per ogni classe di età.</li></ul><p>Un estratto:</p><pre>&quot;Popolazione residente al 1° Gennaio 2020 per sesso età (b) e stato civile post censimento (n)&quot;<br>Codice comune,Denominazione,Età,Maschi celibi,Maschi coniugati,Maschi divorziati,Maschi vedovi,Maschi uniti civilmente,Maschi già in unione civile (per scioglimento),Maschi già in unione civile (per decesso del partner),Totale Maschi,Femmine nubili,Femmine coniugate,Femmine divorziate,Femmine vedove,Femmine unite civilmente,Femmine già in unione civile (per scioglimento),Femmine già in unione civile (per decesso del partner),Totale Femmine<br>1001,Agliè,0,5,0,0,0,,,,5,11,0,0,0,,,,11<br>1001,Agliè,1,9,0,0,0,,,,9,15,0,0,0,,,,15<br>1001,Agliè,2,6,0,0,0,,,,6,8,0,0,0,,,,8</pre><p>Le informazioni di sintesi sullo schema:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f54c081fa0be77ce35a5b7af332774c5/href">https://medium.com/media/f54c081fa0be77ce35a5b7af332774c5/href</a></iframe><p>Per poterlo utilizzare è necessario rimuovere la prima riga di intestazione. Nello <em>script </em>è stata rimossa con <a href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/tail.html#top">tail</a>, con l’opzione -n e l’argomento +2, per avere in output il file a partire dalla seconda riga:</p><pre>tail &lt;./comuni.csv -n +2</pre><p>Successivamente vengono rimosse le righe al piede, che contengono le note. Viene fatto in due passaggi: prima estraendo la riga che contiene i nomi dei campi, e poi aggiungendo a questa tutte le righe che iniziano con un numero (quindi tutto, tranne le righe con le note, perché il primo campo contiene i codici ISTAT dei comuni).<br>Gli strumenti sono i due classici <em>head</em>, per estrarre soltanto la prima riga, e <em>grep </em>per filtrare tramite espressioni regolari le righe che iniziano con un numero:</p><pre><em># estri riga con nomi campo</em><br>head &lt;./comuni.csv -n 1 &gt;./tmp_comuni.csv<br><em># aggiungi corpo, rimuovendo ciò che non inizia per codice comune (in modo da rimuovere footer)</em><br>grep &lt;./comuni.csv -P &#39;^[0-9]+&#39; &gt;&gt;./tmp_comuni.csv<br><em># rinomina file</em><br>mv ./tmp_comuni.csv ./comuni.csv</pre><p>Il passo successivo è quello di estrarre il totale di popolazione per comune. Per come è fatto il file, è necessario estrarre tutte le righe in cuiEtà==&quot;999&quot; e fare poi la somma del totale di maschi e femmine.<br>A questo è stata aggiunta l’estrazione dei campi “Codice comune” e “Abitanti” (e la rimozione dei restanti) e il cambio del loro nome.<br>È stato usato Miller:</p><pre>mlr -I --csv clean-whitespace \<br>  <strong>then</strong> filter -S &#39;${Età}==&quot;999&quot;&#39; \<br>  <strong>then</strong> put &#39;$Abitanti=${Totale Maschi}+${Totale Femmine}&#39; \<br>  <strong>then</strong> cut -f &quot;Codice comune&quot;,Abitanti \<br>  <strong>then</strong> rename &quot;Codice comune&quot;,PRO_COM_T ./comuni.csv</pre><p>La sintassi è molto leggibile. Qualche nota:</p><ul><li>ai nomi di campo si fa riferimento con $ seguito da nome campo. Qui sono state aggiunte le parentesi graffe, perché siamo in presenza di nomi “speciali”, con spazi e accentate;</li><li>viene applicato il comando <a href="https://miller.readthedocs.io/en/latest/reference-verbs.html#clean-whitespace"><em>clean-whitespace</em></a> (in Miller si chiamano “verbi”), per rimuovere eventuali spazi bianchi “in più”, ovvero 1 o più a inizio e fine cella, e più di 1 tra caratteri in un cella;</li><li>l’opzione -I fa in modo che il comando lavori in sovrascrittura sul file.</li></ul><p>In ultimo si è scelto di “standardizzare” il codice ISTAT dei comuni, da campo numerico a campo testuale a 6 caratteri: ad esempio trasformare il codice 1001 del comune di Agliè in “001001”. <br>Con Miller sfruttano il “verbo” <a href="https://miller.readthedocs.io/en/latest/reference-verbs.html#put"><em>put</em></a> e la funzione fmtnum:</p><pre>mlr -I --csv put &#39;$PRO_COM_T=fmtnum($PRO_COM_T,&quot;%06d&quot;)&#39; ./comuni.csv</pre><h4>Elaborazione dati geografici</h4><p>Ancora una volta la <strong>fonte</strong> è <strong>ISTAT</strong>, in particolare la versione generalizzata dei “confini delle unità amministrative a fini statistici”:<br><a href="https://www.istat.it/storage/cartografia/confini_amministrativi/generalizzati/Limiti01012020_g.zip">https://www.istat.it/storage/cartografia/confini_amministrativi/generalizzati/Limiti01012020_g.zip</a>.</p><p>Sono dati aggiornati a gennaio 2020 con queste caratteristiche:</p><ul><li>formato Shapefile</li><li><em>encoding</em> UTF-8;</li><li>sistema di coordinate <a href="https://epsg.io/32632">EPSG:32632</a>;</li><li>tipo geometrico Polygon;</li></ul><p>Queste le informazioni di sintesi sullo schema:</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/f2c8ca0b86621b98665c08c7022a5b23/href">https://medium.com/media/f2c8ca0b86621b98665c08c7022a5b23/href</a></iframe><p>Come scritto nell’<a href="https://medium.com/tantotanto/il-decreto-di-natale-in-chilometri-8af38744a7d5"><strong>articolo che presenta il progetto</strong></a>, dato un comune con non più di <strong>5.000 abitanti</strong>, e il suo confine, per calcolare l’area in cui da questo è possibile spostarsi (nei giorni 28, 29, 30 dicembre 2020 e 4 gennaio 2021), è necessario per ogni comune:</p><ul><li>calcolare l’area di <strong>buffer</strong> attorno al confine, di <strong>30.000 metri</strong>;</li><li>rimuovere da questa l’eventuale <strong>area</strong> dei <strong>comuni</strong> <strong>capoluogo</strong> che ricadono all’interno;</li><li>rimuovere la parte che va <strong>al di fuori</strong> dei <strong>confini nazionali</strong>.</li></ul><p>Il <em>buffer</em>, il luogo dei punti distanti 30.000 metri dal confine comunale, è stato calcolato tramite <em>ogr2ogr</em>:</p><pre>ogr2ogr -t_srs EPSG:4326 ./comuni_30cappa_5mila.shp ./comuni.shp \<br>-dialect sqlite \<br>-sql &quot;SELECT PRO_COM_T,COD_REG,COMUNE,Abitanti,st_buffer(comuni.geometry,30000) AS geom FROM comuni where Abitanti &lt;= 5000&quot;</pre><p>Alcune note:</p><ul><li>come<strong> sistema di coordinate</strong> di <em>output</em> è stato scelto EPSG:4326, perché compatibile in modo nativo con le librerie per la pubblicazione di mappe sul <em>web</em>;</li><li>il <em>buffer</em> viene calcolato tramite una interrogazione <strong>SQL </strong>di tipo <strong>spaziale</strong>, sfruttando il dialetto “sqlite” e la funzione <a href="https://www.gaia-gis.it/gaia-sins/spatialite-sql-latest.html#:~:text=space)-,Buffer">ST_BUFFER</a>. Questa vuole come argomenti la colonna geometrica e la distanza (di <em>default</em> usando l’unità di misura nativa, che qui sono metri);</li><li>vengono estratte soltanto alcune colonne (codice comunale a 6 caratteri, codice regionale numerico e numero di abitanti).</li></ul><p>I <strong>poligoni</strong> dei <strong>capoluoghi</strong> sono tutti quelli che nel <em>file</em> di <em>input</em> hanno CC_UTS==1. Vengono estratti con <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference">Mapshaper</a>:</p><pre>mapshaper ./comuni.shp \<br>-filter &#39;CC_UTS==1&#39; \<br>-filter-fields PRO_COM_T,COD_REG,COMUNE,Abitanti \<br>-proj wgs84 \<br>-o ./capoluoghi_4326.shp</pre><p>La sintassi è ancora una volta molto leggibile. Vengono estratti soltanto alcuni campi (come nella creazione dei <em>buffer</em>) e per le ragioni precedenti viene scelto EPSG:4326 come sistema di coordinare di <em>output</em>.</p><p>Per creare il <strong>limite</strong> <strong>poligonale</strong> dello <strong>stato</strong> <strong>italiano</strong>, basta unire — fare il <em>dissolve</em> — dei poligoni dei comuni del file di <em>input</em>.<br>Con Mapshaper:</p><pre>mapshaper ./comuni.shp -dissolve \<br>-proj wgs84 \<br>-o precision=0.000001 ./italia.shp</pre><p>Il comando <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-dissolve">dissolve</a> è il cuore del processo e ancora una volta in <em>output</em> EPSG:4326.<br>Questo <em>file</em> viene usato per <strong>ritagliare</strong> le aree di <em>buffer</em> dei comuni. Si utilizza il comando <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-clip">clip</a> di Mapshaper:</p><pre>mapshaper ./comuni_30cappa_5mila.shp -clip ./italia.shp -o ./output.shp</pre><h4>Elaborazione dati per il sito web</h4><p>La pagina web per presentare le aree in cui — per ogni comune — è possibile spostarsi ha una struttura di URL di questo tipo: <a href="https://ondata.github.io/30cappa/mappa.html?id=067042.">https://ondata.github.io/30cappa/mappa.html?id=067042.</a></p><p>Al cambio di id, che qui è il codice ISTAT del comune con la rappresentazione a 6 caratteri , viene aperta una mappa centrata sul <em>buffer</em> di quel comune, con evidenziati l’area in cui è possibile spostarsi e il limite comunale.</p><p>Il poligono del comune viene restituita in risposta a un’interrogazione alle <a href="https://carto.com/developers/sql-api/">API SQL di CARTO</a>, mentre quello del <em>buffer </em>è in risposta a una chiamata diretta a un file GeoJSON statico.<br>È quindi necessario generare circa <strong>5.500 file</strong>, perché tanti sono i comuni con abitanti &lt;=5.000.</p><p>Il comando essenziale “geografico” mancante è quello che sottrae all’aerea in cui ci si può spostare, quella occupata dai comuni capoluogo. Nell’immagine di sotto, ad esempio, quella dei capoluoghi di Teramo e Ascoli Piceno.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*t1gzDpFLwe5IWe9s" /></figure><p>Per rimuovere queste aree, è stato utilizzato SpatiaLite e una sua funzione specializzata, <a href="https://www.gaia-gis.it/fossil/libspatialite/wiki?name=ST_Cutter">ST_CUTTER</a> (attiva dalla versione 4.4 e <strong>finanziata dalla Regione Toscana</strong>). Questo per la sua semplicità di utilizzo e rapidità di esecuzione.</p><p>Si inizia allora dall’<strong>importare</strong> i file Shapefile in un nuovo <em>database</em> in formato SpatiaLite. La struttura del comando è:</p><pre>ogr2ogr -f SQLite -dsco SPATIALITE=YES ./db.sqlite ./input.shp -nln nomeTabellaOutput -lco SPATIAL_INDEX=YES -nlt PROMOTE_TO_MULTI</pre><p>Il <em>layer</em> dei buffer ha una certa complessità. È opportuno in questi casi imporre una <strong>validazione geometrica</strong> e conseguente <strong>correzione </strong>(una geometria non validata potrebbe produrre errori e bloccare il processo):</p><pre>ogrinfo ./db.sqlite -sql &#39;UPDATE nomeTabella SET GEOMETRY = MakeValid(GEOMETRY) WHERE ST_IsValid(GEOMETRY) &lt;&gt; 1;&#39;</pre><p>Si tratta di una <em>query</em> SQL di aggiornamento, in cui viene applicata la funzione “MakeValid” alla colonna geometrica (<a href="http://www.gaia-gis.it/gaia-sins/spatialite-sql-5.0.0.html">qui</a> l’elenco delle funzioni). L’<em>utility</em> <em>ogrinfo </em>viene usata come “intermediaria”: non è necessario infatti usare un <em>client</em> nativo SQLite o SpatiaLite.</p><p>Il passo successivo è quello di “<strong>bucare</strong>” i <strong>poligoni</strong> dei <em>buffer</em> con i poligoni dei limiti amministrativi dei capoluogo. Viene fatto appunto a partire dalla funzione <em>ST_CUTTER</em> di SpatiaLite.<br>Ha bisogno di due oggetti: quello di <em>input</em> e quello che farà da “lama” di taglio, ovvero i nostri poligoni di <em>buffer</em> e quelli dei limiti dei capoluoghi.</p><p>A partire ad esempio dai tre poligoni di <em>buffer</em> di sotto in grigio, il poligono del capoluogo in bianco sarà usato per ritagliare questi tre.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/872/0*7IuCez8Lk8_ACZZW" /></figure><p>Il risultato è quello che si vede nell’immagine seguente (in cui i poligoni sono stati volutamente spostati e ridimensionati):</p><ul><li>ognuno dei poligoni di <em>input</em> viene “tagliato” dal poligono che fa da “lama”;</li><li>ognuno dei poligoni di <em>input</em> viene, in questo caso, diviso in due parti.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*S5nYxjGkslapqc0Y" /></figure><p>Dati due <em>layer</em> di un <em>database</em> SpatiaLite, la <em>query</em> per realizzare quanto descritto è (per eseguire il “taglio”):</p><pre><strong>SELECT</strong> ST_Cutter(&#39;input-db&#39;, &#39;input-layer&#39;, &#39;input-geometry-field&#39;, &#39;lama-db&#39;, &#39;lama-layer&#39;, &#39;lama-geometry-field&#39;, &#39;output-layer&#39;, 1, 1);</pre><p>Gli argomenti principali della funzione sono il nome del <em>layer</em> di <em>output</em>, quello del db che contiene il <em>layer</em> di <em>input</em>, il nome del <em>layer</em> di <em>input</em> e il nome del campo geometrico del <em>layer</em> di <em>input</em>. Lo stesso per la “lama”.<br>Se si importano nel db SpatiaLite i due <em>layer</em> e gli viene assegnato rispettivamente il nome di “input” e “lama”, la <em>query</em> sarà:</p><pre><strong>SELECT</strong> ST_Cutter(NULL, &#39;input&#39;, NULL, NULL, &#39;lama&#39;, NULL, &#39;output&#39;, 1, 1);</pre><p><strong>NOTA BENE</strong>: se il database corrente è quello che contiene sia il <em>layer</em> di <em>input</em> che la “lama”, il nome del db si può impostare a NULL. Se il campo geometrico dei due <em>layer</em> è uno, non è necessario specificarne il nome e si può impostare a NULL.</p><p>Il <em>layer</em> di <em>output</em> avrà associata una tabella come quella sottostante. Questa è generata a partire dalle geometrie delle immagini soprastanti.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/64bb061b3fbefb823202f171e6e5809f/href">https://medium.com/media/64bb061b3fbefb823202f171e6e5809f/href</a></iframe><p>Alcune note:</p><ul><li>“PK_UID” è la colonna con gli ID (gli identificativi numerici distinti) dei 6 poligoni di <em>output</em>;</li><li>“input_input_pk_uid” è la colonna con gli ID dei 3 poligoni di <em>input</em>. È evidente che ognuno viene diviso in due parti;</li><li>“blade_lama_pk_uid” è la colonna con gli ID dei poligoni che fanno da lama. Qui è uno solo. <strong>Contiene valori nulli per tutti gli oggetti che ricadono fuori la “lama”</strong>.</li></ul><p>Quest’ultimo è un punto chiave: basterà rimuovere i poligoni con valori NULL per il campo “blade_lama_pk_uid” e si otterrà il <em>layer</em> dei poligoni di <em>buffer</em> “bucato”, in corrispondenza dei poligoni dei comuni capoluogo (che hanno fatto da “lama”).</p><p>Nello <em>script</em> il passo successivo è proprio questo. Da notare che i <em>layer</em> che fanno da <em>input</em> e da “lama” sono stati denominati “a” e “b”, mentre quello di <em>output</em> è denominato “out”.</p><pre>ogrinfo ./db.sqlite -sql &#39;create table buffer_clipped AS<br>SELECT<br>  PRO_COM_T,<br>  COMUNE,<br>  geometry<br>FROM<br>(SELECT<br>  &quot;input_a_ogc_fid&quot;,<br>  &quot;blade_b_ogc_fid&quot;,<br>  a.pro_com_t PRO_COM_T,<br>  a.comune COMUNE,<br>  out.&quot;geometry&quot;<br>FROM<br>  &quot;out&quot;<br>  LEFT JOIN a ON out.input_a_ogc_fid = a.ogc_fid<br>WHERE<br>  &quot;blade_b_ogc_fid&quot; IS NULL);&#39;</pre><p>Una volta creato e esportato questo <em>layer</em>, vengono <strong>uniti</strong> nuovamente quei <strong>poligoni</strong> appartenenti allo <strong>stesso</strong> <strong>comune</strong>, eventualmente separati in precedenza.</p><pre>mapshaper ./input.shp -dissolve PRO_COM_T copy-fields=COMUNE -o precision=0.000001 ./output.shp</pre><p>Viene usato ancora una volta il comando <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-dissolve">dissolve</a> di Mapshaper, in cui è possibile impostare quale campo usare come criterio di “unione” (qui è PRO_COM_T) e quale/i campi copiare in <em>output</em> (qui è COMUNE).</p><p>Infine, solo ad uso delle mappa <em>online</em> che è stata prodotta, è stato <strong>generato un file</strong> <strong>GeoJSON</strong> per <strong>ognuno</strong> dei <strong>poligoni di</strong> buffer creato.</p><pre>mapshaper ./buffer.shp -split PRO_COM_T -o format=geojson ./output_folder/</pre><p>Qui il comando è <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-split">split</a>, a cui si passa come argomento il nome di campo in cui cercare valori distinti, a partire dai quali creare file con quel nome. In <em>output c</em>irca 5.500 file.</p><h3>Note conclusive</h3><p>Lo <a href="https://github.com/ondata/30cappa/blob/main/script/arigadicomando/dataETL.sh"><em>script bash</em></a> non è perfettamente coincidente con quanto descritto in questo articolo.<br>Qui alcuni comandi sono stati leggermente <strong>semplificati </strong>a vantaggio di una maggiore leggibilità.</p><p>Si sarebbe potuta usare anche <strong>una sola di queste <em>utility</em></strong> per fare tutto (SQLite/SpatiaLite la candidata principe). Ma alcune sono più <em>easy</em> e rapide in certe operazioni e questa era anche una buona occasione didattica per “toccare” un po’ 4 straordinari esempi di applicazione <em>open source</em> a riga di comando.<br>Anche Mapshaper sarebbe stato adatto per processare la gran parte del flusso, ma sembra esserci un problema nella procedura di ritaglio di poligoni sovrapposti e con il comando <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-erase">erase</a>.</p><p>L’occasione è stata ottima per avere confermato ancora una volta come il <strong>SQL geografico</strong> e SpatiaLite siano degli strumenti di grande efficienza e comodità (grazie a <a href="https://groups.google.com/g/spatialite-users/search?q=author%3Aa.furieri%40lqt.it">Sandro Furieri</a> e a tutti gli sviluppatori di SpatiaLite).<br>Mi ha colpito molto scoprire come ci siano <a href="https://www.google.com/search?q=spatialite+%22st_cutter%22&amp;rlz=1C1GCEA_enIT905IT905&amp;oq=spatialite+%22st_cutter%22&amp;aqs=chrome..69i57j33i160l2.8946j0j4&amp;sourceid=chrome&amp;ie=UTF-8">pochissime tracce web</a> della funzione ST_CUTTER. Peccato, è un gioiellino.</p><p>Infine un grosso <strong>grazie</strong> a <strong>Maurizio</strong> e <strong>Salvatore</strong>, per la disponibilità costante al confronto, per le note, i rilanci e per essere come sono 🤣</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9b95e4dbc975" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/lelaborazione-dei-dati-per-la-mappa-del-decreto-di-natale-in-chilometri-9b95e4dbc975">L’elaborazione dei dati per la mappa del decreto “di Natale”, in chilometri</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        <enclosure length="12604908" type="application/zip" url="https://www.istat.it/storage/cartografia/confini_amministrativi/generalizzati/Limiti01012020_g.zip"/><itunes:explicit>no</itunes:explicit><itunes:keywords>geospatial, bash, spatialite, cli, gis</itunes:keywords></item>
        <item>
            <title><![CDATA[Il decreto “di Natale”, in chilometri]]></title>
            <link>https://medium.com/tantotanto/il-decreto-di-natale-in-chilometri-8af38744a7d5?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/8af38744a7d5</guid>
            <category><![CDATA[gis]]></category>
            <category><![CDATA[covid19]]></category>
            <category><![CDATA[italy]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Tue, 22 Dec 2020 10:29:29 GMT</pubDate>
            <atom:updated>2020-12-29T13:53:07.212Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<h4>Sono previsti spostamenti di 30 chilometri: ecco dove, quando e quanto</h4><p>Il <a href="https://www.gazzettaufficiale.it/eli/id/2020/12/18/20G00196/s">decreto legge numero 172 del 18 dicembre 2020</a> — detto in maniera un po’ fastidiosa “di Natale” — definisce delle misure urgenti per le festività natalizie e di inizio anno nuovo.</p><p>In questo si legge:</p><blockquote>nei giorni <strong>28, 29, 30 dicembre 2020 </strong>e <strong>4 gennaio 2021 </strong>si applicano le misure di cui all’articolo 2 del <a href="http://www.governo.it/sites/new.governo.it/files/dpcm_20201203_txt.pdf">medesimo decreto</a> del Presidente del Consiglio dei ministri 3 dicembre 2020, ma sono altresì <strong>consentiti </strong>gli <strong>spostamenti </strong>dai <strong>comuni </strong>con <strong>popolazione non superiore a 5.000 abitanti</strong> e <strong>per una distanza non superiore a 30 chilometri dai relativi confini</strong>, con <strong>esclusione </strong>in ogni caso degli <strong>spostamenti verso i capoluoghi di provincia</strong>.</blockquote><p>Questo articolo a cura di <a href="https://twitter.com/aborruso"><strong>aborruso</strong></a>, <a href="https://twitter.com/napo"><strong>napo</strong></a> e <a href="https://twitter.com/totofiandaca"><strong>pigreco</strong></a>, scritto per restituire un quadro sul contesto numerico e geografico di questa parte del decreto.</p><p>Se vuoi <strong>subito </strong>vedere in quale aree ti potrai spostare, a partire dal tuo “piccolo” comune — senza leggere tutto il post — <a href="https://ondata.github.io/30cappa/"><strong>fai click qui</strong></a><strong> 🗺</strong>.</p><h4>I comuni con popolazione non superiore ai 5.000 abitanti</h4><p>Sono tantissimi in Italia, quelli in rosso nell’immagine sottostante.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*NJ2SOs85JkCIDfZU" /></figure><p>In numeri (al giorno 27 settembre 2020):</p><ul><li>sono <strong>5508</strong> comuni su un totale di <strong>7904</strong> (circa il 70%);</li><li>questi coprono circa il <strong>55% </strong>della superficie del nostro territorio;</li><li>sono abitati da circa <strong>10.000.000</strong> di persone, circa il <strong>16%</strong> della popolazione complessiva.</li></ul><p>La fonte è ISTAT sia per i <a href="http://demo.istat.it/">dati sulla popolazione</a>, che per i <a href="https://www.istat.it/storage/cartografia/confini_amministrativi/generalizzati/Limiti01012020_g.zip">dati spaziali/geografici</a>.</p><h4>Quanto sono “grandi” 30 chilometri</h4><p>La risposta è solo apparentemente tautologica. Nelle distanze c’è molto di percettivo, di sentito, di legato al contesto.</p><p>30 chilometri sono poco meno della distanza in linea retta dall’aeroporto di Fiumicino a Villa Ada (a Roma). Letta così a molti probabilmente farà pensare a una misura “piccola”.<br>In automobile quanti km sarebbero e soprattutto in quanti minuti si percorrerebbero? E in linea retta (quindi ad esempio a piedi) che pendenze si dovrebbero affrontare, che barriere fisiche sarebbe necessario superare?</p><p>Il decreto fissa la cosa in modo semplice: “una distanza non superiore a 30 chilometri dai relativi confini comunali”, ovvero quello che nei sistemi informativi geografici è un <a href="https://docs.qgis.org/3.16/en/docs/gentle_gis_introduction/vector_spatial_analysis_buffers.html?highlight=buffer"><strong><em>buffer</em></strong></a> di 30.000 metri attorno al limite comunale del comune di cui si vuole calcolare.</p><p>Prendiamo come esempio il comune di <a href="https://www.wikiwand.com/it/Torano_Nuovo">Torano Nuovo</a>, in provincia di Teramo, in Abruzzo, con codice ISTAT 067042. È abitato da 1552 persone (dati ISTAT gennaio 2020) e copre un’area di circa 1050 ettari (il piccolo poligono di sotto).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1_fwwGs3giEdapLL" /></figure><p>L’area di 30 chilometri attorno al confine comunale — il <strong><em>buffer</em></strong> — è quella in arancione della successiva immagine.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*yDswh7vpfrK5Vlx2" /></figure><p>Nel decreto è riportato inoltre “con <strong>esclusione </strong>in ogni caso degli <strong>spostamenti </strong>verso i <strong>capoluoghi di provincia</strong>”.</p><p>E all’interno di quest’area di 30 km ricadono i comuni capoluogo di Ascoli Piceno e Teramo (sotto in verde), che saranno quindi da rimuovere dall’area.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*QupcDcWmrduUm_1D" /></figure><p>Nel precedente <a href="http://www.governo.it/sites/new.governo.it/files/dpcm_20201203_txt.pdf">DPCM del 3 dicembre</a> a cui il “decreto di Natale” fa riferimento si legge:</p><p><em>Ai sensi dell’articolo 1, comma 2, del decreto-legge 2 dicembre 2020, n. 158, dal 21 dicembre 2020 al 6 gennaio 2021 è </em><strong><em>vietato</em></strong><em>, nell’ambito del territorio nazionale, ogni </em><strong><em>spostamento </em></strong><em>in entrata e in uscita </em><strong><em>tra i territori di diverse regioni o province autonome</em></strong></p><p>Avevamo quindi pensato che fosse necessario verificare anche se un comune è limitrofo a dei <strong>confini regionali</strong>. Il comune di Torano Nuovo — in Abruzzo — è vicino al confine regionale tra Abruzzo e Marche e pensavamo fosse necessario rimuovere la parte dell’area che ricade nelle Marche.<br>Sembra che non sia così 🤔</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OIwGFM2tEVa-BTLi" /></figure><p>Quindi, dato un comune con non più di 5.000 abitanti, e il suo confine, per calcolare l’area in cui da questo è possibile spostarsi (<em>nei giorni </em><strong><em>28, 29, 30 dicembre 2020 </em></strong><em>e </em><strong><em>4 gennaio 2021</em></strong>):</p><ul><li>si calcola area di <em>buffer</em> attorno al confine, di 30.000 metri;</li><li>si rimuove da questa l’eventuale area dei comuni capoluogo che ricadono all’interno;</li><li>si rimuove la parte che va fuori dai confini nazionali.</li></ul><p>Gli abitanti del comune di Torano Nuovo potranno quindi nei giorni <strong>28</strong>, <strong>29</strong>, <strong>30 dicembre 2020 </strong>e <strong>4 gennaio 2021</strong> — e nel rispetto di quanto scritto nel decreto legge e nei DPCM in questo citati — spostarsi nell’<a href="https://ondata.github.io/30cappa/mappa.html?id=067042">area arancione sottostante</a>.</p><figure><a href="https://ondata.github.io/30cappa/mappa.html?id=067042"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fsb8Z2MHW-4atR5MBhMZRA.png" /></a></figure><h4>Una pagina per sfogliare il catalogo dei comuni coinvolti e visualizzare la mappa</h4><p>Abbiamo realizzato <strong>una </strong><a href="https://ondata.github.io/30cappa/"><strong>pagina</strong></a> in cui è possibile cercare il comune di interesse (con abitanti non superiori a 5.000), inserendo il nome del comune o anche il suo codice ISTAT. Nell’immagine di sotto è evidenziato in <strong>1</strong>.<br>Per <strong>visualizzare la mappa</strong> delle aree in cui sono consentiti gli spostamenti, si potrà fare click su “vedi”. Sotto è evidenziato in <strong>2.</strong></p><figure><a href="https://ondata.github.io/30cappa/"><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZyZ5E8spu2MrCZRM-96xgw.png" /></a></figure><h4>Come è stato fatto</h4><p>Tutto questo, partendo dai dati di origine, può essere realizzato attraverso vari strumenti/processi. Il “nostro” trio, ha deciso di farlo ognuno con lo strumento preferito, arrivando ad ottenere sempre lo stesso risultato.</p><p>In ordine di pubblicazione</p><ul><li><a href="https://twitter.com/napo">napo</a>, ha creato un <a href="https://github.com/aborruso/30cappa/blob/main/script/conpython/30cappa.ipynb"><em>python notebook</em></a>, basato principalmente su <a href="http://geopandas.org">geopandas</a> pronto per essere usato in <a href="https://colab.research.google.com/drive/1nKTrFCjYKzE-la12QyIRHEmd5GtEZjfD?usp=sharing">Google Colab</a> e <a href="https://mybinder.org/v2/gh/aborruso/30cappa/HEAD">MyBinder</a>.</li><li><a href="https://twitter.com/totofiandaca">pigreco</a> ha fatto tutto con <a href="https://pigrecoinfinito.com/2020/12/26/il-decreto-di-natale-in-chilometri/">SpatiaLite e QGIS</a>;</li><li><a href="https://twitter.com/aborruso">aborruso</a> <a href="https://medium.com/tantotanto/lelaborazione-dei-dati-per-la-mappa-del-decreto-di-natale-in-chilometri-9b95e4dbc975">“a riga di comando” con uno <em>script shell</em></a>.</li></ul><h4>“Se sono un cittadino di uno di questi Comuni e mi muovo nell’area calcolata, sto rispettando la legge?”</h4><p>La domanda è più che lecita ed è quella che ci siamo posti anche noi, che da buoni “impallinati sul tema geospaziale” sappiamo benissimo quanti tranelli ci sono dietro ai confini comunali e la percezione delle distanze quando si parla di quelle aeree (“nel raggio di ..”) o di quelle su un grafo stradale.</p><p>Non possiamo dire che i nostri calcoli hanno valore legale, ma non possiamo nemmeno dire di avere sbagliato visto che le indicazioni fornite <em>“sono […] consentiti gli spostamenti dai comuni con popolazione non superiore a 5.000 abitanti e per una distanza non superiore a 30 chilometri dai relativi confini, con esclusione in ogni caso degli spostamenti verso i capoluoghi di provincia.”</em></p><p>Rimane comunque una distanza — che una volta calcolata e rappresentata su mappa — non pare indifferente. Sarebbe stato meglio definirla in relazione al grafo stradale?</p><h4>I tranelli dei confini comunali</h4><p>Indicare le distanze senza spiegare come si percorrono è un problema classico: un luogo può essere a 200 metri in linea d’aria rispetto ad un altro, ma se nel mezzo c’è un fiume o altro ostacolo allora per raggiungerlo bisognerà trovare il primo passaggio di collegamento che probabilmente farà percorrere più della distanza scelta.</p><p>Quando poi la scala aumenta, come nel nostro caso, allora, oltre a mettersi di mezzo confini naturali come specchi d’acqua, montagne, costa ed altro ancora ci si aggiungono i problemi delle <a href="https://it.wikipedia.org/wiki/Enclave_ed_exclave">enclave ed exclave</a>.<br>Su questo l’Italia offre un sacco di situazioni curiose e spesso sottovalutate.<br>Uno fra i più popolari è il caso di <a href="https://it.wikipedia.org/wiki/Campione_d%27Italia">Campione d’Italia</a> i cui comuni confinanti sono tutti della Svizzera italiana in quanto si trova proprio al di fuori del confine italiano. Un comune con 2003 abitanti ma che, per “usufruire’ dei 30km di distanza, comunque devono passare il confine svizzero.</p><p>Altro caso interessante è quello del territorio dell’Alta Valmarecchia dove, nel 2009, <a href="https://it.wikipedia.org/wiki/Variazioni_territoriali_e_amministrative_delle_Marche#2009">10 comuni sono passati dalle Marche all’Emilia-Romagna,</a> creando così una enclave.<br>La lista potrebbe proseguire a lungo. Di certo, in virtù dei 30 km, molte di queste si “fondono” e danno il ‘vantaggio” di allungare gli spazi come il caso del Comune di <a href="https://it.wikipedia.org/wiki/Fardella">Fardella</a> che con i suoi 577 abitanti e le sue enclave, riesce già a confinare con nove comuni.</p><p>Ragionamenti analoghi possiamo farli poi per quei comuni circondati dall’acqua come le isole (ma non solo).</p><p>Ulteriori problemi possono venire poi dai dati: il calcolo è fatto usando gli ultimi dati ISTAT disponibili per la popolazione il cui aggiornamento è di gennaio 2020 e qualcosa potrebbe essere cambiato in particolare nei valori prossimi al 5000 (nota: il comune di Castelnuovo Scrivia ha 5001 abitanti), così come il fatto che, per questioni di performance, abbiamo preferito usare i confini amministrativi generalizzati (dove i confini sono leggermente meno precisi).</p><h4>Nota sull’output prodotto</h4><p>Il processamento dei dati che abbiamo descritto, può produrre dei casi come quello dell’immagine sottostante, relativa all’area di 30 chilometri attorno al comune di Nissoria, in Sicilia. <br>In corrispondenza del <strong>punto 1 </strong>è evidenziata una piccola aerea arancione, isolata. Ci si può recare lì?<br>Nelle <a href="http://www.governo.it/it/articolo/domande-frequenti-sulle-misure-adottate-dal-governo/15638"><strong>FAQ ufficiali</strong></a><strong> </strong>sul decreto si legge “<em>esclusione in ogni caso degli spostamenti verso i capoluoghi di Provincia</em>”, quindi ad Enna non si può andare.<br>La nostra interpretazione è che ci si possa spostare verso queste aree isolate attraversando aree di capoluogo, purché all’interno dei 30 km e al di fuori del limite amministrativo di un capoluogo.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/635/1*mPY_5fuDO3HP1seeNzUy8w.png" /></figure><h4>Un bot telegram dedicato</h4><p><a href="https://twitter.com/lrssvt">Salvatore Larosa</a> ha creato un <a href="https://t.me/trentacappa_bot">bot Telegram</a> che — a partire dal nome di uno dei comuni con non più di 5000 abitanti — restituisce l’elenco dei comuni limitrofi in cui è possibile spostarsi e il link alle nostre mappe.</p><p>È bello che, prima di andare <em>online </em>e in poche ore, si è creato già un servizio correlato al tema e che dialoga con il nostro (un grazie a Salvatore).</p><h3>In conclusione …</h3><p>Per noi questo è stato un momento di <strong>confronto</strong>, di <strong>divertimento</strong>, di <strong>imparare l’uno dall’altro</strong> e di <strong>condividere </strong>questa storia con chi ci sta leggendo.</p><p>Di certo non è nostra intenzione quello di invitare gli abitanti dei “piccoli Comuni’ a muoversi liberamente: <strong>crediamo sia fondamentale il buon senso</strong>.</p><p>Forse siamo un po’ troppo pignoli, ma pensiamo che quando le parole non sono sufficienti per spiegare i concetti, forse è opportuno fornire strumenti come le mappe per far capire cosa si vuole ottenere.</p><p><strong>Buon Natale</strong> ;)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8af38744a7d5" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/il-decreto-di-natale-in-chilometri-8af38744a7d5">Il decreto “di Natale”, in chilometri</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        <enclosure length="305211" type="application/pdf" url="http://www.governo.it/sites/new.governo.it/files/dpcm_20201203_txt.pdf"/><itunes:explicit>no</itunes:explicit><itunes:keywords>gis, covid19, italy</itunes:keywords></item>
        <item>
            <title><![CDATA[Le mappe catastali dell’Agenzia delle Entrate diventano finalmente utilizzabili]]></title>
            <link>https://medium.com/tantotanto/le-mappa-castali-diventano-finalmente-utilizzabili-821db2f84533?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/821db2f84533</guid>
            <category><![CDATA[wms]]></category>
            <category><![CDATA[geodata]]></category>
            <category><![CDATA[italia]]></category>
            <category><![CDATA[catasto]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Fri, 25 Sep 2020 10:14:25 GMT</pubDate>
            <atom:updated>2023-01-26T10:37:33.451Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f30eMluv7nfSAuq6WFUz7w.png" /></figure><h4>E ha senso finalmente dedicargli un mini tutorial</h4><p>Alla fine del <strong>2017</strong> le mappe del catasto italiano venivano messe online dall&#39;Agenzia delle Entrate, purtroppo con una <strong>licenza</strong> che le <strong>rendeva</strong> pressoché <strong>inutilizzabili</strong>: <strong>nessun uso commerciale</strong> e <strong>nessuna opera derivata</strong>, ovvero la licenza <a href="https://creativecommons.org/licenses/by-nc-nd/4.0/deed.it">CC BY-NC-ND 4.0</a>.</p><p>Ai tempi <a href="https://forum.italia.it/t/il-catasto-va-online-ma-con-una-licenza-che-ne-blocca-totalmente-luso/1734">scrissi</a> una frase ironica, ma non campata in aria:</p><blockquote>Posso essenzialmente stamparmi qualche cartina, e appenderla nel bagno di casa. Già in un bagno pubblico vado fuori licenza.</blockquote><p>Ma da <a href="https://www.agenziaentrate.gov.it/portale/-/cs-24-settembre-2020">ieri</a> (24 settembre 2020) <strong>non è più così</strong> e sono pubblicate con una <strong>licenza</strong> che ne <strong>consente</strong> un <strong>utilizzo pieno</strong>, con il solo obbligo di citazione della fonte (la <a href="https://creativecommons.org/licenses/by/4.0/deed.it"><strong>CC BY 4.0</strong></a>).</p><p>È un’ottima notizia!</p><p>La vecchia licenza per me era un <strong>blocco</strong>, anche <strong>creativo</strong>. Che senso aveva ad esempio fare un <strong><em>tutorial</em></strong> su come <strong>estrarre</strong> — a partire da una lista di <strong>coppie di coordinate</strong> — i <strong>numeri delle particelle</strong> corrispondenti?<br>La nuova licenza, mi “titilla il velopendulo” (cit.), mi rende libero ed ecco una piccola guida d’esempio.</p><h3>Come estrarre le particelle catastali a partire da un elenco di coppie di coordinate</h3><p>I dati catastali sono pubblicati al momento soltanto in <a href="https://www.wikiwand.com/it/Web_Map_Service">WMS</a>, un servizio pensato per la &quot;<strong>rappresentazione</strong>&quot; del dato: di base produce immagini.<br>L&#39;URL del WMS del catasto è <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php">https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php</a>.<br>Tutte le caratteriste (sistemi di coordinate, elenco e nomi dei layer, ecc.) del servizio sono disponibili facendo una richiesta <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?service=wms&amp;version=1.1.1&amp;request=GetCapabilities">GetCapabilities</a>.</p><p>Nel WMS può essere reso disponibile il metodo <a href="https://docs.geoserver.org/stable/en/user/services/wms/reference.html#getfeatureinfo">GetFeatureInfo</a>, che consente di <strong>estrarre</strong> gli <strong>attributi</strong> di un <em>layer</em> in una determinata posizione: al <em>click</em> su un pixel dell&#39;immagine - al click su un punto - vengono restituite le informazioni sull&#39;oggetto &quot;toccato&quot;.</p><p>Per questi dati il <strong>metodo</strong> è reso <strong>disponibile</strong> ed è un modo per portare a termine l’obiettivo di questo <em>tutorial</em>.</p><p>Il <em>layer</em> delle <em>particelle</em> è <em>interrogabile</em>, difatti nelle <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?service=wms&amp;version=1.1.1&amp;request=GetCapabilities"><em>capabilities</em></a> si può leggere queryable=&quot;1&quot; (quando non lo è, è 0):</p><pre>&lt;Layer queryable=&quot;1&quot; opaque=&quot;0&quot; cascaded=&quot;0&quot;&gt;<br>  &lt;Name&gt;CP.CadastralParcel&lt;/Name&gt;<br>  &lt;Title&gt;Particelle&lt;/Title&gt;<br>  &lt;Abstract&gt;Il layer contiene le particelle catastali.Costituisce distinta particella catastale ogni porzione continua di terreno che sia della medesima qualità e classe o abbia la stessa destinazione d’uso, che sia situata in un medesimo comune ed appartenga allo stesso possessore.Le particelle, i fabbricati, le strade e le acque, in questo servizio presentati su layer separati, coprono l’intero territorio nazionale, ad eccezione dei territori nei quali il catasto è gestito, per delega dello Stato, dalle Province Autonome di Trento e di Bolzano. Nel layer Particelle sono rappresentati anche i bordi dei fabbricati eventualmente presenti all’interno delle particelle.&lt;/Abstract&gt;<br>  &lt;LatLonBoundingBox minx=&quot;2&quot; miny=&quot;33&quot; maxx=&quot;19&quot; maxy=&quot;48&quot;/&gt;<br>  &lt;BoundingBox SRS=&quot;EPSG:6706&quot; minx=&quot;2&quot; miny=&quot;33&quot; maxx=&quot;19&quot; maxy=&quot;48&quot;/&gt;<br>  &lt;MetadataURL type=&quot;ISO19115:2003&quot;&gt;<br>    &lt;Format&gt;application/vnd.ogc.csw.capabilities.response_xml&lt;/Format&gt;<br>    &lt;OnlineResource xlink:type=&quot;simple&quot; xlink:href=&quot;https://csw.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/csw?SERVICE=CSW&amp;amp;VERSION=2.0.2&amp;amp;REQUEST=GetRecordById&amp;amp;ID=age:D_0000_ITALIA&amp;amp;ElementSetName=full&amp;amp;outputSchema=csw:IsoRecord&quot;<br>      xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;/&gt;<br>  &lt;/MetadataURL&gt;<br>  &lt;Style&gt;<br>    &lt;Name&gt;default&lt;/Name&gt;<br>    &lt;Title&gt;default&lt;/Title&gt;<br>    &lt;LegendURL width=&quot;89&quot; height=&quot;20&quot;&gt;<br>      &lt;Format&gt;image/png&lt;/Format&gt;<br>      &lt;OnlineResource xlink:type=&quot;simple&quot; xlink:href=&quot;https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?language=ita&amp;amp;version=1.1.1&amp;amp;service=WMS&amp;amp;request=GetLegendGraphic&amp;amp;layer=CP.CadastralParcel&amp;amp;format=image/png&amp;amp;STYLE=default&quot;<br>        xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;/&gt;<br>    &lt;/LegendURL&gt;<br>  &lt;/Style&gt;<br>  &lt;ScaleHint min=&quot;0.00997805696859274&quot; max=&quot;2.49451424214819&quot;/&gt;<br>&lt;/Layer&gt;</pre><p>Una richiesta GetFeatureInfo per questo servizio ha questo schema di URL (gli a capo sono per renderlo leggibile):</p><pre>https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?<br>REQUEST=GetFeatureInfo&amp;<br>SERVICE=WMS&amp;<br>SRS=EPSG:3045&amp;<br>STYLES=&amp;<br>VERSION=1.1&amp;<br>FORMAT=image/png&amp;<br>BBOX=355714.5,4222470.1,355716.5,4222472.1&amp;<br>HEIGHT=9&amp;<br>WIDTH=9&amp;<br>LAYERS=CP.CadastralParcel&amp;<br>QUERY_LAYERS=CP.CadastralParcel&amp;<br>INFO_FORMAT=text/html&amp;<br>X=5&amp;<br>Y=5</pre><p>Per la descrizione di dettaglio di ogni parametro, suggerisco di leggere <a href="https://docs.geoserver.org/stable/en/user/services/wms/reference.html#getfeatureinfo">questa pagina</a>.<br>Qualche nota qui utile all&#39;obiettivo del <em>tutorial</em>.</p><p>SRS è per impostare il sistema di coordinate, che è da scegliere tra quelli previsti dal servizio. Qui verrà utilizzato il <a href="https://epsg.io/3045">3045</a> (ETRS89 / UTM zone 33N (N-E)).</p><p>BBOX (<em>bounding box</em>) è per definire l&#39;area di cui si vuole generare l&#39;<strong>immagine</strong> su cui fare la <em>query</em>. Perché il metodo WMS, vale la pena ribadirlo, espone una rappresentazione in pixel dei dati, su cui può essere possibile fare un interrogazione per <strong>singolo pixel</strong>. Le coordinate vanno inserite in questo ordine: minimo x, minimo y, massimo x, massimo y.</p><p>HEIGHT e WIDTH per definire le dimensioni in pixel dell&#39;immagine su cui fare la <em>query</em>.</p><p>LAYERS e QUERY_LAYERS per selezionare il layer da interrogare, che qui è CP.CadastralParcel.</p><p>INFO_FORMAT, per impostare il formato di output della risposta alla <em>query</em>.</p><p>E infine X e Y. Sono le coordinate in pixel, e lo 0 è in alto a sinistra. Se ho quindi un immagine in pixel di 9 x 9, il pixel centrale sarà quello di coordinate 5,5.</p><p>Se apro nel browser la <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?REQUEST=GetFeatureInfo&amp;SERVICE=WMS&amp;SRS=EPSG:3045&amp;STYLES=&amp;VERSION=1.1&amp;FORMAT=image/png&amp;BBOX=355714.5,4222470.1,355716.5,4222472.1&amp;HEIGHT=9&amp;WIDTH=9&amp;LAYERS=CP.CadastralParcel&amp;QUERY_LAYERS=CP.CadastralParcel&amp;INFO_FORMAT=text/html&amp;X=5&amp;Y=5">query</a> di sopra avrò le informazioni utili sulla particella che ricade sotto il pixel di mio interesse:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/513/1*K-CSLK3_8RxvGwoaOLbjrg.png" /></figure><p>Con i parametri che ho inserito, ho generato da un’area di un metro di lato un’immagine di 9 x 9 pixel, su cui è stata eseguita l’interrogazione sul pixel di coordinate 5,5. Quindi sto lavorando a una risoluzione di circa 10 centimetri.</p><p>L’output è in HTML ed è qualcosa come:</p><pre>&lt;table class=&quot;wmstable&quot; border=&quot;0&quot;&gt;<br>&lt;tbody&gt;<br>&lt;tr&gt;&lt;th class=&quot;wmstable&quot; colspan=7&gt;Strato CP.CadastralParcel &#39;Particelle&#39;&lt;/th&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;th class=&quot;wmstable&quot; scope=&quot;col&quot;&gt;InspireId localId&lt;/th&gt;&lt;td&gt;IT.AGE.PLA.G273_003400.1298&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;th class=&quot;wmstable&quot; scope=&quot;col&quot;&gt;InspireId_namespace&lt;/th&gt;&lt;td&gt;IT.AGE.PLA.&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;th class=&quot;wmstable&quot; scope=&quot;col&quot;&gt;Label&lt;/th&gt;&lt;td&gt;1298&lt;/td&gt;&lt;/tr&gt;<br>&lt;tr&gt;&lt;th class=&quot;wmstable&quot; scope=&quot;col&quot;&gt;NationalCadastralReference&lt;/th&gt;&lt;td&gt;G273_003400.1298&lt;/td&gt;&lt;/tr&gt;<br>&lt;/tbody&gt;<br>&lt;/table&gt;</pre><p>Per estrarre quindi da una lista di coordinate, per ciascuna coppia, i dati della particella sottostante, basterà scrivere uno <em>script</em> (in qualsiasi linguaggio) che faccia questo:</p><ul><li>per ogni riga di un file di input legga la coppia di coordinate;</li><li>per ogni coppia costruisca il <em>bounding box</em> (per il parametroBBOX) che lo &quot;circonda&quot;, ad esempio sottraendo e sommando 1 metro;</li><li>per ogni <em>bounding box</em> faccia l’interrogazione sul punto centrale;</li><li>per ogni output HTML estragga l’informazione utile (che nel caso di sopra è IT.AGE.PLA.G273_003400.1298).</li></ul><p>A partire da una lista così fatta (colonne separate da tabulazione, è un TSV):</p><pre>355461.5	4222490.7<br>356257.6	4222742.7<br>356259.7	4222236.7</pre><p>Si può usare ad esempio uno script bash, che sfrutti curl per fare le richieste HTTP e grep per estrarre dall&#39;HTML di <em>output</em> i dati di interesse. <a href="https://gist.github.com/aborruso/0631131f7031fcc04efe91a9db2bdd0e#file-catasto-sh">Qualcosa come</a>:</p><pre><strong>#!/bin/bash</strong></pre><pre>rm ./outputCatasto.txt</pre><pre><strong>while</strong> IFS=$&#39;\t&#39; read -r X Y; <strong>do</strong><br>  minX=$(bc &lt;&lt;&lt; &quot;$X - 1&quot;)<br>  minY=$(bc &lt;&lt;&lt; &quot;$Y - 1&quot;)<br>  maxX=$(bc &lt;&lt;&lt; &quot;$X + 1&quot;)<br>  maxY=$(bc &lt;&lt;&lt; &quot;$Y + 1&quot;)<br>  curl -sKL &quot;https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?REQUEST=GetFeatureInfo&amp;SERVICE=WMS&amp;SRS=EPSG:3045&amp;STYLES=&amp;VERSION=1.1&amp;FORMAT=image/png&amp;BBOX=$minX,$minY,$maxX,$maxY&amp;HEIGHT=9&amp;WIDTH=9&amp;LAYERS=CP.CadastralParcel&amp;QUERY_LAYERS=CP.CadastralParcel&amp;INFO_FORMAT=text/html&amp;X=5&amp;Y=5&quot; | grep -oE &#39;IT.+[0-9]&#39; &gt;&gt;./outputCatasto.txt<br><strong>done</strong> &lt;./input.tsv</pre><p>Restituirebbe:</p><pre>IT.AGE.PLA.G273_0033A0.673<br>IT.AGE.PLA.G273_003500.3077<br>IT.AGE.PLA.G273_003500.2419</pre><p>In cui ci sono tutti i dati di interesse (come particella e comune, che qui è Palermo, che ha codice G273).</p><h3>Note conclusive</h3><p>Mi ripeto: il <strong>tipo</strong> di <strong>licenza</strong> <strong>scelto</strong> non definisce soltanto cosa sia legalmente consentito, ma <strong>ha un impatto molto più ampio</strong>. Non mi sembra banale ad esempio il fatto che la precedente mi avesse tolto qualsiasi voglia di fare un po’ di didattica su questo servizio esposto dall&#39;Agenzia delle Entrate e sulle richieste GetFeatureInfo dei servizi WMS.</p><p>Questa <strong>nuova licenza</strong> apre <strong>scenari</strong> <strong>creativi</strong> e di <strong><em>business</em></strong>, prima inimmaginabili e <strong>irrealizzabili</strong>. Penso che <strong>ne vedremo delle belle</strong>, è un’ottima cosa.</p><p>Per informazioni di questa natura, bisognerebbe <strong>esporre</strong> i dati anche <strong>con il servizio WFS</strong>, che consente di <strong>accedere ai dati</strong> e <strong>non a una loro rappresentazione</strong>. Se l’Agenzia è in ascolto, come sembra esserlo, questa è l’occasione per richiedere di farlo.</p><p>L’Agenzia delle Entrate dovrebbe pure <strong>offrire </strong>un <strong>accesso programmatico </strong>anche al <strong>servizio inverso</strong>: a partire dai dati di foglio e particella, restituire le coordinate dell’area corrispondente. È un servizio che è <a href="https://geoportale.cartografia.agenziaentrate.gov.it/age-inspire/srv/ita/catalog.search#/home?pg=homegeopoimap">già attivo qui</a>, ma è <strong>usabile soltanto a schermo </strong>e<strong> non anche come servizio.</strong></p><p>Infine un grazie a <a href="https://twitter.com/totofiandaca">Salvatore Fiandaca</a>, che tanto tempo fa aveva provato a stimolarmi a scrivere questo post, ma insieme concordammo come — data la vecchia licenza — fosse inutile.</p><h3>Altri articoli recenti e correlati a tema</h3><ul><li><a href="https://medium.com/@p.mistrangelo/visualizzare-le-mappe-del-catasto-terreni-con-google-maps-473a44872962">Visualizzare le mappe del catasto terreni con Google Maps</a>, di <a href="https://medium.com/u/28a04ea3b771">Paolo Mistrangelo</a>;</li><li><a href="https://pigrecoinfinito.com/2020/10/04/wms-catasto-ade-estrarre-i-dati-con-il-field-calc-di-qgis/">WMS catasto ADE: estrarre i dati con il field calc di QGIS</a>, di <a href="https://twitter.com/totofiandaca">Salvatore Fiandaca</a>;</li><li><a href="https://pigrecoinfinito.com/2020/10/09/wms-catasto-ade-vettorializzare-le-particelle/">WMS CATASTO ADE: vettorializzare le particelle</a>, di <a href="https://twitter.com/totofiandaca">Salvatore Fiandaca</a>.</li></ul><h3>Post Scriptum 1 (c’è un altro servizio attivo di query per coppia di coordinate)</h3><p>Ho scoperto — qualche giorno dopo la pubblicazione del post — che <strong>c’è un altro servizio attivo</strong>, che risponde in JSON, che <strong>consente di avere i dati catastali a partire da una coppia di coordinate geografiche</strong>.</p><p>L’URL ha questa struttura (gli a capo per renderlo leggibile):</p><pre>https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?<br>op=getDatiOggetto&amp;<br>lon=13.62607730254396&amp;<br>lat=37.327193489720905</pre><p>E si può provare facendo click <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?op=getDatiOggetto&amp;lon=13.62607730254396&amp;lat=37.327193489720905">qui</a>. In output si avrà:</p><pre>{<br>  &quot;SIGLA_PROV&quot;: &quot;AG&quot;,<br>  &quot;COD_COMUNE&quot;: &quot;A089&quot;,<br>  &quot;DENOM&quot;: &quot;AGRIGENTO (AG)&quot;,<br>  &quot;SEZIONE&quot;: &quot; &quot;,<br>  &quot;FOGLIO&quot;: &quot;131&quot;,<br>  &quot;ALLEGATO&quot;: &quot;null&quot;,<br>  &quot;SVILUPPO&quot;: &quot;null&quot;,<br>  &quot;NUM_PART&quot;: &quot;660&quot;,<br>  &quot;TIPOLOGIA&quot;: &quot;PARTICELLA&quot;<br>}</pre><h3>Post Scriptum 2 (come usare GDAL per scaricare i dati come GeoTIFF)</h3><p>In questo <a href="https://medium.com/tantotanto/dati-da-un-server-wms-scaricarli-riproiettarli-comprimerli-e-tassellarli-da-riga-di-comando-a34cb6fe13e0">vecchio post</a> abbiamo già descritto come fare. A partire da un file XML (<a href="https://gdal.org/drivers/raster/wms.html#xml-description-file">qui</a> specifiche per GDAL) in cui è definita la sorgente, come questo di sotto (<a href="https://gist.github.com/aborruso/0631131f7031fcc04efe91a9db2bdd0e#file-particelle-xml">qui</a> in copia)</p><pre>&lt;GDAL_WMS&gt;<br>  &lt;Service name=&quot;WMS&quot;&gt;<br>    &lt;Version&gt;1.1.1&lt;/Version&gt;<br>    &lt;ServerUrl&gt;<a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?language=ita&amp;amp;SERVICE=WMS">https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?language=ita&amp;amp;SERVICE=WMS</a>&lt;/ServerUrl&gt;<br>    &lt;Layers&gt;CP.CadastralParcel&lt;/Layers&gt;<br>    &lt;SRS&gt;EPSG:6706&lt;/SRS&gt;<br>    &lt;ImageFormat&gt;image/png&lt;/ImageFormat&gt;<br>    &lt;Transparent&gt;FALSE&lt;/Transparent&gt;<br>    &lt;BBoxOrder&gt;xyXY&lt;/BBoxOrder&gt;<br>  &lt;/Service&gt;<br>  &lt;DataWindow&gt;<br>    &lt;UpperLeftX&gt;2&lt;/UpperLeftX&gt;<br>    &lt;UpperLeftY&gt;48&lt;/UpperLeftY&gt;<br>    &lt;LowerRightX&gt;19&lt;/LowerRightX&gt;<br>    &lt;LowerRightY&gt;33&lt;/LowerRightY&gt;<br>    &lt;SizeX&gt;1073741824&lt;/SizeX&gt;<br>    &lt;SizeY&gt;947419256&lt;/SizeY&gt;<br>  &lt;/DataWindow&gt;<br>  &lt;BandsCount&gt;3&lt;/BandsCount&gt;<br>  &lt;BlockSizeX&gt;1024&lt;/BlockSizeX&gt;<br>  &lt;BlockSizeY&gt;1024&lt;/BlockSizeY&gt;<br>  &lt;OverviewCount&gt;20&lt;/OverviewCount&gt;<br>&lt;/GDAL_WMS&gt;</pre><p>si lancia il comando gdal_translate con una sintassi come quella sottostante:</p><pre>gdal_translate -projwin 13.34513 38.12016 13.35073 38.11676 -outsize 2000 1214 particelle.xml out.tif</pre><p>In output avrò un file GeoTIFF che apparirà come la PNG sottostostante</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*0xqErjO82ha_cl1x73Fkwg.png" /></figure><p>Alcune note sul comando:</p><ul><li>-projwin per impostare il <em>bounding box</em> dell’area di cui voglio l’output;</li><li>-outsize per impostare le dimensioni in pixel dell’immagine di output (e quindi la risoluzione.</li></ul><p><strong>Nota bene</strong>: alcuni layer (come quello dell’esempio soprastante) sono renderizzati e quindi esportabili soltanto in un certo intervallo di scala (fare riferimento al <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?service=wms&amp;version=1.1.1&amp;request=GetCapabilities">GetCapabilities</a> del WMS).</p><h4>Note sulla codifica dell’output della query al WMS dell’Agenzia delle Entrate</h4><p>Nell’esempio di <a href="https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php? REQUEST=GetFeatureInfo&amp; SERVICE=WMS&amp; SRS=EPSG:3045&amp; STYLES=&amp; VERSION=1.1&amp; FORMAT=image/png&amp; BBOX=355714.5,4222470.1,355716.5,4222472.1&amp; HEIGHT=9&amp; WIDTH=9&amp; LAYERS=CP.CadastralParcel&amp; QUERY_LAYERS=CP.CadastralParcel&amp; INFO_FORMAT=text/html&amp; X=5&amp; Y=5">sopra</a>, la query dà in output il codice G273_003400.1298. Qual è il significato?</p><p>La struttura della prima parte, come riportato nella <a href="https://www.agenziaentrate.gov.it/portale/documents/20143/261879/Specifiche+tecniche+CXF_specifica+tecnica+CXF.rtf/e201652f-d671-c46a-f36c-f3735c043521">documentazione ufficiale</a> a pagina 4 (grazie <a href="https://twitter.com/skampus1967">Stefano Campus</a> per avermela suggerita), è</p><blockquote><em>CCCCZFFFFAS</em></blockquote><p>ovvero:</p><ul><li>“CCCC”, rappresenta il codice nazionale del comune (es.: H282 per il comune di Rieti);</li><li>“Z”, rappresenta il codice della sezione censuaria (es. A, oppure B). Se la sezione è assente si utilizza il carattere ‘_’</li><li>“FFFF”, rappresenta il numero del foglio, riempito eventualmente con caratteri ‘0’ a sinistra se il numero ha meno di 4 cifre (es. 0001 per il foglio numero 1). Se la mappa rappresenta un quadro d’unione dei bordi di più mappe allora FFFF rappresenta il numero identificativo della richiesta (modulo 10000);</li><li>“A”, rappresenta il codice allegato. Assume il valore 0 se la mappa non è un allegato. Se la mappa rappresenta un quadro d’unione dei bordi di più mappe allora “A” ha il valore ‘Q’;</li><li>“S”, rappresenta il codice dello sviluppo. Assume il valore 0 se la mappa non è uno sviluppo. Se la mappa rappresenta un quadro d’unione dei bordi di più mappe allora S ha il valore ‘U’.</li></ul><p>Mentre l’ultima parte, dopo il . è il numero di particella.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=821db2f84533" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/le-mappa-castali-diventano-finalmente-utilizzabili-821db2f84533">Le mappe catastali dell’Agenzia delle Entrate diventano finalmente utilizzabili</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        <enclosure length="-1" type="application/json; charset=utf-8" url="https://www.wikiwand.com/it/Web_Map_Service"/><itunes:explicit>no</itunes:explicit><itunes:keywords>wms, geodata, italia, catasto</itunes:keywords></item>
        <item>
            <title><![CDATA[Banche dati di interesse nazionale: quanto ci serviranno i numeri civici per la ripresa!]]></title>
            <link>https://medium.com/tantotanto/banche-dati-di-interesse-nazionale-quanto-ci-serviranno-i-numeri-civici-per-la-ripresa-ec21b85400e2?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/ec21b85400e2</guid>
            <category><![CDATA[stradario]]></category>
            <category><![CDATA[dati-geospaziali]]></category>
            <category><![CDATA[numeri-civici]]></category>
            <category><![CDATA[indirizzi]]></category>
            <category><![CDATA[open-data]]></category>
            <dc:creator><![CDATA[Sergio Farruggia]]></dc:creator>
            <pubDate>Wed, 03 Jun 2020 13:59:51 GMT</pubDate>
            <atom:updated>2020-06-03T15:15:16.526Z</atom:updated>
            <cc:license>http://creativecommons.org/publicdomain/zero/1.0/</cc:license>
            <content:encoded><![CDATA[<p><em>La pandemìa Conv-19 ci ha fulmineamente trasferito in un mondo sospeso, evocativo di tragedie: di fatto, tante persone e collettività hanno vissuto drammi e per questa sventura ancora si sta soffrendo. Stiamo giocoforza assumendo consapevolezza di nostre inaspettate virtù e nostri limiti -di nuovo- sia come individui, sia come comunità.</em></p><p><em>L’idea di questo post si è inserita nel filone delle esperienze positive -nonostante tutto- di questo tempo, come questo risultato: pareva legalmente e amministrativamente impraticabile svolgere le riunioni e le assemblee di organismi istituzionali per via telematica. Quanti ostacoli, solo pochi mesi fa. Poi, </em><strong><em>puff!</em></strong><em> Tutti superati in un mese.</em></p><figure><img alt="Foto di Gerd Altmann da Pixabay" src="https://cdn-images-1.medium.com/max/1024/1*a284FY69PAMX1bCTjUIQiQ.jpeg" /><figcaption>Foto di <a href="https://pixabay.com/it/users/geralt-9301/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=141396">Gerd Altmann</a> da <a href="https://pixabay.com/it/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=141396">Pixabay</a></figcaption></figure><p>Una <strong>base di dati di interesse nazionale</strong> -leggiamo dal Codice dell’Amministrazione Digitale, CAD (<a href="https://www.normattiva.it/uri-res/N2Ls?urn:nir:stato:decreto.legge:2005-03-07;82!vig=~art60">art. 60</a>) — è: “L’insieme delle informazioni raccolte e gestite digitalmente dalle pubbliche amministrazioni, omogenee per tipologia e contenuto e la cui conoscenza è rilevante per lo svolgimento delle funzioni istituzionali delle altre pubbliche amministrazioni, anche solo per fini statistici, nel rispetto delle competenze e delle normative vigenti”.</p><p>Già il CAD ne indica alcune, come il Repertorio nazionale dei dati territoriali, RNDT, l’Anagrafe nazionale della popolazione residente, il Casellario giudiziario e il Registro delle Imprese. Altre sono state aggiunte a seguito di altri provvedimenti legislativi. Questo insieme di banche dati viene continuamente ampliato dall’AgID: una lista aggiornata è disponibile <a href="https://www.agid.gov.it/it/dati/basi-dati-interesse-nazionale">qui</a>.</p><p>Con la transizione dalla società industriale a quella -della nostra epoca- informazionale, i dati devono stare al centro dell’azione pubblica, <strong>anche in quanto valore per l’economia</strong>. Molte delle basi di dati di interesse nazionale catalogati da AgID rientrano anche tra le <strong>categorie tematiche di</strong> <strong>serie di dati di elevato valore</strong> stabilite dalla <a href="https://www.agid.gov.it/it/agenzia/stampa-e-comunicazione/notizie/2019/06/27/open-data-riutilizzo-dellinformazione-del-settore-pubblico-nuova-direttiva">Direttiva (UE) 2019/1024 del 20 giugno 2019</a>, relativa all’apertura dei dati e al riutilizzo dell’informazione del settore pubblico — Direttiva “Public Sector Information”. Sono classificate di elevato valore, ad esempio, basi di dati geospaziali, i <em>database</em> statistici, quelli relativi alle imprese e alla proprietà delle imprese e, ancora, alla mobilità.</p><p>Quindi, la <strong>Pubblica Amministrazione</strong> riveste per l’intera società un ruolo di <strong>catalizzatrice</strong> rispetto al tema “dati”. Questi ormai devono essere intesi come “materia prima” essenziale per il funzionamento dell’economia, e occorre che il nostro Paese si doti di una infrastruttura ad essi dedicata, così come in passato si è munito di una rete di trasporto e di telecomunicazione.</p><p><strong>Tra le basi di dati geografici di elevato valore è risaputo che ha un notevole potenziale di riuso la banca dati degli indirizzi</strong> o, più formalmente, degli stradari comunali.</p><p>Qual è lo stato di questa importante banca dati in Italia?</p><p>Con Decreto del Presidente del Consiglio dei Ministri del 12 maggio 2016 “Censimento della popolazione e archivio nazionale dei numeri civici e delle strade urbane” è stato istituito l’<strong>Archivio Nazionale dei Numeri Civici e delle strade urbane, ANNCSU</strong>. Lo stesso DPCM ne ha assegnato la realizzazione all’ISTAT e all’Agenzia delle Entrate, mentre il suo aggiornamento è di competenza dei Comuni che, per assolvere questo compito, si possono avvalere della Regione quale intermediario infrastrutturale tra il livello centrale e locale “previa sottoscrizione di specifici accordi di servizio tra Regione, ISTAT, Agenzia delle Entrate e Comuni” (art. 4).</p><p>Dal 2016 ad oggi sono trascorsi 4 anni, ma questo Archivio non è ancora disponibile (provare <a href="http://www.anncsu.gov.it">qui</a>).</p><p>Ovviamente vi sono state, a più riprese, richieste di notizie su questo importante archivio digitale, come si può constatare, per esempio, consultando lo <a href="https://forum.italia.it/">Spazio di discussione sui servizi pubblici digitali</a>, tramite la ricerca dell’acronimo “ANNCSU”.</p><p>Ne scriviamo oggi perché dell’ANNCSU si occupa il recentissimo <a href="https://asvis.it/home/46-5732/lasvis-presenta-un-piano-dinvestimenti-per-lo-sviluppo-sostenibile-delle-citta"><strong>Piano d’investimenti per lo sviluppo sostenibile delle città</strong></a> elaborato dall&#39;<strong>Alleanza Italiana per lo Sviluppo Sostenibile</strong>, <strong>ASviS,</strong> e presentato lo scorso 28 maggio. Il documento dell’Alleanza “propone un programma da oltre 200 miliardi in 10 anni su ambiente, mobilità, trasformazione digitale, sanità e lotta alla povertà, elaborato da un gruppo di esperti”, tra cui anche di <a href="https://www.statigeneralinnovazione.it/online/">Stati Generali dell’Innovazione</a>.</p><p>Nel raccomandare che “occorre completare nel più breve tempo possibile tutte le piattaforme centrali e locali previste dal <strong>Piano triennale per l’informatica della pubblica amministrazione 2019–2021</strong> al fine di renderle interoperabili per l’accesso e lo scambio dei dati” (<a href="https://asvis.it/public/asvis2/files/Pubblicazioni/Investimenti_SviluppoSostenibile_citta_territori.pdf">pag. 18</a>), ASviS ricorda esplicitamente, tra gli altri, l’<strong>ANNCSU</strong>.</p><p>Il Piano ASviS, per esigenze di sintesi, si limita ad enfatizzare che gli interventi sollecitati “possono finalmente consentire lo <em>switch off</em> dei servizi di sportello della PA in favore della modalità digitale<br> anche attraverso l’utilizzo dell’<strong>applicazione</strong> <a href="https://www.mobileworld.it/2020/04/20/app-io-pubblica-amministrazione-260082/"><strong>IO</strong></a>”. Ma l’Archivio nazionale degli Stradari, lo ribadiamo, <strong>ha un potenziale di riuso affatto strategico e amplificabile</strong> (<em>Google</em> insegna), tale da contribuire concretamente a quell’uscita dalla crisi “rimbalzando in avanti”, auspicata dagli estensori del Piano ASviS, motivo che ne ha ispirato l’elaborazione.</p><p><strong>Ecco perché ne scriviamo</strong>: vorremmo che grazie a questo autorevole richiamo e con nuova consapevolezza acquisita a seguito delle lezioni apprese in questi ultimi mesi, <strong>si avverasse un altro… <em>puff!</em></strong> La pubblicazione dell’ANNCSU:</p><p>§ superando un parere del Garante per la protezione dei dati personali previsto da un normatore, forse eccessivamente prudente (per uno stradario?!?!);</p><p>§ creando tra ISTAT, l’Agenzia delle Entrate, i Comuni e tutti i portatori d’interesse -<strong>ad iniziare da ASviS</strong>- un forte legame e un impegno coeso volto a completare rapidamente la georeferenziazione dei numeri civici, l’integrazione con i CAP (Codici di Avviamento Postale) e altre <em>features </em>adeguate per fare quel “balzo in avanti” cui ambiamo;</p><p>§ facendo sentire fieri tutti gli attori che contribuiranno a raggiungere questo obiettivo, ma sempre con umiltà, quindi avendo atteggiamenti inclusivi, di apertura verso nuove idee e di curiosità per le soluzioni sviluppate da altri Paesi <em>leader</em> su questa tematica.</p><p>L’appartenenza ad una categoria di dati di elevato valore, secondo la Direttiva “Public Sector Information”, attesta l’<strong>ANNCSU come Bene Comune</strong>, qualità che prospetta -aderendo al paradigma dell’<em>Open Government</em>- la sperimentazione di <strong>modelli di produzione e di <em>governance</em> dei dati fortemente votati alla collaborazione e alla condivisione</strong>.</p><p>Si possono considerare soluzioni adottate da altri Paesi orientate in questa cornice (ad esempio: GB, Francia, Belgio, Paesi Bassi, Danimarca ed Estonia). È molto apprezzata in ambito internazionale, ad esempio, la <a href="https://www.data.gouv.fr/en/datasets/base-adresse-nationale/"><strong><em>Base Adresse Nationale</em></strong></a> (BAN), progetto iniziato nel 2015 dall’<a href="http://www.ign.fr/">Istituto Nazionale per l’Informazione Geografica e Forestale</a>, IGN, il Gruppo “<a href="https://www.laposte.fr/">La Poste</a>”, l’Associazione <a href="https://www.openstreetmap.fr/">OpenStreetMap France</a>, il Dipartimento <a href="https://www.etalab.gouv.fr/qui-sommes-nous">Etalab</a> e con il supporto dell’<a href="https://numerique.gouv.fr/espace-presse/l-administrateur-general-des-donnees-remet-son-2e-rapport-la-donnee-comme-infrastructure-essentielle/">Amministratore Generale dei Dati</a>, AGD<a href="#_ftn1">[1]</a>. Cogestita attualmente anche insieme all’<a href="https://www.arcep.fr/">Autorità per la Regolazione delle Comunicazioni elettroniche, Poste e della distribuzione della Stampa,</a> ARCEP, all’<a href="https://insee.fr/fr/accueil">Istituto di Statistica e Studi Economici</a>, INSEE, e alla <a href="https://www.economie.gouv.fr/dgfip">Direzione Generale delle Finanze Pubbliche</a>, DGFIP.</p><p>BAN è il riferimento per tutti gli indirizzi nel territorio francese: contiene <strong>la posizione geografica</strong> di oltre 25 milioni di indirizzi. Completano questo progetto altri servizi come, ad esempio, <strong>un’API di geocodifica</strong> liberamente accessibile. Il volume di utilizzo di questi strumenti dimostra la loro pertinenza e utilità: nel 2017, l’API di geocodifica della BAN ha registrato un forte aumento del suo pubblico con oltre un miliardo di richieste e 11,8 milioni di visitatori unici nei primi dieci mesi dell’anno contro 443 milioni di richieste e 5,5 milioni di visitatori unici nel 2016.</p><p>Questo archivio è originale e unico non solo per il suo contenuto -che lo rende ad oggi il database più completo per quanto riguarda gli indirizzi in Francia- ma <strong>anche per la sua <em>governance</em> inedita</strong>, perseguita da una compagine che riunisce amministrazioni, società pubbliche e collaboratori della società civile.</p><p>Si prendano ispirazioni da questo progetto francese, come da progetti di altre nazioni. Il nostro Paese possiede tutte le conoscenze e tecnologie che servono; certamente non mancheranno idee; si adotti una <em>governance</em> inclusiva — a proposito, perché non approcciare anche un dialogo con i giganti della geolocalizzazione multinazionali?</p><p>Il successo dell’ANNCSU dopo il CONV-19 è assolutamente a portata di mano in tempi brevi.</p><p><a href="#_ftnref1">[1]</a> Riferimenti al progetto DAB sono tratti dal “<a href="https://www.etalab.gouv.fr/wp-content/uploads/2018/04/RapportAGD_2016-2017_web.pdf">Rapport au Premier Ministre sur la Donnée dans les Administrations</a>”, 2016–2017 e dal <a href="https://www.etalab.gouv.fr/lannee-2019-pour-etalab-une-retrospective">Rapporto Etalab 2019</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ec21b85400e2" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/banche-dati-di-interesse-nazionale-quanto-ci-serviranno-i-numeri-civici-per-la-ripresa-ec21b85400e2">Banche dati di interesse nazionale: quanto ci serviranno i numeri civici per la ripresa!</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        <enclosure length="-1" type="application/pdf" url="https://asvis.it/public/asvis2/files/Pubblicazioni/Investimenti_SviluppoSostenibile_citta_territori.pdf"/><itunes:explicit>no</itunes:explicit><itunes:keywords>stradario, dati-geospaziali, numeri-civici, indirizzi, open-data</itunes:keywords></item>
        <item>
            <title><![CDATA[Datawrapper: creare una mappa a partire da dati “live”]]></title>
            <link>https://medium.com/tantotanto/datawrapper-creare-una-mappa-a-partire-da-dati-live-784cfdabb8b6?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/784cfdabb8b6</guid>
            <category><![CDATA[live]]></category>
            <category><![CDATA[datawrapper]]></category>
            <category><![CDATA[maps]]></category>
            <category><![CDATA[tutorial]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Tue, 24 Mar 2020 10:53:55 GMT</pubDate>
            <atom:updated>2020-10-20T14:34:34.863Z</atom:updated>
            <cc:license>http://creativecommons.org/licenses/by/4.0/</cc:license>
            <content:encoded><![CDATA[<h4>Un esempio a partire da un CSV derivato da un Google Drive Sheet</h4><p><a href="https://www.datawrapper.de/"><strong>Datawrapper</strong></a> è uno dei migliori servizi online per raccontare storie basate su grafici, mappe e tabelle. È cosa nota e non ha bisogno di presentazioni.</p><p>Però leggo spesso in chat private, in email, ecc. “<em>peccato non si possano creare mappe a partire da fonti live, che si aggiornano automaticamente …</em>”.</p><p>Su <strong>Datawrapper </strong>invece <strong>si può fare</strong>. Questi gli step:</p><ul><li>crea una <a href="https://app.datawrapper.de/create/map">nuova mappa</a>, scegli la tipologia (nell&#39;esempio di sotto è una “<a href="https://www.wikiwand.com/en/Choropleth_map">Choropleth map</a>”) e quale layer di base vuoi usare (ho scelto “Italy » Regions”);</li><li>aggiungi i dati e guarda l’URL della mappa. Sarà qualcosa come</li></ul><p>https://app.datawrapper.de/map/<strong>CHART-ID</strong>/data.</p><ul><li>copia il CHART-ID della mappa e usalo per costruire questo URL con il tuo CHART-ID</li></ul><p>https://app.datawrapper.de/chart/<strong>Chart-ID</strong>/upload</p><ul><li>lancia l’URL così costruito. Si aprirà un’interfaccia per fare l’upload dei dati e qui potrai impostare la <strong>fonte <em>live</em></strong>. Da qui procedi a selezionare una fonte esterna (nell&#39;immagine di sotto ad esempio un CSV esposto da Google Drive), assicurandoti che<strong> la prima colonna contenga i <em>geo-code</em> o i nomi delle regioni</strong> (questo ovviamente nel caso di una mappa per regioni);</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*slOYKLVWZ584kxreL1XVYA.png" /></figure><ul><li>quando farai click su “Proceed” potrai completare la personalizzazione della tua mappa.</li></ul><p>Il risultato finale sarà una mappa che si <strong>aggiornerà automaticamente </strong>all’<strong>aggiornarsi</strong> della <strong>fonte</strong>.</p><p><strong>NOTA BENE</strong>:</p><ul><li>nella tua tabella deve essere presente una colonna con i nomi dei luoghi (nel mio esempio le regioni) o i codici, coincidenti a quelli dei dataset di datawrapper (puoi copiarli e incollarli dalla tabella di preview). In questo modo verrà effettuato il JOIN tra i poligoni del <em>layer </em>di datawrapper e i tuoi dati;</li><li>questa colonna deve essere la prima (è bene ripeterlo).</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/493/1*gK5e1RM6ckFw98FP_rYmuA.gif" /></figure><p>La mappa di sotto ad esempio, basata sul dataset ISTAT “<a href="http://dati.istat.it/Index.aspx?QueryId=15448">Aspetti della vita quotidiana : Stato di salute — regioni e tipo di comune</a>”, è generata in modalità <em>live</em> a partire da <a href="https://docs.google.com/spreadsheets/d/12jYZT3i_PzrTRi1swBMsPy4dsRBy-LKLd1-wEPmLUXs/edit?usp=sharing">questa tabella</a>.</p><iframe src="https://cdn.embedly.com/widgets/media.html?src=%2F%2Fdatawrapper.dwcdn.net%2FFNop1%2F1%2F&amp;display_name=Datawrapper&amp;url=http%3A%2F%2Fdatawrapper.dwcdn.net%2FFNop1%2F1%2F&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=dwcdn" width="600" height="400" frameborder="0" scrolling="no"><a href="https://medium.com/media/9cc3b877fb6de091d8b252df0c50e579/href">https://medium.com/media/9cc3b877fb6de091d8b252df0c50e579/href</a></iframe><p><strong>PER FAVORE: NON FARE SOLO MAPPE SUL COVID-19</strong></p><p><strong>Nota bene</strong>: qualche settimana dopo la pubblicazione di questo post, è arrivata la guida ufficiale per farlo:<br><a href="https://academy.datawrapper.de/article/236-how-to-create-a-live-updating-symbol-map-or-choropleth-map">https://academy.datawrapper.de/article/236-how-to-create-a-live-updating-symbol-map-or-choropleth-map</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=784cfdabb8b6" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/datawrapper-creare-una-mappa-a-partire-da-dati-live-784cfdabb8b6">Datawrapper: creare una mappa a partire da dati “live”</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        <enclosure length="-1" type="application/json; charset=utf-8" url="https://www.wikiwand.com/en/Choropleth_map"/><itunes:explicit>no</itunes:explicit><itunes:keywords>live, datawrapper, maps, tutorial</itunes:keywords></item>
        <item>
            <title><![CDATA[QGIS: generare un atlante basato su campi]]></title>
            <link>https://medium.com/tantotanto/qgis-generare-un-atlante-basato-su-campi-4eeff34b3900?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/4eeff34b3900</guid>
            <category><![CDATA[qgis]]></category>
            <category><![CDATA[tutorial]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Fri, 17 Jan 2020 11:31:01 GMT</pubDate>
            <atom:updated>2020-04-22T08:29:58.007Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<h4>Come fare in modo che al cambio pagina, cambi il campo su cui è basata la formattazione</h4><p>L’<strong>atlante</strong> di <a href="https://docs.qgis.org/3.4/en/docs/training_manual/forestry/forest_maps.html"><strong>QGIS</strong></a><strong> </strong>consente di creare in modo automatico delle pubblicazioni cartografiche multipagina. Proprio come i meravigliosi volumi del tempo della <strong>scuola </strong>(in cui ci si perdeva letteralmente dentro, specie “noi di quando non c’era l’internèt”).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/0*-C8r4jLc2rPbCQq_.jpg" /></figure><p>Esistono tanti <em>tutorial</em> sul come farne uno e non replicherò.<br>Documenterò qui una modalità atipica e di grande utilità. Lo spunto nasce da questo messaggio del mitico <a href="https://twitter.com/puntofisso"><strong>@puntofisso</strong></a> (Giuseppe Sollazzo), ricevuto a fine dicembre 2019:</p><blockquote>Borruso, sei la mia ultima speranza, stile Obi Wan. Posso chiederti una domanda QGIS? :) Sto cercando di capire se mi stia sfuggendo qualcosa di ovvio sulla generazione di un Atlas […]. Ho un dataset che mostra le precipitazione storiche in UK in termini di decili, per mostrare quando le precipitazioni sono state fuori dal comune.[…]<br>Posso trasporlo, splittare le coordinate (in easting, northing), etc… ma faccio fatica a pensare a una struttura che sia compatibile con Atlas per cui possa alla fine ottenere una mappa per anno</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/969/0*Azp4HZ5CbmNza29K.jpg" /></figure><p>A partire da un dataset come quello soprastante Giuseppe vuole realizzare un <strong>atlante </strong>con una pagina per anno, senza cambiare l’area geografica. Al variare di pagina, fare <strong>riferimento </strong>a un<strong> diverso campo</strong>, a una diversa fonte dati.<br>Di solito avviene proprio il contrario: la variazione di pagina è in base alle righe di un <em>layer</em> (ad esempio al cambio di valore nella colonna “nome regione”), con taglio geografico diverso per ognuna.</p><p>L’obiettivo è quello di ottenere qualcosa come quella di sotto (le n pagine corrispondenti agli anni dei dati sorgente).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iBMNHR83_VyVl5N2.png" /></figure><h4>Come creare l’atlante</h4><p>Il punto di partenza è quello di caricare i <em>layer</em> cartografici di base. Nell&#39;esempio creato per descrivere la procedura faccio uso soltanto di un <a href="https://github.com/aborruso/appunti/blob/master/bozze/qgis-atlalnte-basato-su-campi/atlante/decilesNE.csv">file CSV</a> (denominato decilesNE.csv), con una struttura come quella della tabella in alto, più due colonne con le coordinate (non sono riuscito a risalire al sistema di coordinate, ho usato EPSG:32632).<br>Una volta aggiunto, si formatta il <em>layer</em> sfruttando i valori di una delle colonne year..., che contengono valori da 0 a 9.<br>Sono <strong>dieci categorie</strong> a cui ad esempio associare dei toni dal bianco al blu, al passaggio da 0 a 9. Si tratta di punti che rappresentano quadrati di 5 chilometri e a cui verrà associato pertanto un simbolo quadrato di 5 km di lato.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/796/0*MqCH3RkrtfgY-hCx.png" /></figure><p>Per poter “<strong>paginare” per anno</strong> verrà aggiunto un <em>layer</em> con i <strong>valori distinti per anno</strong>, ma <strong>disposti in righe</strong>. Basta quindi trasporre la riga con il nome delle colonne del file di input e ottenere un CSV come <a href="https://github.com/aborruso/appunti/blob/master/bozze/qgis-atlalnte-basato-su-campi/atlante/at.csv">questo</a> (che ho chiamato at.csv).<br>Una volta creato, si dovrà aggiunge al progetto.</p><p>Si potrà iniziare dal creare un nuovo <em>layout</em> e attivare in questo la generazione dell’atlante.<br>Due i parametri importanti in questa fase:</p><ol><li>quale <em>layer</em> farà da <strong>coverage</strong>, ovvero quale &quot;comanderà&quot; il cambio pagina. Per questo progetto sarà at;</li><li>quale <strong>campo </strong>utilizzare per <strong>ordinare le pagine</strong>. Sarà item, l&#39;unico del file at.csv, che contiene l&#39;elenco dei nomi delle colonne (che corrispondono agli anni).</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/921/0*5OU8S14_lr0HZxQj.png" /></figure><p>In questo modo QGIS saprà come “paginare” (vedi sotto).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/562/0*gaIRqApGhFLVTdo6.png" /></figure><p>Rimane però un <strong>PROBLEMA</strong>: come fare in modo che al cambio pagina la <strong>formattazione </strong>della <strong>mappa </strong>sia <strong>basata </strong>sul <strong>campo corrispondente all&#39;anno selezionato</strong>?</p><p>Al momento la formattazione è basata su una delle colonne del <em>layer</em>. Quindi <strong>al cambio pagina non varierà</strong>.<br>QGIS espone alcune variabili legate agli atlanti, una è denominata <a href="http://hfcqgis.opendatasicilia.it/it/latest/gr_funzioni/variabili/README.html">@atlas_pagename</a> e contiene il valore del nome della <strong>pagina corrente</strong>.<br>Quindi basterebbe usare questa variabile al posto del nome della colonna, e fare in modo che il <em>layer</em> spaziale vari al cambio di pagina.</p><p>Per farlo bisogna aprire il pannello di formattazione del <em>layer</em> e sostituire il nome del campo con l’espressione eval(@atlas_pagename) (vedi sotto).<br>Si usa la funzione <a href="http://hfcqgis.opendatasicilia.it/it/latest/gr_funzioni/generale/eval.html">eval</a> per fare in modo che il valore della variabile (ad esempio year1958) sia mappato come nome campo e non come stringa.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/740/0*xhUDIAPtNBL_KIce.png" /></figure><p>A questo punto si potrà esportare l’atlante in PDF, in SVG e in PNG.</p><p>Ho creato una <a href="https://github.com/aborruso/appunti/blob/master/bozze/qgis-atlalnte-basato-su-campi/atlante/atlante.zip">copia del file progetto</a> con le risorse necessarie (creato con QGIS 3.4), in modo che sia possibile testare il tutto in autonomia. All&#39;interno il <em>layout</em> con attivo l’atlante, denominato miSollazzo.</p><p><strong>NOTA BENE</strong>: all&#39;apertura del progetto il <em>layer</em> non sarà visualizzato, perché l&#39;atlante non è attivo e quindi QGIS non sa quale sia la pagina e di conseguenza quale il campo da usare per formattare il <em>layer</em>. Allora, una volta aperto il progetto, si dovrà aprire il <em>layout</em> presente e attivare l&#39;anteprima dell&#39;atlante.<br>Il sistema di coordinate del <em>layer</em> è impostato in modo casuale, perché non sono riuscito a trovare informazioni sullo <em>Spatial Reference System</em> dei dati sorgente. Allo scopo dell’articolo, non è per fortuna qualcosa di bloccante.</p><h4>Come farlo con pandas e matplotlib</h4><p><a href="https://medium.com/u/b61f4f2753a">Giuseppe Sollazzo</a> ha lavorato su questi dati utilizzando un <strong><em>Jupyter Notebook</em></strong><em> Python</em>, basato su Pandas e pyplot — Matplotlib. <br>La sua curiosità sul come farlo in QGIS nasce proprio da questi suoi “lavori in corso”.</p><p>L’ha ovviamente ultimato e lo trovate <a href="https://github.com/puntofisso/Notebooks/blob/master/Rainfall.ipynb"><strong>qui</strong></a><strong> </strong><a href="https://github.com/puntofisso/Notebooks/blob/master/Rainfall.ipynb">https://github.com/puntofisso/Notebooks/Rainfall.ipynb</a></p><p>Voglio bene a questo notebook, perché è stata l’occasione per “<em>to play</em>” con puntofisso 🥰</p><h4><em>Divertissement</em></h4><p>Durante la preparazione di questo testo mi sono anche divertito a utilizzare l’<em>output</em> dell’atlante per creare due cose:</p><ul><li>la <strong>griglia di immagini</strong> presente all&#39;inizio;</li><li>una <strong>gif animata </strong>che mostri le variazioni nel tempo.</li></ul><p>Per farlo, ho esportato le pagine dell’atlante in PNG e le ho elaborate con <a href="https://imagemagick.org/"><strong>ImageMagick</strong></a>.</p><p>La <strong>griglia </strong>l’ho creata con l’<em>utility</em> <a href="https://imagemagick.org/script/montage.php">montage</a>, con il comando:</p><pre>montage output_*.png -tile 10x6 -geometry +5+5 out.png</pre><p>In cui con -tile 10x6 si imposta la dimensione della griglia (che qui è 6 righe per 10 colonne).</p><p>La <strong>gif animata</strong> invece sfruttando l’<em>utility</em> <a href="https://imagemagick.org/script/convert.php">convert</a>, con il comando:</p><pre>convert -delay 100x100  output_*.png -loop 0 movie.gif</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/162/1*t8lCcWY8UT1ibr-cdHDmHg.gif" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4eeff34b3900" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/qgis-generare-un-atlante-basato-su-campi-4eeff34b3900">QGIS: generare un atlante basato su campi</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[“Unire” i poligoni di un layer con grande semplicità: è un lavoro (soltanto?) per mapshaper]]></title>
            <link>https://medium.com/tantotanto/unire-i-poligoni-di-un-layer-con-grande-semplicit%C3%A0-%C3%A8-un-lavoro-soltanto-per-mapshaper-2aedec0e484?source=rss----85ace5983d95---4</link>
            <guid isPermaLink="false">https://medium.com/p/2aedec0e484</guid>
            <category><![CDATA[overlay]]></category>
            <category><![CDATA[gis]]></category>
            <category><![CDATA[mapshaper]]></category>
            <category><![CDATA[tutorial]]></category>
            <dc:creator><![CDATA[Andrea Borruso]]></dc:creator>
            <pubDate>Mon, 30 Dec 2019 06:52:56 GMT</pubDate>
            <atom:updated>2020-01-03T08:53:27.644Z</atom:updated>
            <cc:license>https://creativecommons.org/licenses/by-sa/4.0/</cc:license>
            <content:encoded><![CDATA[<h4>Come realizzare l’unione tra geometrie sovrapposte e aggregarne gli attributi in modalità molti-a-uno</h4><p>Quando si lavora con dati spaziali uno degli obiettivi può essere quello di creare nuove geometrie in base a come si sovrappongono fra loro. Queste procedure sono spesso indicate usando il linguaggio degli <strong>insiemi</strong>: intersezione, <strong>unione</strong>, differenza, ecc..</p><p>Qui sotto un’immagine con alcune delle operazioni “classiche” (questa e il testo introduttivo dalla <a href="http://geopandas.org/set_operations.html">guida</a> di GeoPandas).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/939/0*DRy4cy2WNPhI7H8V.png" /></figure><p>In questo articolo verrà descritta una di queste e in particolare l’<strong>unione</strong>. È un’operazione realizzabile in diverse modalità e con diversi strumenti, ma diventa abbastanza complessa e/o non realizzabile in modo diretto se l’obiettivo è:</p><ul><li>realizzare l’unione tra oggetti di <strong>uno stesso <em>layer</em> di input</strong>;</li><li>produrre in <em>output</em> non soltanto l’<strong>unione</strong> delle geometrie, ma anche quella degli <strong>attributi</strong>, sempre in base alla sovrapposizione delle geometrie.</li></ul><p>Nell&#39;immagine di sotto un esempio: a sinistra le geometrie di <em>input</em> e a destra l’<em>output</em>. I perimetri delle aree fanno da “lama” di ritaglio e laddove le aree si sovrappongono devono essere trasferiti gli attributi di input (in questo esempio i valori A, B e C); eventuali poligoni sovrapposti e coincidenti sono aggregati in un’unica geometria.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/550/0*JJW67kacgplP_4LJ.png" /></figure><p>Un’applicazione con cui è molto semplice realizzare quanto descritto è il fantastico <a href="https://github.com/mbloch/mapshaper"><strong>mapshaper</strong></a>. È uno strumento scritto in JavaScript, per modificare file Shapefile, GeoJSON, TopoJSON, CSV e altri formati, molto noto per le sue eccellenti doti nella semplificazione di geometrie.<br>Fa molto molto di più e questa è l’occasione per mostrare un esempio.</p><p>A <a href="https://pigrecoinfinito.com/"><strong>Totò Fiandaca</strong></a> (grazie mille) si deve la redazione del testo che descrive come fare la cosa con <a href="https://qgis.org/">QGIS</a> e tramite SQL geografico (in particolare con <a href="https://www.gaia-gis.it/fossil/libspatialite/index">SpatiaLite</a>).</p><h3>Unione dei poligoni di un layer con mapshaper</h3><p>Una volta <a href="https://github.com/mbloch/mapshaper#installation">installato</a> è utilizzabile o a riga di comando o tramite un’interfaccia web (<a href="https://mapshaper.org/">questa</a> la versione pubblica ufficiale).</p><p>Per replicare l’operazione descritta a seguire è stato predisposto <a href="https://github.com/aborruso/appunti/raw/master/bozze/unione-mapshaper/inputLayer.geojson">questo file GeoJSON</a> di input d’esempio, che ha un solo campo (id) ed è composto da tre poligoni (con valori di id pari ad A, B e C).</p><p>Questo è il comando tipo da lanciare da <em>shell</em>:</p><pre>mapshaper -i ./inputLayer.geojson -mosaic calc=&#39;output=collect(id).toString()&#39; -o ./output.geojson</pre><p>Per punti:</p><ul><li>con -i si imposta il file di <em>input</em>;</li><li>poi il comando da eseguire — <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-mosaic">-mosaic</a> — che in questo caso è appunto l&#39;unione dei poligoni;</li><li>al comando mosaic si associa l&#39;opzione <a href="https://github.com/mbloch/mapshaper/wiki/Command-Reference#-calc">calc</a>, che consente di eseguire calcoli nelle aggregazioni molti-a-uno, utilizzando espressioni JavaScript. In questo caso viene generato un nuovo campo denominato output, in cui vengono aggregati i valori del campo id nei poligoni di intersezione risultanti;</li><li>infine si definisce con -o il file di output.</li></ul><p>Nell&#39;immagine di sotto è rappresentato il processo. Si veda ad esempio come al poligono centrale, frutto dell’intersezione geometrica di tutti e tre i poligoni di input, venga associato il valore A,B,C.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*seVx1sFgWqCEfwMa.png" /></figure><p>In termini di geometrie si avranno 7 <em>record </em>di <em>output</em> (corrispondenti alle 7 intersezioni geometriche possibili) con questi attributi:</p><ul><li>A,B,C</li><li>B,C</li><li>A,C</li><li>C</li><li>A</li><li>A,B</li><li>B</li></ul><p>Tantissimi i campi di applicazione di un processo come questo. Questi tre poligoni potrebbero essere gli areali “colpiti” dalla diffusione di inquinanti da tre punti sorgente, oppure le aree che distano una determinata misura da una fontanella d’acqua potabile, ecc..<br>L’unione, con intersezione geometrica e aggregazione di attributi, consente di produrre un <em>output</em> in cui è possibile leggere per ogni area il contributo di tutti i poligoni di input.</p><h3>Altre modalità</h3><p>Come dicevo in apertura, tutto questo è fattibile in altre modalità, ma non mi risulta ce ne sia una così semplice e diretta in altri ambienti. A seguire qualche esempio.</p><h4>GeoPandas</h4><p><a href="https://geopandas.readthedocs.io/en/latest/"><strong>GeoPandas</strong></a> è un famoso progetto <em>open source</em> per semplificare il lavoro con i dati geospaziali in Python. È un gran bel modulo!</p><p>Consente di eseguire il <a href="https://geopandas.readthedocs.io/en/latest/set_operations.html">processo di unione</a> (e altri), ma di base è pensato per essere eseguito tra due <em>layer</em> distinti di <em>input</em>.<br>A seguito di <a href="https://github.com/geopandas/geopandas/issues/1116">una <em>issue</em></a> in merito, aperta sul <em>repository</em> di progetto, è stata fornita questa risposta, in cui si evidenzia come non ci sia un modo diretto per farlo:</p><blockquote>[…]<strong>there is right now no direct way to do this in geopandas</strong>. You could do a “cumulative” intersection manually rather easily in a loop, but that would need some more complexity to keep track of the values.[…]</blockquote><p>Per l’occasione è stato creato un bel <a href="https://nbviewer.jupyter.org/gist/jorisvandenbossche/3a55a16fda9b3c37e0fb48b1d4019e65"><em>notebook</em></a> in cui è mostrato come sia possibile eseguire l’intersezione tra poligoni sovrapposti; da notare la maggiore complessità e sopratutto come comunque non sia gestita l’aggregrazione molti-a-uno degli attributi (nel senso che c’è da scrivere questa parte di codice).</p><h4>QGIS</h4><p>A partire dalla versione <a href="https://qgis.org/it/site/forusers/visualchangelog32/"><strong>QGIS</strong> 3.2 Bonn</a> è disponibile il geoalgoritmo Union che svolge la parte geometrica di ritaglio del processo descritto sopra, ma non raggruppa le geometrie omologhe e di conseguenza gli attributi.<br>Una singola area condivisa tra n poligoni sarà ritagliata e produrrà in <em>output</em> n elementi geometrici. Nell&#39;immagine di sotto ad esempio, in corrispondenza dell&#39;area selezionata in giallo, tre <em>record</em> e tre geometrie; complessivamente così verranno quindi prodotti 12 <em>record</em>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/786/0*4h4hPo1-WEdBcsGQ.png" /></figure><p>Per raggruppare le geometrie e gli attributi occorre un altro passaggio, oppure creare un modello grafico, come quello che trovate <a href="https://github.com/aborruso/appunti/blob/master/bozze/unione-mapshaper/overlayUnion.model3">qui</a>; in questo si utilizzano anche lo <em>snapping</em> e la riparazione delle geometrie, che servono in casi molto più complessi di quello attuale (vedi <a href="https://github.com/qgis/QGIS/issues/31552"><em>issue</em></a> correlata).</p><p>La <em>query</em> utilizzata nel modello è la seguente:</p><pre>SELECT group_concat (&quot;id&quot;) AS ID, st_union (geometry) AS geometry<br>FROM input1<br>GROUP BY geometry</pre><p>Fatto il raggruppamento si avranno in <em>output</em> ancora una volta 7 <em>record</em>.</p><h4>SQL</h4><p>Non esiste una funzione di <strong>SQL spaziale</strong> (SpatiaLite o PostGIS) che risolva in modo diretto la cosa; occorre analizzare <em>step by step</em> il da farsi:</p><ol><li>estrarre i perimetri dai poligoni di <em>input</em>;</li><li>estrarre i punti di intersezione dei perimetri delle varie <em>feature</em>;</li><li>aggiungere i punti alla geometria dei perimetri;</li><li>“splittare” la geometria dei perimetri;</li><li>“poligonalizzare” a partire dai perimetri “splittati”;</li><li>associare gli attributi alle varie geometrie “poligonalizzate”.</li></ol><p>Ad esempio in ambiente SpatiaLite si potrebbe partire con l’importazione del file di esempio:</p><pre># importa file inputLayer e crea file spatialite<br>ogr2ogr -append -t_srs EPSG:4326 -f SQLite ./dbOverlayUnion.sqlite ./inputLayer.geojson -nln &quot;inputLayer&quot; -dsco SPATIALITE=YES</pre><p>E infine lanciare la seguente <em>query</em>:</p><pre>-- algoritmo proiezioni, the SpatiaLite way<br>-- di Salvatore Fiandaca<br>-- e-mail: pigrecoinfinito@gmail.com<br>-- è stato di aiuto: <a href="http://blog.cleverelephant.ca/2019/07/postgis-overlays.html">http://blog.cleverelephant.ca/2019/07/postgis-overlays.html</a></pre><pre>-- crea geotabella polygonize<br>CREATE TABLE polygonize AS<br>SELECT St_Polygonize(t.geom) as geom<br>FROM<br>(SELECT id, St_Union(st_boundary(geometry)) as geom<br>FROM inputLayer) t;<br>SELECT RecoverGeometryColumn(&#39;polygonize&#39;,&#39;geom&#39;,4326,&#39;MULTIPOLYGON&#39;,&#39;XY&#39;);</pre><pre>-- crea geotabella dalle componenti elementari della geotabella polygonize<br>SELECT DropGeoTable(&#39;elementi&#39;);<br>SELECT ElementaryGeometries( &#39;elementi&#39; ,&#39;geom&#39; , &#39;polygonize&#39; ,&#39;out_pk&#39; , &#39;out_multi_id&#39;, 1 ) as num, &#39;polygon splitted&#39; as label;</pre><pre>-- crea poligoni di output con attributi<br>SELECT DropGeoTable( &quot;OUTPUT&quot;);<br>CREATE TABLE OUTPUT AS<br>SELECT Group_Concat(id) as id, e.geom<br>FROM inputLayer p, elementi e<br>where st_intersects (ST_PointOnSurface(e.geom), p.geometry) = 1<br>GROUP BY e.geom;<br>SELECT RecoverGeometryColumn(&#39;OUTPUT&#39;,&#39;geom&#39;,4326,&#39;POLYGON&#39;,&#39;XY&#39;);</pre><pre>-- aggiorna statistiche e VACUUM<br>UPDATE geometry_columns_statistics set last_verified = 0;<br>SELECT UpdateLayerStatistics(&#39;geometry_table_name&#39;);<br>VACUUM;</pre><p>In <em>output</em> ancora una volta 7 <em>record</em>.</p><p><strong>Nota bene</strong>: Totò ha poi dettagliato tutto in questo post <a href="https://pigrecoinfinito.com/2020/01/02/spatialite-overlays/">https://pigrecoinfinito.com/2020/01/02/spatialite-overlays/</a></p><h4>SAGA</h4><p><em>Sezione a cura di </em><a href="https://www.lezionigis.it"><strong><em>Ludovico Frate</em></strong></a><em> (grazie).</em></p><p>In <a href="http://www.saga-gis.org/en/index.html"><strong>SAGA GIS</strong></a> è possibile utilizzare il comando <em>Polygon Self-Intersection</em> per ottenere 7 geometrie (<em>record</em>) derivanti dall&#39;unione del vettore originale.<br>I passaggi da eseguire sono:</p><ul><li>Importazione del file geojson utilizzando il comando Import Shapes (Tools -&gt; Import/Export-&gt;GDAL/OGR-&gt;Import Shapes);</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*l-t6Bek3qTYl_v7H.png" /></figure><ul><li>Eseguire l’unione eseguendo il comando Polygon Self-Intersection (Tools -&gt; Shapes-&gt;Polygons-&gt;Polygons Self-Intersection) ed inserire in Polygons il geojson appena caricato, in identifier la colonna id.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*pqHrT1TuhkqjAZ9m.png" /></figure><p>In output i soliti 7 <em>record</em>.</p><h4>R</h4><p><em>Sezione a cura di </em><a href="https://www.linkedin.com/in/andrea-zedda-5b5a1135/"><em>Andrea Zedda</em></a><em> (grazie). Qui il </em><a href="http://rpubs.com/andriatz/563453"><em>notebook</em></a><em>.</em></p><p>Carico la libreria <strong>sf</strong>, una libreria che manipola geometrie spaziali utilizzando lo standard OGC “<em>Simple feature</em>”.<br>Sf è una libreria relativamente nuova in ambiente R ma data la semplicità d’uso, la versatilità e la piena compatibilità con la sintassi “tidy” è già divenuto lo standard incontrastato.</p><pre><strong>library</strong>(sf)</pre><pre>## Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0</pre><pre><strong>library</strong>(tidyverse)</pre><pre>## ── Attaching packages ────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.0 ──</pre><pre>## ✓ ggplot2 3.2.1     ✓ purrr   0.3.3<br>## ✓ tibble  2.1.3     ✓ dplyr   0.8.3<br>## ✓ tidyr   1.0.0     ✓ stringr 1.4.0<br>## ✓ readr   1.3.1     ✓ forcats 0.4.0</pre><pre>## ── Conflicts ───────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──<br>## x dplyr::filter() masks stats::filter()<br>## x dplyr::lag()    masks stats::lag()</pre><pre>s &lt;- st_read(&quot;inputLayer.geojson&quot;)<br>plot(s)</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/719/1*Oav9GE9PkaK47RlW14r0Dg.png" /></figure><p>In in sf il concetto di <strong>unione</strong> è <strong>intersezione</strong> sembrano essere stati interpretati diversamente da geopandas e altri software. Per ottenere l’input lancio quindi semplicemente la funziona <strong>st_intersection</strong> che genera le features derivanti dalle sovrapposizioni e produce di default 2 campi: <strong>n.overlap</strong> che calcola quante volte la geometria si sovrappone con altre geometrie, e <strong>origins</strong>, una lista che contiene la combinazione degli indici delle features che overlappano.</p><pre>i &lt;- s %&gt;% st_intersection()<br>i</pre><pre>## Simple feature collection with 7 features and 3 fields<br>## geometry type:  GEOMETRY<br>## dimension:      XY<br>## bbox:           xmin: 0 ymin: 0 xmax: 3 ymax: 3<br>## epsg (SRID):    NA<br>## proj4string:    NA<br>##     id n.overlaps origins                       geometry<br>## 1    A          1       1 POLYGON ((1.5 0.1339746, 1....<br>## 1.1  A          2    1, 2 POLYGON ((0.1339746 1.5, 0....<br>## 2    B          1       2 POLYGON ((2 2, 2 2, 2 2, 1....<br>## 1.2  A          2    1, 3 POLYGON ((2 1, 1.99863 0.94...<br>## 1.3  A          3 1, 2, 3 GEOMETRYCOLLECTION (LINESTR...<br>## 2.1  B          2    2, 3 POLYGON ((2 2, 1.99863 1.94...<br>## 3    C          1       3 MULTIPOLYGON (((3 1, 2.9986...</pre><p>L’output generato sembra corretto, sono state prodotte 7 features tante quante sono le aree che si sovrappongono. Osservando la colonna delle gemotrie notiamo che non tutte sono dei poligoni ma abbiamo un multypolygon e addirittura una geometrycollection.</p><pre>i %&gt;% <br>  ggplot()+<br>  geom_sf(aes(fill=row.names(i)), show.legend = F)+<br>  facet_wrap(.~row.names(i), )+<br>  theme_bw()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/439/1*KXhhZuoucGl7BuXIOXwwNw.png" /></figure><p>Questo è dovuto ad una delle caratteristiche dello standard <em>simple features</em> che per velocizzare alcune operazione elabora delle coordinate arrotondate. È un caso abbastanza raro ma quando si fanno delle operazioni unarie sulle geometrie è meglio settare la precisione.</p><pre>i &lt;-  st_intersection(st_set_precision(s, 10000))<br>i</pre><pre>## Simple feature collection with 7 features and 3 fields<br>## geometry type:  POLYGON<br>## dimension:      XY<br>## bbox:           xmin: 0 ymin: 0 xmax: 3 ymax: 3<br>## epsg (SRID):    NA<br>## proj4string:    NA<br>##     id n.overlaps origins                       geometry<br>## 1    A          1       1 POLYGON ((1.5 0.134, 1.454 ...<br>## 1.1  A          2    1, 2 POLYGON ((0.134 1.5, 0.1613...<br>## 2    B          1       2 POLYGON ((1.5 1.866, 1.454 ...<br>## 1.2  A          2    1, 3 POLYGON ((2 1, 1.9986 0.947...<br>## 1.3  A          3 1, 2, 3 POLYGON ((1.5 1.866, 1.5446...<br>## 2.1  B          2    2, 3 POLYGON ((2 2, 1.9986 1.947...<br>## 3    C          1       3 POLYGON ((3 1, 2.9986 0.947...</pre><p>Risolto il problema possiamo infine eseguire una seconda operazione che ci consente di portarci nell’output le elaborazioni sugli attributi. In questo caso inserisco nel pipe una funzione di <strong>mutate</strong> che crea una colonna <strong>output</strong> contenente una stringa degli attributi concatenati. Per far ciò si è fatto riferimento al campo origins che contiene come detto la posizione delle geometrie nell’input iniziale. Essendo <em>origins</em> una lista si estraggono i valori utilizzando la funzione <strong>sapply</strong>.</p><pre>out &lt;-  i %&gt;% mutate(output=sapply(origins,<br>                     <strong>function</strong>(x) paste0(as.character(s$id)[x], collapse = &quot;,&quot;)<br>))</pre><p>Si ottiene quindi l’output desiderato.</p><pre>out</pre><pre>## Simple feature collection with 7 features and 4 fields<br>## geometry type:  POLYGON<br>## dimension:      XY<br>## bbox:           xmin: 0 ymin: 0 xmax: 3 ymax: 3<br>## epsg (SRID):    NA<br>## proj4string:    NA<br>##   id n.overlaps origins                       geometry output<br>## 1  A          1       1 POLYGON ((1.5 0.134, 1.454 ...      A<br>## 2  A          2    1, 2 POLYGON ((0.134 1.5, 0.1613...    A,B<br>## 3  B          1       2 POLYGON ((1.5 1.866, 1.454 ...      B<br>## 4  A          2    1, 3 POLYGON ((2 1, 1.9986 0.947...    A,C<br>## 5  A          3 1, 2, 3 POLYGON ((1.5 1.866, 1.5446...  A,B,C<br>## 6  B          2    2, 3 POLYGON ((2 2, 1.9986 1.947...    B,C<br>## 7  C          1       3 POLYGON ((3 1, 2.9986 0.947...      C</pre><pre>out[&quot;output&quot;] %&gt;% plot</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/631/1*fRhDYL1tB32AgsndUy8Ing.png" /></figure><pre>out %&gt;% <br>  ggplot()+<br>  geom_sf(aes(fill=output), show.legend = F)+<br>  facet_wrap(.~output)+<br>  theme_bw()</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/418/1*R6UEVrsHc3Fi2yv10AWW_w.png" /></figure><h4>QGIS (seconda modalità)</h4><p><em>Sezione a cura di </em><a href="https://medium.com/u/2fe57e27513"><em>Ivano Giuliano</em></a><em> (grazie).</em></p><p>L’esempio grafico da risolvere mostrato in quest’articolo, è una rappresentazione di quello che viene definito nella teoria degli insiemi un <strong>diagramma di Venn</strong>, ovvero un diagramma che mostra tutte le possibili relazioni logiche tra un numero finito di insiemi (le tre circonferenze), che vengono a costituire le regioni di interesse. Il metodo si basa proprio su questo concetto, individuazione delle parti di sovrapposizione di regioni e quindi l’insieme di punti in esse ricadenti, nonchè le regioni di provenienza, che andranno a costituire 12 elementi nella prima fase e 7 nella seconda.</p><p>Algoritmo Union —&gt; A-B-B,A-C-C,A-C,B-C,B,A (12 elementi)</p><p>Algoritmo Aggregate —&gt; {A} - {B} - {B,A} - {C} - {C,A} - {C,B} - {C,B,A} ( 7 insiemi)</p><p>Il metodo che si andrà ad esporre qui di seguito, è eseguibile completamente dall’interno di QGIS che prevede due fasi sequenziali con i seguenti geoprocessi.</p><p><strong>Geoalgoritmo </strong>Union</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*j9kWfq0qeqp2sNs4.png" /></figure><p>Riprendendo la definizione : Questo algoritmo controlla le sovrapposizioni tra le features all&#39;interno del livello di Input (nell&#39;esempio : polyover) e crea features separate per quelle parti sovrapposte e non sovrapposte. Ovvero per le parti di aree sovrapposte, verranno create tante features quante sono le effettive parti di sovrapposizione. La tabella degli attributi del <strong>livello Union</strong> che verrà generato, conterrà tutti i valori di attributo delle features originali per le parti non sovrapposte e valori di attributo per le parti sovrapposte, in totale 12 elementi come indicato qui sopra. L’ algoritmo prevede inoltre la possibilità di utilizzare un livello di sovrapposizione e quindi tutte le sue derivazioni, ma che in questo caso non vengono prese in considerazione.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_dFMg6esD84A8luQ.png" /></figure><p><strong>Geoalgoritmo</strong> Aggregate</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*MRcu_xdjzv7DVNJ9.png" /></figure><p>Riprendendo la definizione : Questo algoritmo a partire da un livello vettoriale in ingresso o tabella, permette l’ aggregazione di features tramite una espressione di raggruppamento Group By Expression . Le features che secondo l’espressione restituiranno lo stesso valore, saranno aggregate. <strong><em>Questo rappresenta la chiave di questa risoluzione al quesito proposto, tramite QGIS</em></strong>. L’algoritmo è molto ben strutturato e permette di effettuare tutta una serie di raggruppamenti mediante modalità parametriche diverse, in questo esempio, viene utilizzata la seguente espressione di raggruppamento:</p><p>geom_to_wkt($geometry)</p><p>classica funzione utilizzabile nel field calculator che permette in modalità Well-Known-Text (WKT), di rappresentare la geometria . La risultante del geoprocesso, sarà che le geometrie riconosciute, saranno combinate in una geometria multipart per ogni gruppo creato. I relativi attributi di output, verranno cosí calcolati sulla base di ciascuna aggregazione definita.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1023/0*Rid6CRvuY8MStxxy.png" /></figure><p><strong><em>NOTA BENE</em></strong><em>: </em><a href="https://medium.com/u/225fdb3f1a9a"><em>Salvatore Fiandaca</em></a><em> ha realizzato (grazie) questo </em><a href="https://github.com/aborruso/appunti/raw/master/bozze/unione-mapshaper/overlayUnion_aggrega.model3"><em>modello grafico</em></a><em> QGIS, per questa modalità</em></p><h3>Per concludere</h3><p>L’autore di mapshaper è <a href="https://github.com/mbloch"><strong>Matthew Bloch</strong></a>. È uno sviluppatore con doti al di fuori del comune, sia in termini professionali, che in termini di attitudine all&#39;ascolto e allo scambio con gli altri.<br>Questo comando di unione è stato introdotto da poco (<a href="https://github.com/mbloch/mapshaper/releases/tag/v0.4.141">il 18 novembre 2019</a>), in risposta a una <a href="https://github.com/mbloch/mapshaper/issues/353">richiesta ricevuta</a> nel <em>repository</em> del progetto (da sottolineare che anche precedentemente fosse semplice realizzare la cosa).</p><p>È evidente come <strong>mapshaper </strong>sia (tra quelle di questo articolo) la <strong>soluzione </strong>più <strong>diretta </strong>e <strong>semplice</strong>. Lo è anche perché è stata costruita una funzione specializzata per svolgere questo compito; vista l’utilità dovrebbe/potrebbe essere disponibile anche in altri ambienti.</p><p>Non vi resta che installarlo e apprezzarne anche tutte le altre ottime caratteristiche.</p><p>Un grosso <strong>grazie </strong>a <strong>Matthew </strong>per quello che realizza e mette a disposizione e per il modo in cui lo fa!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2aedec0e484" width="1" height="1" alt=""><hr><p><a href="https://medium.com/tantotanto/unire-i-poligoni-di-un-layer-con-grande-semplicit%C3%A0-%C3%A8-un-lavoro-soltanto-per-mapshaper-2aedec0e484">“Unire” i poligoni di un layer con grande semplicità: è un lavoro (soltanto?) per mapshaper</a> was originally published in <a href="https://medium.com/tantotanto">tantotanto</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>