-
-
Save pigreco/86589dddf5a59b3a7650267d5af237bd to your computer and use it in GitHub Desktop.
# -*- coding: utf-8 -*- | |
""" | |
/*************************************************************************** | |
WMS Catasto Agenzia delle Entrate CC BY 4.0 | |
------------------- | |
copyright : (C) 2020 by Giulio Fattori | |
email : xxxxx.xxxxxxx@xxxxx.it | |
***************************************************************************/ | |
""" | |
from qgis.core import * | |
from qgis.gui import * | |
import requests | |
@qgsfunction(args='auto', group='Custom') | |
def get_parcel_info2(xx, yy, EPSG, feature, parent): | |
""" | |
<h1>WMS Catasto Agenzia delle Entrate CC BY 4.0:</h1><br> | |
La funzione, tramite una richiesta GetFeatureInfo, restituisce le informazioni utili sulla particella che ricade sotto il pixel di mio interesse: | |
<h2>Esempio:</h2> | |
<ul> | |
<li>get_parcel_info(355461.5,4222490.7,'EPSG:3045') -> 'IT.AGE.PLA.G273_0033A0.673'</li> | |
<li>get_parcel_info("fieldX", "fieldY",'EPSG:3045') -> 'IT.AGE.PLA.G273_0033A0.673'</li> | |
<li>get_parcel_info("fieldX", "fieldY",@project_crs) -> 'IT.AGE.PLA.G273_0033A0.673'</li> | |
</ul> | |
<h2>NB: le coordinate X e Y devono essere espresse nel EPSG utilizzato (gli EPSG disponibili sono:6706,4258,25832/3/4,3044/5/6)</h2> | |
""" | |
req = "https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?REQUEST=GetFeatureInfo&SERVICE=WMS&SRS="+EPSG+"&STYLES=&VERSION=1.1&FORMAT=image/png&BBOX="+str(xx-1)+","+str(yy-1)+","+str(xx+1)+","+str(yy+1)+"&HEIGHT=9&WIDTH=9&LAYERS=CP.CadastralParcel&QUERY_LAYERS=CP.CadastralParcel&INFO_FORMAT=text/html&X=5&Y=5" | |
r = requests.get(req, auth=('user', 'pass')) | |
a = r.text.partition("InspireId localId</th><td>")[2] | |
b = a.partition("</td>")[0] | |
return b |
Creare un vettore puntuale, per esempio in un GeoPackage e definire solo il campo fid, gli altri campi li definiamo come
campi virtuali
, ecco le definizioni:
- fid : -
- x :
x($geometry)
- y :
y($geometry)
- catasto :
get_parcel_info( "x" , "y" )
- codice :
regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\4')
- foglio :
regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\5')
- particella :
regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\6')
EDIT
IT.AGE.PLA.G273_011800.485
caso senza sezioneIT.AGE.PLA.B354A0018V0.2261
caso con sezioneAlcuni comuni presentano delle sezioni e quindi la stringa estratta da
get_parcel_info()
puo' variare, per tenere conto di questi casi occorre utilizzare le seguenti espressioni:
- codice :
/*campo codice comune 4 caratteri*/ substr( regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)\\.(.+)$', '\\4'),1,4)
- sezione:
/*campo sezione 1 carattere*/ substr( regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)\\.(.+)$', '\\4'),5,1)
- foglio :
/*campo foglio 4 caratteri*/ substr( regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)\\.(.+)$', '\\4'),6,4)
- allegato:
/*campo allegato 1 carattere*/ substr( regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)\\.(.+)$', '\\4'),10,1)
- sviluppo:
/*campo sviluppo 1 carattere*/ substr( regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)\\.(.+)$', '\\4'),11,1)
- particella :
/*campo particella variabile*/ regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)\\.(.+)$', '\\5')
Video demo:
/*estrae il foglio e la particella catastale a partire da un poligono*/ with_variable('fp', with_variable('geom3045', transform($geometry,'EPSG:4326', @project_crs ), get_parcel_info( x( point_on_surface( @geom3045)), y( point_on_surface( @geom3045)))), regexp_replace( @fp ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\5/\\6') )
Corsi su QGIS
- Field Calc : https://pigrecoinfinito.com/2020/09/23/corso-field-calc-qgis-3-v2/
- Print Layout : https://pigrecoinfinito.com/2020/09/30/corso-print-layout-di-qgis-3/
Se lo trovi utile dona : https://www.paypal.com/paypalme/pigrecoinfinito
### Si potrebbe usare un'unica regex fatta così:
codice: regexp_matches( "catasto" ,'^(.+)\.(.+)\.(.+)\.(.{4})(.)(.+)\.(.+)')[3]
sezione: regexp_matches( "catasto" ,'^(.+)\.(.+)\.(.+)\.(.{4})(.)(.+)\.(.+)')[4]
foglio: regexp_matches( "catasto" ,'^(.+)\.(.+)\.(.+)\.(.{4})(.)(.+)\.(.+)')[5]
particella: regexp_matches( "catasto" ,'^(.+)\.(.+)\.(.+)\.(.{4})(.)(.+)\.(.+)')[6]
Si potrebbe usare un'unica regex fatta così:
codice: regexp_matches( "catasto" ,'^(.+).(.+).(.+).(.{4})(.)(.+).(.+)')[3]
sezione: regexp_matches( "catasto" ,'^(.+).(.+).(.+).(.{4})(.)(.+).(.+)')[4]
foglio: regexp_matches( "catasto" ,'^(.+).(.+).(.+).(.{4})(.)(.+).(.+)')[5]
particella: regexp_matches( "catasto" ,'^(.+).(.+).(.+).(.{4})(.)(.+).(.+)')[6]
quasi, suggerirei così:
regexp_matches( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$')[x]
con x
che varia da 0 a 5
Creare un vettore puntuale, per esempio in un GeoPackage e definire solo il campo fid, gli altri campi li definiamo come
campi virtuali
, ecco le definizioni:x($geometry)
y($geometry)
get_parcel_info( "x" , "y" )
regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\4')
regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\5')
regexp_replace( "catasto" ,'^(.+)\\.(.+)\\.(.+)\\.(.+)_(.+)\\.(.+)$', '\\6')
EDIT
IT.AGE.PLA.G273_011800.485
caso senza sezioneIT.AGE.PLA.B354A0018V0.2261
caso con sezioneAlcuni comuni presentano delle sezioni e quindi la stringa estratta da
get_parcel_info()
puo' variare, per tenere conto di questi casi occorre utilizzare le seguenti espressioni:Video demo:
Corsi su QGIS
Se lo trovi utile dona : https://www.paypal.com/paypalme/pigrecoinfinito