De WCS spec zegt het volgende over de BBOX parameter van een GetCoverage
request (sectie 9.2.2.7 BBOX):
For any part of the coverage domain that is partly or entirely contained in the Bounding Box defined by BBOX, the server must return coverage data in the requested format.
Dus elk deel van de coverage in de WCS wat geheel of gedeeltelijk overlapt met de BBOX komt terug in de response. Dit is de reden dat bij een arbitraire BBOX een grote kans is op “overshoot” aan alle kanten.
Dit is te ondervangen door de BBOX zo te kiezen dat deze overeenkomt met de RectifiedGrid van het coverage in de WCS. Het RectifiedGrid van het coverage beschrijft o.a. de afmetingen van de gridcellen en de oorsprong van het grid. Deze definitie is op te vragen middels een WCS DescribeCoverage
request, bijv.:
Het relevante gedeelte wat betreft de uitlijning van de coverage zit in het gml:RectifiedGrid
element van de response:
<gml:origin>
<gml:pos>10000 618750</gml:pos>
</gml:origin>
<gml:offsetVector>0.5 0</gml:offsetVector>
<gml:offsetVector>0 -0.5</gml:offsetVector>
Dit stelt dat het raster begint op coördinaten 10000,618750
(elders in de response wordt vermeld dat de nativeCRS
RD is; EPSG:28992), de breedte van een 1 gridcel 0.5m bij een 0.5m is. Afmetingen zijn in meters want de eenheden van RD zijn in meters. De y-richting is negatief in het RectifiedGrid
element, want de origin is gedefinieerd als linksboven. Om een GetCoverage
request te maken zonder overshoot zul je dus waardes moet kiezen voor de BBOX coördinaten die een veelvoud zijn van een 0.5 t.o.v. de origin.
Een voorbeeld:
- een niet uitgelijnde BBOX:
https://service.pdok.nl/rws/ahn/wcs/v1_0?SERVICE=WCS&VERSION=1.0.0&REQUEST=GetCoverage&FORMAT=GEOTIFF&COVERAGE=dtm_05m&BBOX=189719.6877,442773.6877,189720.7822,442774.8283&CRS=EPSG:28992&RESPONSE_CRS=EPSG:28992&RESX=0.5&RESY=0.5
De reden achter het niet beschikbaar zijn van een exacte clip operatie op de WCS, is dat zo de data niet geresampled hoeft te worden. Als je de gridcel grootte wijzigt of de origin dan zal er namelijk geresampled moet worden. Bij dit resamplen treedt over het algemeen kwaliteitsverlies op, omdat waardes gemiddeld worden. Vandaar dat het aan te bevelen is resample te voorkomen, mits dat mogelijk is. Daarbij moet dan ook de BBOX precies een veelvoud aan gridcellen groot zijn.
Overigens biedt de WCS ook verschillende resample methodes aan, in het geval je toch een request doet waarbij reresampled moet worden (bij een GetCoverage request met afwijkende resolutie/pixel grootte). Zie de supportedInterpolations
in het DescribeCoverage
request. Het voert wat te diep om hier de verschillen tussen de resampling methodes uit te leggen. Hier is een gis.stackexchange post die de verschillen kort beschrijft.