|
| 1 | +# Esplorare i servizi OGC del catalogo RNDT |
| 2 | + |
| 3 | +Gran parte dei metadati RNDT linka **servizi OGC** — WMS, WFS, WCS, WMTS |
| 4 | +(campo `links`, `dctype`). Questo riferimento è di servizio all'esplorazione di |
| 5 | +quei servizi: una volta ottenuto l'endpoint con `openrndt get`, ispezionalo per |
| 6 | +capire cosa offre (layer, feature type, interrogabilità, dati scaricabili) |
| 7 | +prima di usarlo. |
| 8 | + |
| 9 | +Strumento di elezione: **GDAL/OGR con output JSON**, perché dà info strutturate |
| 10 | +e affidabili. Regola generale valida per qualunque servizio OGC, non solo quelli |
| 11 | +del RNDT: **non andare a memoria sui nomi dei layer, interroga il servizio**. |
| 12 | + |
| 13 | +Parsa sempre con `jq` e azzera lo stderr (`2>/dev/null`): i warning GDAL |
| 14 | +sporcano lo stdout JSON. |
| 15 | + |
| 16 | +## Il GetCapabilities ha TUTTO |
| 17 | + |
| 18 | +Ogni servizio OGC si auto-descrive con il documento **GetCapabilities**: è la |
| 19 | +fonte autorevole e completa. Contiene tutto ciò che serve a usare il servizio: |
| 20 | + |
| 21 | +- elenco dei layer / feature type / coverage, con `Name`, `Title`, `Abstract`; |
| 22 | +- per i WMS: l'attributo `queryable="0|1"` (interrogabilità con GetFeatureInfo), |
| 23 | + gli **stili** disponibili, i **formati** immagine e i formati di |
| 24 | + GetFeatureInfo, i limiti di **scala** (`MinScaleDenominator`/`Max…`); |
| 25 | +- i **CRS/SRS** supportati e i **bounding box** per ciascun layer; |
| 26 | +- per i WFS: i formati di output (`outputFormat`), le operazioni supportate. |
| 27 | + |
| 28 | +Richiesta (sostituisci `SERVICE`/`VERSION` per WFS/WCS/WMTS): |
| 29 | + |
| 30 | +```bash |
| 31 | +curl -s "<endpoint>?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities" -o caps.xml |
| 32 | +``` |
| 33 | + |
| 34 | +GDAL/OGR ne leggono solo un **sottoinsieme comodo** (nomi + titoli, come layer |
| 35 | +raster/vettoriali pronti all'uso) e scartano il resto. Quindi: usa GDAL per la |
| 36 | +via rapida, ma quando ti serve un'informazione che GDAL non espone |
| 37 | +(queryability, stili, scale, formati) vai **sempre** al GetCapabilities nativo. |
| 38 | + |
| 39 | +## Esplorare un WMS — `gdalinfo -json` |
| 40 | + |
| 41 | +Elenca i layer come *subdataset* (parsing del GetCapabilities): |
| 42 | + |
| 43 | +```bash |
| 44 | +gdalinfo -json "WMS:<endpoint>?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities" 2>/dev/null \ |
| 45 | + | jq -r '.metadata.SUBDATASETS | to_entries[] | select(.key|endswith("_DESC")) | .value' |
| 46 | +``` |
| 47 | + |
| 48 | +Ogni subdataset ha solo due chiavi: |
| 49 | + |
| 50 | +- `SUBDATASET_N_NAME` → un URL **GetMap** (è GDAL che traduce ogni layer in |
| 51 | + una richiesta GetMap; per questo il subdataset non è un GetCapabilities). |
| 52 | +- `SUBDATASET_N_DESC` → il **titolo** del layer. |
| 53 | + |
| 54 | +## Esplorare un WFS — `ogrinfo -json` |
| 55 | + |
| 56 | +Elenca i *feature type* (layer vettoriali): |
| 57 | + |
| 58 | +```bash |
| 59 | +ogrinfo -json "WFS:<endpoint>" 2>/dev/null | jq '[.layers[].name]' |
| 60 | +``` |
| 61 | + |
| 62 | +## Cosa GDAL NON dà: `queryable` e abstract |
| 63 | + |
| 64 | +`gdalinfo -json` espone **solo** Nome (come GetMap) e Titolo. **Non** porta i |
| 65 | +flag di capability del WMS (`queryable`, `opaque`, stili) né l'abstract: per |
| 66 | +design li scarta. Verificato e confermato dalla doc GDAL (driver WMS) e dalla |
| 67 | +community: *"the NAME is used as `_NAME`, the TITLE for `_DESC`… user need to |
| 68 | +read the [resto] directly from the native GetCapabilities response"*. |
| 69 | + |
| 70 | +### Quali layer sono interrogabili con GetFeatureInfo? |
| 71 | + |
| 72 | +Sta **solo** nel GetCapabilities XML, attributo `<Layer queryable="0|1">`. |
| 73 | +GDAL non lo espone. Lettura diretta: |
| 74 | + |
| 75 | +```bash |
| 76 | +curl -s "<endpoint>?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities" -o caps.xml |
| 77 | +grep -n -A2 '<Layer queryable=' caps.xml | grep -E 'queryable=|<Name>' |
| 78 | +``` |
| 79 | + |
| 80 | +Il primo `<Name>` dopo ogni `<Layer queryable="…">` è il nome del layer (lo |
| 81 | +`<Name>` con `default` che segue appartiene allo `<Style>`, ignoralo). |
| 82 | + |
| 83 | +## Interrogare un punto (GetFeatureInfo) — `gdallocationinfo` |
| 84 | + |
| 85 | +GDAL *sa* fare una GetFeatureInfo, ma con un altro strumento: interroga e |
| 86 | +basta, non ti dice prima se il layer è queryable. |
| 87 | + |
| 88 | +```bash |
| 89 | +gdallocationinfo "WMS:<url GetMap del layer>" -wgs84 <lon> <lat> |
| 90 | +``` |
| 91 | + |
| 92 | +## Scaricare vettoriale da un WFS — `ogr2ogr` |
| 93 | + |
| 94 | +```bash |
| 95 | +ogr2ogr -f GPKG out.gpkg "WFS:<endpoint>" <feature_type> \ |
| 96 | + -spat <xmin> <ymin> <xmax> <ymax> # ritaglio per bbox |
| 97 | +``` |
| 98 | + |
| 99 | +## Altri servizi OGC |
| 100 | + |
| 101 | +- **WCS** (coverage raster): `gdalinfo -json "WCS:<endpoint>"` → subdataset |
| 102 | + delle coverage; poi `gdal_translate "WCS:…"` per scaricare. |
| 103 | +- **WMTS** (tile): `gdalinfo -json "WMTS:<endpoint>"` → subdataset per |
| 104 | + layer/tile-matrix-set. |
| 105 | + |
| 106 | +In tutti i casi vale la stessa regola: GDAL elenca i layer/coverage ma **non** |
| 107 | +porta i flag di capability — per dettagli (queryability, formati, stili) leggi |
| 108 | +il GetCapabilities nativo. |
| 109 | + |
| 110 | +## Esempio reale: catasto Agenzia delle Entrate |
| 111 | + |
| 112 | +Servizio nazionale (copre tutta Italia, isole comprese). Scheda RNDT: |
| 113 | +`openrndt get age:consultazione_catasto_wms`. |
| 114 | + |
| 115 | +- **WMS**: `https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php` |
| 116 | + — 11 layer; gli edifici sono il layer **`fabbricati`** (titolo "Fabbricati"), |
| 117 | + NON `BU.Building`. Particelle = `CP.CadastralParcel`, mappe/zone = |
| 118 | + `CP.CadastralZoning`. |
| 119 | +- **WFS**: `https://wfs.cartografia.agenziaentrate.gov.it/inspire/wfs/owfs01.php` |
| 120 | + — solo 2 feature type: `CP:CadastralParcel` e `CP:CadastralZoning`. **I |
| 121 | + fabbricati NON sono nel WFS**: edifici disponibili solo come WMS (raster). |
| 122 | +- **Interrogabili (GetFeatureInfo)**: solo `Cartografia_Catastale`, |
| 123 | + `CP.CadastralZoning`, `CP.CadastralParcel`. `fabbricati` **non** è queryable. |
0 commit comments