def __init__(self, srs=None, ext=None, ds=None, **kwargs): """Create Domain from GDALDataset or string options or lat/lon grids""" # If too much information is given raise error if ds is not None and srs is not None and ext is not None: raise ValueError( 'Ambiguous specification of both dataset, srs- and ext-strings.' ) # choose between input opitons: # ds # ds and srs # srs and ext # if only a dataset is given: # copy geo-reference from the dataset if ds is not None and srs is None: self.vrt = VRT.from_gdal_dataset(ds) # If dataset and srs are given (but not ext): # use AutoCreateWarpedVRT to determine bounds and resolution elif ds is not None and srs is not None: srs = NSR(srs) tmp_vrt = gdal.AutoCreateWarpedVRT(ds, None, srs.wkt) if tmp_vrt is None: raise NansatProjectionError( 'Could not warp the given dataset to the given SRS.') else: self.vrt = VRT.from_gdal_dataset(tmp_vrt) # If SpatialRef and extent string are given (but not dataset) elif srs is not None and ext is not None: srs = NSR(srs) # create full dictionary of parameters extent_dict = Domain._create_extent_dict(ext) # convert -lle to -te if 'lle' in extent_dict.keys(): extent_dict = self._convert_extentDic(srs, extent_dict) # get size/extent from the created extent dictionary geo_transform, raster_x_size, raster_y_size = self._get_geotransform( extent_dict) # create VRT object with given geo-reference parameters self.vrt = VRT.from_dataset_params(x_size=raster_x_size, y_size=raster_y_size, geo_transform=geo_transform, projection=srs.wkt, gcps=[], gcp_projection='') elif 'lat' in kwargs and 'lon' in kwargs: warnings.warn( 'Domain(lon=lon, lat=lat) will be deprectaed!' 'Use Domain.from_lonlat()', NansatFutureWarning) # create self.vrt from given lat/lon self.vrt = VRT.from_lonlat(kwargs['lon'], kwargs['lat']) else: raise ValueError('"dataset" or "srsString and extentString" ' 'or "dataset and srsString" are required')
def __init__(self, srs=None, ext=None, ds=None, lon=None, lat=None, name='', logLevel=None): '''Create Domain from GDALDataset or string options or lat/lon grids d = Domain(srs, ext) Size, extent and spatial reference is given by strings d = Domain(ds=GDALDataset): Size, extent and spatial reference is copied from input GDAL dataset d = Domain(srs, ds=GDALDataset): Spatial reference is given by srs, but size and extent is determined from input GDAL dataset d = Domain(lon=lonGrid, lat=latGrid) Size, extent and spatial reference is given by two grids Parameters ---------- srs : PROJ4 or EPSG or WKT or NSR or osr.SpatialReference() Input parameter for nansat.NSR() ext : string some gdalwarp options + additional options [http://www.gdal.org/gdalwarp.html] Specifies extent, resolution / size Available options: (('-te' or '-lle') and ('-tr' or '-ts')) (e.g. '-lle -10 30 55 60 -ts 1000 1000' or '-te 100 2000 300 10000 -tr 300 200') -tr resolutionx resolutiony -ts sizex sizey -te xmin ymin xmax ymax -lle lonmin latmin lonmax latmax ds : GDAL dataset lat : Numpy array Grid with latitudes lon : Numpy array Grid with longitudes name : string, optional Name to be added to the Domain object logLevel : int, optional, default=30 level of logging Raises ------- ProjectionError : occurs when Projection() is empty despite it is required for creating extentDic. OptionError : occures when the arguments are not proper. Modifies --------- self.vrt.datasetset : dataset in memory dataset is created based on the input arguments See Also --------- Nansat.reproject() [http://www.gdal.org/gdalwarp.html] [http://trac.osgeo.org/proj/] [http://spatialreference.org/] [http://www.gdal.org/ogr/osr_tutorial.html] ''' # set default attributes self.logger = add_logger('Nansat', logLevel) self.name = name self.logger.debug('ds: %s' % str(ds)) self.logger.debug('srs: %s' % srs) self.logger.debug('ext: %s' % ext) # If too much information is given raise error if ds is not None and srs is not None and ext is not None: raise OptionError('Ambiguous specification of both ' 'dataset, srs- and ext-strings.') # choose between input opitons: # ds # ds and srs # srs and ext # lon and lat # if only a dataset is given: # copy geo-reference from the dataset if ds is not None and srs is None: self.vrt = VRT(gdalDataset=ds) # If dataset and srs are given (but not ext): # use AutoCreateWarpedVRT to determine bounds and resolution elif ds is not None and srs is not None: srs = NSR(srs) tmpVRT = gdal.AutoCreateWarpedVRT(ds, None, srs.wkt) if tmpVRT is None: raise ProjectionError('Could not warp the given dataset' 'to the given SRS.') else: self.vrt = VRT(gdalDataset=tmpVRT) # If SpatialRef and extent string are given (but not dataset) elif srs is not None and ext is not None: srs = NSR(srs) # create full dictionary of parameters extentDic = self._create_extentDic(ext) # convert -lle to -te if 'lle' in extentDic.keys(): extentDic = self._convert_extentDic(srs, extentDic) # get size/extent from the created extet dictionary [geoTransform, rasterXSize, rasterYSize] = self._get_geotransform(extentDic) # create VRT object with given geo-reference parameters self.vrt = VRT(srcGeoTransform=geoTransform, srcProjection=srs.wkt, srcRasterXSize=rasterXSize, srcRasterYSize=rasterYSize) self.extentDic = extentDic elif lat is not None and lon is not None: # create self.vrt from given lat/lon self.vrt = VRT(lat=lat, lon=lon) else: raise OptionError('"dataset" or "srsString and extentString" ' 'or "dataset and srsString" are required') self.logger.debug('vrt.dataset: %s' % str(self.vrt.dataset))
def __init__(self, srs=None, ext=None, ds=None, lon=None, lat=None, name='', logLevel=None): """Create Domain from GDALDataset or string options or lat/lon grids""" # set default attributes self.logger = add_logger('Nansat', logLevel) self.name = name self.logger.debug('ds: %s' % str(ds)) self.logger.debug('srs: %s' % srs) self.logger.debug('ext: %s' % ext) # If too much information is given raise error if ds is not None and srs is not None and ext is not None: raise ValueError( 'Ambiguous specification of both dataset, srs- and ext-strings.' ) # choose between input opitons: # ds # ds and srs # srs and ext # lon and lat # if only a dataset is given: # copy geo-reference from the dataset if ds is not None and srs is None: self.vrt = VRT.from_gdal_dataset(ds) # If dataset and srs are given (but not ext): # use AutoCreateWarpedVRT to determine bounds and resolution elif ds is not None and srs is not None: srs = NSR(srs) tmp_vrt = gdal.AutoCreateWarpedVRT(ds, None, srs.wkt) if tmp_vrt is None: raise NansatProjectionError( 'Could not warp the given dataset to the given SRS.') else: self.vrt = VRT.from_gdal_dataset(tmp_vrt) # If SpatialRef and extent string are given (but not dataset) elif srs is not None and ext is not None: srs = NSR(srs) # create full dictionary of parameters extent_dict = Domain._create_extent_dict(ext) # convert -lle to -te if 'lle' in extent_dict.keys(): extent_dict = self._convert_extentDic(srs, extent_dict) # get size/extent from the created extent dictionary geo_transform, raster_x_size, raster_y_size = self._get_geotransform( extent_dict) # create VRT object with given geo-reference parameters self.vrt = VRT.from_dataset_params(x_size=raster_x_size, y_size=raster_y_size, geo_transform=geo_transform, projection=srs.wkt, gcps=[], gcp_projection='') elif lat is not None and lon is not None: # create self.vrt from given lat/lon self.vrt = VRT.from_lonlat(lon, lat) else: raise ValueError('"dataset" or "srsString and extentString" ' 'or "dataset and srsString" are required') self.logger.debug('vrt.dataset: %s' % str(self.vrt.dataset))