Il protocollo WCS - Laboratorio di Geomatica

Transcript

Il protocollo WCS - Laboratorio di Geomatica
Andrea Aime
Geoserver, protocollo
WCS
Geoserver lead developer
The Open Planning Project
Geoserver, un server OpenSDI a standard OGC
Como 22/01/2007
WCS, Web Coverage Service
Così come WFS, si lavora a livello di livello di “codice
sorgente” dell'informazione geografica.
Presuppone un approccio a campi.
Gli oggetti territoriali di WCS si chiamano Grid
Coverage, hanno una estensione (non
necessariamente bi-dimensionale), una risoluzione,
una o più bande informative.
Mentre per i vettoriali il formato standard è GML, in
WCS deve essere supportato almeno uno fra una
rosa di formati (GeoTIFF, HDF-EOS, DTED, NITF,
GML)
Geoserver 1.5.x implementa WCS 1.0 e supera i test
CITE relativi.
2
Grid Coverage, il presente
Le grid coverage supportate al momento sono
bidimensionali
Il supporto è stato testato estensivamente su
immagini satellitari semplici, in mosaico, o su
piramide, in true color
Il supporto a raster “geofisici” è presente, ma non
altrettanto testato
Lo stesso si può dire per immagini con palette (256 o
più colori)
In Geoserver, il supporto WCS ha permesso di
supportare anche i raster nel WMS (Geoserver 1.4.0
non è in grado di gestire dati raster).
3
Grid coverage, il futuro
Supporto completo al RasterSymbolizer (vedi
descrizione di SLD nella presentazione WMS)
Si sta parlando di supporto a grid n-dimensionali (ora
possono essere simulate col supporto multi-banda se
la terza dimensione ha un dominio finito e “piccolo”)
4
Formati standard in ingresso
GeoTIFF nelle sue varie forme. In particolare, per
servire mappe tramite WMS, si consiglia di effettuare
il tiling interno e di aggiungere le overview (con
GDAL, anche se stiamo sviluppando tool specifici).
Immagine + world file + projection file (proiezione in
formato wkt)
ArcGRID
Gtopo30
In lavorazione, abbiamo ECW e JPEG2000
(appoggiandosi su GDAL), e NetCDF
5
Formati di ingresso non standardizzati
Mosaico di immagini
Supporta tiling regolare o immagini sovrapposte
Usa uno shapefile di appoggio per la descrizione delle
envelope e l'indicizzazione, esattamente come
MapServer
Può essere prodotto con gdaltindex, ma richiede un file
di proprietà ulteriore.
Piramide di immagini
Si tratta di un insieme di mosaici regolari contenuti in
cartelle separate
Un file di proprietà lega le risoluzioni alle cartelle,
consentendo di scegliere il livello più appropriato alla
richiesta WCS o WMS
Esistono strumenti per crearlo, piuttosto primitivi al
momento
6
Scalabilità
In linea generale, le Geotiff con overview complete
(livelli per potenze di due) sono piuttosto veloci, si
possono servire senza difficoltà raster di centinaia di
megabyte o pochi gigabyte
Le piramidi sono consigliate quando i dati sono
svariati gigabyte e devono scalare dalla piena
risoluzione alla overview di piccola scala
Come ha commentato un utente sulla mailing list:
AA: I'm doing other tests, since apparently a 1.4GB
image is not big enough to show a performance
difference (between pyramid and overviews)
VS: Hey, that's peanuts. Be a man, try mosaicing all
SRTM data. But watch out for the tiff 2 or 4 Gb limit.
NDR: 14GB di GTIFF in .zip, si possono scaricare da
ftp://srtm.csi.cgiar.org/srtm_v3/SRTM_Data_GeoTiff/)
7
WCS, operazioni
GetCapabilities
DescribeCoverage
GetCoverage
La specifica WCS non prevede, al momento, un
WCS-T (coverage modificabili)
8
WCS GetCapabilities
E' la carta di identità del server, il punto di accesso
che consente di conoscerlo, di sapere quali dati
fornisce e cosa può fare
Analogo a quello di WFS, in questo caso abbiamo
una descrizione sommaria delle coverage:
...
<CoverageOfferingBrief>
<metadataLink about="http://www.geotools.org/WorldImageReader+formats"
metadataType="other"/>
<description>Generated from img_sample2</description>
<name>nurc:Pk50095</name>
<label>Pk50095 is a A raster file accompanied by a spatial data file</label>
<lonLatEnvelope srsName="urn:ogc:def:crs:OGC:1.3:CRS84">
<gml:pos>12.999446822650462 46.722110379286</gml:pos>
<gml:pos>13.308182612644663 46.91359611878293</gml:pos>
</lonLatEnvelope>
<keywords>
<keyword>WCS</keyword>
<keyword>img_sample2</keyword>
<keyword>Pk50095</keyword>
</keywords>
</CoverageOfferingBrief>
...
9
WCS DescribeCoverage
Analoga a DescribeFeature, consente di conoscere la
struttura della coverage:
Dominio spaziale e temporale
Attributi e loro struttura (possono essere semplici
scalari, oppure vettori, o “compound”, ad esempio,
radiazione per lunghezza d'onda, con vari range di l.o.)
CRS in cui la coverage può essere richiesta e fornita
Formati in cui la coverage può essere prodotta
La risposta può essere molto complessa nel caso
generale.
Nel caso specifico di Geoserver, si lavora con
immagini a bande per cui i range sono semplici
intervalli o enumerazioni
10
WCS DescribeCoverage, un assaggio dello schema
11
DescribeCoverage, Gtopo30, pag 1
<?xml version="1.0" encoding="UTF-8"?>
<CoverageDescription ...>
<CoverageOffering>
... omesso la parte comune con GetCapabilities
<domainSet>
<spatialDomain>
<gml:Envelope srsName="EPSG:4326">
<gml:pos>-19.999999999999996 40.000000000019995</gml:pos>
<gml:pos>19.99999999998401 90.0</gml:pos>
</gml:Envelope>
<gml:RectifiedGrid dimension="2">
<gml:limits>
<gml:GridEnvelope>
<gml:low>0 0</gml:low>
<gml:high>4800 6000</gml:high>
</gml:GridEnvelope>
</gml:limits>
<gml:axisName>Lon</gml:axisName>
<gml:axisName>Lat</gml:axisName>
<gml:origin>
<gml:pos>-19.999999999999996 90.0</gml:pos>
</gml:origin>
<gml:offsetVector>0.00833333333333 0.0</gml:offsetVector>
<gml:offsetVector>0.0 -0.00833333333333</gml:offsetVector>
</gml:RectifiedGrid>
</spatialDomain>
</domainSet>
12
DescribeCoverage, Gtopo30, pag 2
<rangeSet>
<RangeSet>
<name>nurc:gtopo30_Coverage</name>
Un solo asse, “Band”,
<label>DTED Example (W020N90)</label>
con un solo possibile valore, 1.
<axisDescription>
Per GeoTIFF RBG avremo un asse,
<AxisDescription>
Band, con tre valori 1,2,3
<name>Band</name>
<label>Band</label>
<values><singleValue>1</singleValue></values>
</AxisDescription>
</axisDescription>
<nullValues><singleValue>0</singleValue></nullValues>
</RangeSet>
</rangeSet>
<supportedCRSs>
<requestResponseCRSs>EPSG:4326</requestResponseCRSs>
</supportedCRSs>
<supportedFormats nativeFormat="Gtopo30">
<formats>GTOPO30</formats>
<formats>GeoTIFF</formats>
<formats>PNG</formats>
Il codice supporta anche
<formats>GIF</formats>
interpolazione bi e tri lineare
<formats>TIFF</formats>
</supportedFormats>
<supportedInterpolations default="nearest neighbor">
<interpolationMethod>nearest neighbor</interpolationMethod>
</supportedInterpolations>
</CoverageOffering>
</CoverageDescription>
13
GetCoverage
Richiesta di una coverage, specificando:
Formato della coverage generata
Dominio richiesto (spazio e tempo)
CRS
Attributi richiesti (quali assi, quali valori degli assi)
Metodo di interpolazione
Nuovamente, la richiesta in XML è abbastanza
sofisticata
La chiamata può essere effettuata anche come GET
14
Esempio di GetCoverage (POST)
<GetCoverage service="WCS" ...>
<sourceCoverage>nurc:Arc_Sample</sourceCoverage>
<domainSubset>
<spatialSubset>
<gml:Envelope srsName="EPSG:4326">
<gml:pos>9.420000076293944 42.20000076293945</gml:pos>
<gml:pos>11.819999694824217 43.90000049273173</gml:pos>
</gml:Envelope>
<gml:Grid dimension="2" srsName="EPSG:4326">
<gml:limits>
<gml:GridEnvelope>
<gml:low>0 0</gml:low>
E' necessario specificare
<gml:high>120 85</gml:high>
o una griglia,
</gml:GridEnvelope>
</gml:limits>
o una risoluzione
<gml:axisName>Band</gml:axisName>
</gml:Grid>
</spatialSubset>
</domainSubset>
<rangeSubset>
<axisSubset name="Band">
<singleValue>1</singleValue>
</axisSubset>
</rangeSubset>
<output>
<crs>EPSG:4326</crs>
<format>TIFF</format>
</output>
</GetCoverage>
15
WCS, i client
Impostare una richiesta WCS a mano è piuttosto
laborioso
Allo stesso tempo, i client sono carenti:
GAIA3 supporta WCS (non è liberamente scaricabile)
GvSig 0.6 funziona con Geoserver, GvSig 1.0 presenta
dei problemi
...
La specifica è relativamente recente rispetto alle altre,
il suo uso meno richiesto
16