I'm trying to mosaic several rasters with gdal.BuildVRT in Python 2.7 (Windows system), but code runs with logical problems.
When I try to merge 3 Landsat images datasets, resulting image is a tile (Float32) that include 'nan' values in raster areas of two datasets (see next image).
When I do a mosaic with GdalBuildVRT in Python, it shows me the following problem:
The code used is the following:
from osgeo import gdal
import osr, numpy as np
def save_raster ( output_name, dataset, driver ,NaN_Value):
"""
A function to save a 1-band raster using GDAL to the file indicated
by ``output_name``. It requires a GDAL-accesible dataset to collect
the projection and geotransform.
"""
# Open the reference dataset
g = ( dataset )
# Get the Geotransform vector
geo_transform = g.GetGeoTransform ()
x_size = g.RasterXSize # Raster xsize
y_size = g.RasterYSize # Raster ysize
srs = g.GetProjectionRef () # Projection
raster_data = g.ReadAsArray()
NaN_rast = NaN_Value
# raster_data[raster_data == NaN_rast] = 'NaN'
raster_data[raster_data == NaN_rast] = np.NaN
# Need a driver object. By default, we use GeoTIFF
driver = gdal.GetDriverByName ( driver )
dataset_out = driver.Create ( output_name, x_size, y_size, 1, \
gdal.GDT_Float32 )
dataset_out.SetGeoTransform ( geo_transform )
dataset_out.SetProjection ( srs )
dataset_out.GetRasterBand ( 1 ).WriteArray ( \
raster_data.astype(np.float32) )
TILE1 = "C:\Users\italo\Documents\GeoPRADS\LANDSAT\NUEVAS IMGS LANDSAT\Input ETa\TILE1.TIF"
TILE2 = "C:\Users\italo\Documents\GeoPRADS\LANDSAT\NUEVAS IMGS LANDSAT\Input ETa\TILE2.TIF"
TILE3 = "C:\Users\italo\Documents\GeoPRADS\LANDSAT\NUEVAS IMGS LANDSAT\Input ETa\TILE3.TIF"
in_subruta = TILE1+'-'+TILE2+'-'+TILE3 #string
subruta = in_subruta.split('-') #to list
gdal.BuildVRTOptions(VRTNodata= 0)
b1 = gdal.BuildVRT("dummy", subruta,VRTNodata= "NaN" )
save_raster(pathout+'/mosaic.tif',b1,"GTiff",0)
VRTNodata take the 'nan' data as a value.
So, where is the problem in the code?
b1 = gdal.BuildVRT("dummy", subruta, VRTNodata=np.NaN)
orb1 = gdal.BuildVRT("dummy", subruta, VRTNodata=np.NaN, srcNodata=np.NaN)
?