[gdal-dev] Error in gdalwarp
Even Rouault
even.rouault at spatialys.com
Sat Oct 22 12:54:08 PDT 2016
On Saturday 22 October 2016 18:30:27 Paolo Cavallini wrote:
> Hi all,
> I'm running gdalwarp on data from
>
> https://github.com/qgis/QGIS-Training-Data/tree/master/training_manual_data/
> processing/iterative
>
> as
>
> gdalwarp -ot Float32 -q -of GTiff -cutline watersheds.shp -co
> COMPRESS=DEFLATE -co PREDICTOR=1 -co ZLEVEL=6 -wo OPTIMIZE_SIZE=TRUE
> dem25.tif OUTPUT.tif
>
> and I get
>
> GDAL command output:
> Warning 1: Self-intersection at or near point 583.00000000000182 326
> ERROR 1: Cutline is not valid after transformation
>
> Previously the same command was running fine. I also checked geom
> validity of the vector, and I coud not spot any error.
>
> Is there an explanation?
Hi Paolo,
Since GDAL 2.1, validation of the cutline geometry once reprojected into
source coordinates is done, and defaults into an error if the validation
fails.
Here the issue is linked to the fact that when the cutline datasource is made
of several polygons, a multipolygon is made with them by adding them as parts
of the multipolygon. And if you do that on watersheds.shp, it results in a
invalid multipolygon likely because the parts share common boundaries
You can revert to the previous behaviour and avoid the error to be fatal by
adding
--config GDALWARP_IGNORE_BAD_CUTLINE YES
to the gdalwarp command line.
The clipping to the cutline might work or not depending on the nature of the
invalidity (in your case that shouldn't be an issue). The check was added
because there were use cases where unnoticed invalidities resulted in rather
critical issues (for example when you need to clip out some regions because of
regulations on forbidden zones, and an invalidity causes an area that should
have been clipped out to not being clipped out).
Probably that in the use case you point, the way the multipolygon is built
should be revised to use a proper unioning operation instead of the current
rather naive way. Could be worth a ticket.
You can do that step manually with:
ogr2ogr cutline.shp -sql "select st_union(geometry) from watersheds"
watersheds.shp -dialect sqlite
Even
--
Spatialys - Geospatial professional services
http://www.spatialys.com
More information about the gdal-dev
mailing list