[gdal-dev] Remapping nodata

Brad Hards bradh at frogmouth.net
Thu Jan 7 13:44:52 PST 2016


On Thu, 7 Jan 2016 11:09:10 AM Even Rouault wrote:
> gdal_translate -of VRT -a_nodata will not remap values, but just change the
> declared nodata value.
That is in the docs, but was still a little unexpected :-) 

I did the gdalwarp solution, but as the source data gets larger, then the 
resource cost of duplicating all the data goes up.

> You can though manually post-edit the VRT to make the SimpleSource a
> ComplexSource and add a NODATA node, as below:
> 
> <VRTDataset rasterXSize="2" rasterYSize="2">
>   <GeoTransform>  4.4072000000000000e+05,  6.0000000000000000e+01,
> 0.0000000000000000e+00,  3.7513200000000000e+06,  0.0000000000000000e+00,
> -6.0000000000000000e+01</GeoTransform>
>   <Metadata>
>     <MDI key="AREA_OR_POINT">Area</MDI>
>   </Metadata>
>   <VRTRasterBand dataType="Float32" band="1">
>     <NoDataValue>99999</NoDataValue>
>     <ColorInterp>Gray</ColorInterp>
>     <ComplexSource>
>       <SourceFilename relativeToVRT="1">in.asc</SourceFilename>
>       <SourceBand>1</SourceBand>
>       <SourceProperties RasterXSize="2" RasterYSize="2" DataType="Float32"
> BlockXSize="2" BlockYSize="1" />
>       <SrcRect xOff="0" yOff="0" xSize="2" ySize="2" />
>       <DstRect xOff="0" yOff="0" xSize="2" ySize="2" />
>       <NODATA>nan</NODATA>
>     </ComplexSource>
>   </VRTRasterBand>
> </VRTDataset>
> 
> 
> Which can also be accomplished with gdalbuildvrt  and the -vrtnodata switch
> without any manual editing:
> 
> $ gdalbuildvrt out2.vrt in.asc -vrtnodata 0
> 
> $ cat out2.vrt
> <VRTDataset rasterXSize="2" rasterYSize="2">
>   <GeoTransform>  4.4072000000000000e+05,  6.0000000000000000e+01,
> 0.0000000000000000e+00,  3.7513200000000000e+06,  0.0000000000000000e+00,
> -6.0000000000000000e+01</GeoTransform>
>   <VRTRasterBand dataType="Float32" band="1">
>     <NoDataValue>0</NoDataValue>
>     <ColorInterp>Gray</ColorInterp>
>     <ComplexSource>
>       <SourceFilename relativeToVRT="1">in.asc</SourceFilename>
>       <SourceBand>1</SourceBand>
>       <SourceProperties RasterXSize="2" RasterYSize="2" DataType="Float32"
> BlockXSize="2" BlockYSize="1" />
>       <SrcRect xOff="0" yOff="0" xSize="2" ySize="2" />
>       <DstRect xOff="0" yOff="0" xSize="2" ySize="2" />
>       <NODATA>nan</NODATA>
>     </ComplexSource>
>   </VRTRasterBand>
> </VRTDataset>
> 
> $ gdal_translate out2.vrt /vsistdout/ -of aaigrid
> ncols        2
> nrows        2
> xllcorner    440720.000000000000
> yllcorner    3751200.000000000000
> cellsize     60.000000000000
> NODATA_value  0
>  0.0 123
>  115 132

Thanks - very nice solution.

Brad



More information about the gdal-dev mailing list