Scraping valori da un servizio WMS

Come effettuare il drapingdi punti con il servizio WMS.

A cura di Totò Fiandaca  | issue #44 | guida/e Andrea Borruso


Caso d’uso

Dato un servizio WMS (DTM 20 m) e una serie di punti (x,y), come realizzare il draping dei punti sul DTM, cioè come ottenere la quota dei punti (x,y,elev) sul DTM.

script bash

#!/bin/bash
gdallocationinfo "http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/DTM_20M.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=EL.DTM.20M&SRS=EPSG:4326&BBOX=6.5,35.3,18.6,47.1" -xml -geoloc 13 38  -b 1  | scrape -e '//value_0/text()'

questo script gratta la quota del punto di coordinate (13 38) → 181

per ottenere le elevazioni su una serie di punti occorre realizzare un loop:

IFS=$'\n';
for LINE in $(cat point.tsv); do
    VARA=$(echo ${LINE} | awk '{ print $1}')
    VARB=$(echo ${LINE} | awk '{ print $2 }')
gdallocationinfo "http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/WMS_v1.3/raster/DTM_20M.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&LAYERS=EL.DTM.20M&SRS=EPSG:4326&BBOX=6.5,35.3,18.6,47.1" -xml -geoloc ${VARA} ${VARB}  -b 1  | scrape -e '//value_0/text()' >> output.csv
done
paste point.tsv toto.csv > punti_quotati.tsv
rm ./output.csv

NB: il file dei punti (point.tsv) non deve avere intestazione e deve contenere solo le coordinate x e y con separatore tab; alla fine dello script otterremo un file (punti_quotati.tsv) con x y elev ma senza intestazione.

lon lat elev
14.77560 37.819703 713
15.04366 37.772526 1957
14.58021 37.608423 269
14.52765 37.876929 1265
14.47786 37.830808 1005

Osservazioni

La ricetta è stata realizzata per un caso concreto utile nel mondo dei gissari ma il principio che ci sta dietro è generale.

Ultima modifica 19/07/2020: close #50 (a1365d8)