Title: | Handling and Manipulating Remote Sensing Data |
---|---|
Description: | Herein, we provide a broad variety of functions which are useful for handling, manipulating, and visualizing satellite-based remote sensing data. These operations range from mere data import and layer handling (eg subsetting), over Raster* typical data wrangling (eg crop, extend), to more sophisticated (pre-)processing tasks typically applied to satellite imagery (eg atmospheric and topographic correction). This functionality is complemented by a full access to the satellite layers' metadata at any stage and the documentation of performed actions in a separate log file. Currently available sensors include Landsat 4-5 (TM), 7 (ETM+), and 8 (OLI/TIRS Combined), and additional compatibility is ensured for the Landsat Global Land Survey data set. |
Authors: | Thomas Nauss, Hanna Meyer, Tim Appelhans, Florian Detsch |
Maintainer: | Florian Detsch <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.0.5 |
Built: | 2024-11-07 03:43:11 UTC |
Source: | https://github.com/environmentalinformatics-marburg/satellite |
Smorgasbord for remote sensing functions
The package provides a variety of functions which are useful for handling, manipulating and visualizing remote sensing data.
Thomas Nauss, Hanna Meyer, Florian Detsch, Tim Appelhans
Maintainer: Florian Detsch [email protected]
Some functions are taken and/or adopted from Sarah C. Goslee (2011). Analyzing Remote Sensing Data in R: The landsat Package. Journal of Statistical Software, 43(4), 1-25, doi:10.18637/jss.v043.i04.
Useful links:
https://github.com/environmentalinformatics-marburg/satellite
Report bugs at https://github.com/environmentalinformatics-marburg/satellite/issues
Align raster data by bringing it in the same geometry and extent. If the data set is not in the same projection as the template, the alignment will be computed by reprojection. If the data has already the same projection, the data set will be cropped and aggregated prior to resampling in order to reduce computation time.
## S4 method for signature 'Satellite' alignGeometry(x, template, band_codes, type, method = c("bilinear", "ngb")) ## S4 method for signature 'RasterStack' alignGeometry(x, template, method = c("bilinear", "ngb")) ## S4 method for signature 'RasterLayer' alignGeometry(x, template, method = c("bilinear", "ngb"))
## S4 method for signature 'Satellite' alignGeometry(x, template, band_codes, type, method = c("bilinear", "ngb")) ## S4 method for signature 'RasterStack' alignGeometry(x, template, method = c("bilinear", "ngb")) ## S4 method for signature 'RasterLayer' alignGeometry(x, template, method = c("bilinear", "ngb"))
x |
Satellite or Raster* object to be resampled. |
template |
Raster* or spatial data set from which geometry can be extracted. |
band_codes |
Band ID(s) to be resampled. If not supplied and type is not given, too, all bands will be considered for resampling. |
type |
Type of bands (e.g. VIS, NIR) which should be considered. If not supplied, all types will be processed depending and bands to be processed can be defined by band_codes. |
method |
Method for resampling; "bilinear" for bilinear interpolation
(default) or "ngb" for nearest neighbor interpolation. See e.g.
|
Satellite object with aligned geometries.
raster::RasterStack object with aligned layers
raster::RasterLayer object with aligned layer
path <- system.file("testdata/LC8", package = "satellite") files <- list.files(path, pattern = glob2rx("LC8*.TIF"), full.names = TRUE) sat <- satellite(files) alignGeometry(sat, template = getSatDataLayer(sat, "B008n"), band_codes = "B001n")
path <- system.file("testdata/LC8", package = "satellite") files <- list.files(path, pattern = glob2rx("LC8*.TIF"), full.names = TRUE) sat <- satellite(files) alignGeometry(sat, template = getSatDataLayer(sat, "B008n"), band_codes = "B001n")
Convert selected layers of a Satellite object to a RasterBrick
## S4 method for signature 'Satellite' brick(x, layer = names(x), ...)
## S4 method for signature 'Satellite' brick(x, layer = names(x), ...)
x |
an object of class 'Satellite' |
layer |
character vector (bcde codes) or integer vector (index) of the layers to be stacked |
... |
additional arguments passed on to |
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) brck <- brick(sat, c("B001n", "B002n", "B003n")) brck
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) brck <- brick(sat, c("B001n", "B002n", "B003n")) brck
The function computes an atmospheric scattering correction and converts the sensors digital numbers to reflectances using
absolute radiance correction
DOS2: a dark object substraction model by Chavez (1996)
DOS4: a dark object substratcion model by Moran et al. (1992)
## S4 method for signature 'Satellite' calcAtmosCorr(x, model = c("DOS2", "DOS4"), esun_method = "RadRef") ## S4 method for signature 'RasterStack' calcAtmosCorr(x, path_rad, esun, szen, model = c("DOS2", "DOS4")) ## S4 method for signature 'RasterLayer' calcAtmosCorr(x, path_rad, esun, szen, model = c("DOS2", "DOS4"))
## S4 method for signature 'Satellite' calcAtmosCorr(x, model = c("DOS2", "DOS4"), esun_method = "RadRef") ## S4 method for signature 'RasterStack' calcAtmosCorr(x, path_rad, esun, szen, model = c("DOS2", "DOS4")) ## S4 method for signature 'RasterLayer' calcAtmosCorr(x, path_rad, esun, szen, model = c("DOS2", "DOS4"))
x |
Satellite or Raster* object providing the radiance at the sensor. |
model |
Model to be used to correct for 1% scattering (DOS2, DOS4). |
esun_method |
If x is a Satellite object, name of the method to be used
to compute |
path_rad |
Path radiance, e.g. returned from
|
esun |
Actual (i.e. non-normalized) TOA solar irradiance, e.g. returned
from |
szen |
Sun zenith angle. |
If a Satellite object is passed to the function, and if the required
pre-processing has not been performed already, the path radiance is computed
based on a dark object's scaled count value using
calcPathRadDOS
which will also take care of the TOA solar
irradiance by calling calcTOAIrradModel
,
calcTOAIrradRadRef
or calcTOAIrradTable
(depending on esun_method
) if necessary. The bands' scaled counts are
converted to radiance using convSC2Rad
.
The radiometric correction is based on a dark object approach using either the DOS2 (Chavez 1996) or DOS4 (Moran et al. 1992) model.
The minimum reflectance values for the dark object are identified using the
approximation of Chavez (1988, see calcPathRadDOS
for details).
The estimated values of the solar irradiance required for the path radiance
can be computed by one of calcTOAIrradTable
which is used to
get readily published values of ESun, calcTOAIrradRadRef
which
computes ESun based on the actual radiance and reflectance in the scene, or
calcTOAIrradModel
which computes ESun based on look-up tables
for the sensor's relative spectral response and solar irradiation spectral data.
The atmospheric transmittance towards the sensor (Tv) is approximated by 1.0 (DOS2, Chavez 1996) or Rayleigh scattering (DOS4, Moran et al. 1992).
The atmospheric transmittance from the sun (Tz) is approximated by the cosine of the sun zenith angle (DOS2, Chavez 1996) or again using Rayleigh scattering (DOS4, Moran et al. 1992).
The downwelling diffuse irradiance is approximated by 0.0 (DOS2, Chavez 1996) or the hemispherical integral of the path radiance (DOS4, Moran et al. 1992).
Equations are taken from Song et al. (2001).
Satellite object with added atmospheric corrected layers
raster::RasterStack object with atmospheric corrected layers
raster::RasterLayer object with atmospheric corrected layer
Chavez Jr PS (1988) An improved dark-object subtraction technique for atmospheric scattering correction of multispectral data. Remote Sensing of Environment 24/3, doi:10.1016/0034-4257(88)90019-3.
Chavez Jr PS (1996) Image-based atmospheric corrections revisited and improved. Photogrammetric Engineering and Remote Sensing 62/9, available online at https://www.researchgate.net/publication/236769129_Image-Based_Atmospheric_Corrections_-_Revisited_and_Improved
Goslee SC (2011) Analyzing Remote Sensing Data in R: The landsat Package. Journal of Statistical Software,43/4, 1-25, doi:10.18637/jss.v043.i04.
Moran MS, Jackson RD, Slater PN, Teillet PM (1992) Evaluation of simplified procedures for retrieval of land surface reflectance factors from satellite sensor output.Remote Sensing of Environment 41/2-3, 169-184, doi:10.1016/0034-4257(92)90076-V.
Song C, Woodcock CE, Seto KC, Lenney MP, Macomber SA (2001) Classification and Change Detection Using Landsat TM Data: When and How to Correct Atmospheric Effects? Remote Sensing of Environment 75/2, doi:10.1016/S0034-4257(00)00169-3.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat_atmos <- calcAtmosCorr(sat, model = "DOS2", esun_method = "RadRef") bcde <- "B002n" sat <- calcTOAIrradRadRef(sat, normalize = FALSE) path_rad <- calcPathRadDOS(x = min(getValues(getSatDataLayer(sat, bcde))), bnbr = getSatLNBR(sat, bcde), band_wls = data.frame(LMIN = getSatLMIN(sat, getSatBCDESolar(sat)), LMAX = getSatLMAX(sat, getSatBCDESolar(sat))), radm = getSatRADM(sat, getSatBCDESolar(sat)), rada = getSatRADA(sat, getSatBCDESolar(sat)), szen = getSatSZEN(sat, getSatBCDESolar(sat)), esun = getSatESUN(sat, getSatBCDESolar(sat)), model = "DOS2") sensor_rad <- convSC2Rad(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde), getSatSZEN(sat, bcde)) ref_atmos <- calcAtmosCorr(x = sensor_rad, path_rad = path_rad[names(path_rad) == bcde], esun = getSatESUN(sat, bcde), szen = getSatSZEN(sat, bcde), model = "DOS2")
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat_atmos <- calcAtmosCorr(sat, model = "DOS2", esun_method = "RadRef") bcde <- "B002n" sat <- calcTOAIrradRadRef(sat, normalize = FALSE) path_rad <- calcPathRadDOS(x = min(getValues(getSatDataLayer(sat, bcde))), bnbr = getSatLNBR(sat, bcde), band_wls = data.frame(LMIN = getSatLMIN(sat, getSatBCDESolar(sat)), LMAX = getSatLMAX(sat, getSatBCDESolar(sat))), radm = getSatRADM(sat, getSatBCDESolar(sat)), rada = getSatRADA(sat, getSatBCDESolar(sat)), szen = getSatSZEN(sat, getSatBCDESolar(sat)), esun = getSatESUN(sat, getSatBCDESolar(sat)), model = "DOS2") sensor_rad <- convSC2Rad(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde), getSatSZEN(sat, bcde)) ref_atmos <- calcAtmosCorr(x = sensor_rad, path_rad = path_rad[names(path_rad) == bcde], esun = getSatESUN(sat, bcde), szen = getSatSZEN(sat, bcde), model = "DOS2")
The function estimates the DN value of a "dark object" which is used for atmospheric correction using the DOS2 and DOS4 model. Therefore, the frequency distribution of the smallest 1% of the data values is analyzed and the value for which the first derivate has the absolute maximum is taken as the DN for a dark object.
## S4 method for signature 'Satellite' calcDODN(x, bcde) ## S4 method for signature 'RasterLayer' calcDODN(x)
## S4 method for signature 'Satellite' calcDODN(x, bcde) ## S4 method for signature 'RasterLayer' calcDODN(x)
x |
Satellite object or RasterLayer with sensor band data, e.g. returned
by |
bcde |
If 'x' is a Satellite object, a band code as character. |
The DN for a dark object is extracted from a histogram similar to Chavez (1988).
Numeric value of the DN for the dark object.
Chavez Jr PS (1988) An improved dark-object subtraction technique for atmospheric scattering correction of multispectral data. Remote Sensing of Environment 24/3, doi:10.1016/0034-4257(88)90019-3.
The DN is used by calcPathRadDOS
for computing the
path radiance based on the dark object method.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) calcDODN(sat, bcde = "B002n") calcDODN(getSatDataLayer(sat, bcde = "B002n"))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) calcDODN(sat, bcde = "B002n") calcDODN(getSatDataLayer(sat, bcde = "B002n"))
The earth-sun distance for a particular day of the year is computed based on one of several empirical formulas.
calcEarthSunDist(date, formula = c("Spencer", "Mather", "ESA", "Duffie"))
calcEarthSunDist(date, formula = c("Spencer", "Mather", "ESA", "Duffie"))
date |
Date of the sensor overpass; either a character string in a
native date format (e.g. "YYYY-MM-DD", see |
formula |
Formula to be applied, specified through the name of the author, i.e. one of "Spencer", "Mather", "ESA" or "Duffie" (see 'Details'). |
Computation of earth-sun distance using formulas provided by
Spencer (1971), Mather (2005) or ESA. If formula = "Duffie"
, the
inverse squared relative earth–sun distance is returned as proposed by
Duffie and Beckman (1980).
Numeric earth-sun distance (in AU) or, if formula = "Duffie"
,
the relative squared earth–sun distance on the given day.
The formulas are taken from the following sources:
Spencer: Spencer JW (1971) Fourier series representation of the position of the sun. Search 2/5. Taken from https://goo.gl/lhi9UI.
Mather: Mather PM (2005) Computer Processing of Remotely-Sensed Images: An Introduction. Wiley: Chichester, ISBN: 978-0-470-02101-9, https://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470021012.html.
ESA: ESA Earth Observation Quality Control: Landsat frequently asked questions.
Duffie: Duffie JA, Beckman WA (2013) Solar Engineering of Thermal Processes. Wiley: Hoboken, New Jersey, ISBN: 978-0-470-87366-3, https://eu.wiley.com/WileyCDA/WileyTitle/productCd-0470873663.html.
See also: Bird R, Riordan C (1984) Simple solar spectral model for direct and diffuse irradiance on horizontal and tilted planes at the Earth's surface for cloudless atmospheres. Task No. 3434.10, Solar Energy Research Institute: Golden, Colorado, http://www.nrel.gov/docs/legosti/old/2436.pdf.
calcEarthSunDist(date = "2015-01-01", formula = "Spencer") # absolute calcEarthSunDist(date = "2015-01-01", formula = "Duffie") # relative
calcEarthSunDist(date = "2015-01-01", formula = "Spencer") # absolute calcEarthSunDist(date = "2015-01-01", formula = "Duffie") # relative
Compute an estimated path radiance for all sensor bands, which can then be used to roughly correct the radiance values for atmospheric scattering. Path radiance estimation is based on a dark object method.
## S4 method for signature 'Satellite' calcPathRadDOS(x, model = c("DOS2", "DOS4"), esun_method = "RadRef") ## S4 method for signature 'numeric' calcPathRadDOS( x, bnbr, band_wls, radm, rada, szen, esun, model = c("DOS2", "DOS4"), scat_coef = c(-4, -2, -1, -0.7, -0.5), dos_adjust = 0.01 )
## S4 method for signature 'Satellite' calcPathRadDOS(x, model = c("DOS2", "DOS4"), esun_method = "RadRef") ## S4 method for signature 'numeric' calcPathRadDOS( x, bnbr, band_wls, radm, rada, szen, esun, model = c("DOS2", "DOS4"), scat_coef = c(-4, -2, -1, -0.7, -0.5), dos_adjust = 0.01 )
x |
A Satellite object or the value (scaled count) of a dark object in
|
model |
Model to be used to correct for 1% scattering (DOS2, DOS4; must
be the same as used by |
esun_method |
If x is a Satellite object, name of the method to be used
to compute esun using one of |
bnbr |
Band number for which DNmin is valid. |
band_wls |
Band wavelengths to be corrected; |
radm |
Multiplicative coefficient for radiance transformation (i.e. slope). |
rada |
Additive coefficient for radiance transformation (i.e. offset). |
szen |
Sun zenith angle. |
esun |
Actual (i.e. non-normalized) TOA solar irradiance, e.g. returned
by |
scat_coef |
Scattering coefficient; defaults to -4.0. |
dos_adjust |
Assumed reflection for dark object adjustment; defaults to 0.01. |
If x is a Satellite object, the minimum raw count value (x) is computed using
calcDODN
. If the TOA solar irradiance is not part of the
Satellite object's metadata, it is computed using
calcTOAIrradRadRef
, calcTOAIrradTable
or
calcTOAIrradModel
.
The dark object subtraction approach is based on an approximation of the atmospheric path radiance (i.e. upwelling radiation which is scattered into the sensors field of view, aka haze) using the reflectance of a dark object (i.e. reflectance ~1%).
Chavez (1988) proposed a method which uses the dark object reflectance
in one band to predict the corresponding path radiances in all other
band_wls
. This is done using a relative radiance model which depends on
the wavelength and overall atmospheric optical thickness (which is estimated
based on the dark object's DN value). This has the advantage that the path
radiance is actually correlated across different sensor band_wls
and
not computed individually for each band using independent dark objects. He
proposed a relative radiance model which follows a wavelength dependent
scattering that ranges from a power of -4 over -2, -1, -0.7 to -0.5 for very
clear over clear, moderate, hazy to very hazy conditions. The relative
factors are computed individually for each 1/1000 wavelength within each band
range and subsequently averaged over the band as proposed by Goslee (2011).
The atmospheric transmittance towards the sensor (Tv) is approximated by 1.0 (DOS2, Chavez 1996) or Rayleigh scattering (DOS4, Moran et al. 1992)
The atmospheric transmittance from the sun (Tz) is approximated by the cosine of the sun zenith angle (DOS2, Chavez 1996) or again using Rayleigh scattering (DOS4, Moran et al. 1992).
The downwelling diffuse irradiance is approximated by 0.0 (DOS2, Chavez 1996) or the hemispherical integral of the path radiance (DOS4, Moran et al. 1992).
Equations for the path radiance are taken from Song et al. (2001).
For some sensors, the band wavelengths are already included. See
lutInfo()[grepl("_BANDS", names(lutInfo()$META))]
if your sensor is
included. To retrieve a sensor, use lutInfo()$<Sensor ID>_BANDS
.
Satellite object with path radiance for each band in the metadata (W m-2 micrometer-1)
Vector object with path radiance values for each band (W m-2 micrometer-1)
Chavez Jr PS (1988) An improved dark-object subtraction technique for atmospheric scattering correction of multispectral data. Remote Sensing of Environment 24/3, doi:10.1016/0034-4257(88)90019-3.
Chavez Jr PS (1996) Image-based atmospheric corrections revisited and improved. Photogrammetric Engineering and Remote Sensing 62/9, available online at https://www.researchgate.net/publication/236769129_Image-Based_Atmospheric_Corrections_-_Revisited_and_Improved.
Goslee SC (2011) Analyzing Remote Sensing Data in R: The landsat Package. Journal of Statistical Software, 43/4, 1-25, doi:10.18637/jss.v043.i04.
Moran MS, Jackson RD, Slater PN, Teillet PM (1992) Evlauation of simplified procedures for rretrieval of land surface reflectane factors from satellite sensor output.Remote Sensing of Environment 41/2-3, 169-184, doi:10.1016/0034-4257(92)90076-V.
Song C, Woodcock CE, Seto KC, Lenney MP, Macomber SA (2001) Classification and Change Detection Using Landsat TM Data: When and How to Correct Atmospheric Effects? Remote Sensing of Environment 75/2, doi:10.1016/S0034-4257(00)00169-3.
If you refer to Sawyer and Stephen 2014, please note that eq. 5 is wrong.
This function is used by calcAtmosCorr
to
compute the path radiance.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- calcTOAIrradModel(sat) bds <- "B002n" val <- calcPathRadDOS(x = min(getValues(getSatDataLayer(sat, bds))), bnbr = getSatLNBR(sat, bds), band_wls = data.frame(LMIN = getSatLMIN(sat, getSatBCDESolar(sat)), LMAX = getSatLMAX(sat, getSatBCDESolar(sat))), radm = getSatRADM(sat, getSatBCDESolar(sat)), rada = getSatRADA(sat, getSatBCDESolar(sat)), szen = getSatSZEN(sat, getSatBCDESolar(sat)), esun = getSatESUN(sat, getSatBCDESolar(sat)), model = "DOS2", scat_coef = -4) val
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- calcTOAIrradModel(sat) bds <- "B002n" val <- calcPathRadDOS(x = min(getValues(getSatDataLayer(sat, bds))), bnbr = getSatLNBR(sat, bds), band_wls = data.frame(LMIN = getSatLMIN(sat, getSatBCDESolar(sat)), LMAX = getSatLMAX(sat, getSatBCDESolar(sat))), radm = getSatRADM(sat, getSatBCDESolar(sat)), rada = getSatRADA(sat, getSatBCDESolar(sat)), szen = getSatSZEN(sat, getSatBCDESolar(sat)), esun = getSatESUN(sat, getSatBCDESolar(sat)), model = "DOS2", scat_coef = -4) val
Compute mean extraterrestrial solar irradiance (ESun) using tabulated mean solar spectral data and the band specific relative spectral response (rsr) functions.
## S4 method for signature 'Satellite' calcTOAIrradModel(x, model = "MNewKur", normalize = TRUE, esd) ## S4 method for signature 'data.frame' calcTOAIrradModel(x, model = "MNewKur", normalize = TRUE, esd)
## S4 method for signature 'Satellite' calcTOAIrradModel(x, model = "MNewKur", normalize = TRUE, esd) ## S4 method for signature 'data.frame' calcTOAIrradModel(x, model = "MNewKur", normalize = TRUE, esd)
x |
A Satellite object or the relative spectral response function for
the respective band as |
model |
Tabulated solar radiation model to be used (one of MCebKur_MChKur, MNewKur, MthKur, MoldKur, MODWherli_WMO, NN, see reference on tabulated solar irradiance below). |
normalize |
Logical; if |
esd |
Earth-sun distance (AU, can be estimated using
|
Computation of ESun is taken from Updike and Comp (2011).
Tabulated values for mean earth-sun distance are taken from the data sources mentioned in the references.
If results should not be normalized to a mean earth-sun distance, the
actual earth-sun distance is approximated by the day of the year using
calcEarthSunDist
.
Relative spectral response values have to be supplied as a data.frame
which has at least the following three columns: (i) a column "Band" for the
sensor band number (i.e. 1, 2, etc.), (ii) a column "WAVELENGTH" for the
WAVELENGTH data in full nm steps, and (iii) a column "RSR" for the response
information [0...1].
If x is a Satellite object, a Satellite object with ESun information
added to the metadata; if x is a data.frame
, a vector containing ESun
for the respective band(s).
Updike T, Comp C (2011) Radiometric use of WorldView-2 imagery. Technical Note, available online at http://www.pancroma.com/downloads/Radiometric_Use_of_WorldView-2_Imagery.pdf.
Tabulated relative spectral response functions (nm-1) are taken from the spectral viewer of the USGS Landsat FAQ.
Tabulated solar irradiance (W m-2 nm-1) is taken from the National Renewable Energy Laboratory.
calcTOAIrradTable
for tabulated solar irradiance
values from the literature or calcTOAIrradRadRef
for the
computation of the solar irradiance based on maximum radiation and reflection
values of the dataset.
See calcEarthSunDist
for calculating the earth-sun
distance based on the day of the year which is called by this function if
ESun should be corrected for actual earth-sun distance.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- calcTOAIrradModel(sat) getSatESUN(sat) lut <- lutInfo() calcTOAIrradModel(lut$L8_RSR, model = "MNewKur", normalize = FALSE, esd = calcEarthSunDist("2015-01-01"))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- calcTOAIrradModel(sat) getSatESUN(sat) lut <- lutInfo() calcTOAIrradModel(lut$L8_RSR, model = "MNewKur", normalize = FALSE, esd = calcEarthSunDist("2015-01-01"))
Compute extraterrestrial solar irradiance (ESun) using the actual maximum radiation and reflection values within each band.
## S4 method for signature 'Satellite' calcTOAIrradRadRef(x, normalize = TRUE, esd) ## S4 method for signature 'numeric' calcTOAIrradRadRef(x, ref_max, normalize = TRUE, esd)
## S4 method for signature 'Satellite' calcTOAIrradRadRef(x, normalize = TRUE, esd) ## S4 method for signature 'numeric' calcTOAIrradRadRef(x, ref_max, normalize = TRUE, esd)
x |
A Satellite object or the maximum radiance of satellite band(s) as numeric object. |
normalize |
Logical; if |
esd |
Earth-sun distance (AU, can be estimated using
|
ref_max |
Maximum reflextance of satellite band(s). |
The actual solar irradiance is computed using the following formula taken from the GRASS GIS i.landsat.toar module
where d is the earth-sun distance (in AU) and RADIANCE_MAXIMUM and REFLECTANCE_MAXIMUM are the maximum radiance and reflection values of the respective band. All these parameters are taken from the scene's metadata file if a Satellite object is passed to the function.
By default, the resulting actual ESun will be normalized to a mean earth-sun
distance to be compatible with other default results from
calcTOAIrradTable
or calcTOAIrradModel
.
If x is a Satellite object, a Satellite object with ESun information added to the metadata; if x is numeric, a vector containing ESun for the respective band(s).
calcTOAIrradTable
for tabulated solar irradiance
values from the literature or calcTOAIrradModel
for the
computation of the solar irradiance based on look-up tables for the sensor's
relative spectral response and solar irradiation spectral data.
See calcEarthSunDist
for calculating the earth-sun
distance based on the day of the year which is called by this function if
ESun should be corrected for actual earth-sun distance.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- calcTOAIrradModel(sat) getSatESUN(sat) calcTOAIrradRadRef(x = getSatRadMax(sat, getSatBCDESolar(sat)), ref_max = getSatRefMax(sat, getSatBCDESolar(sat)), normalize = FALSE, esd = calcEarthSunDist("2015-01-01"))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- calcTOAIrradModel(sat) getSatESUN(sat) calcTOAIrradRadRef(x = getSatRadMax(sat, getSatBCDESolar(sat)), ref_max = getSatRefMax(sat, getSatBCDESolar(sat)), normalize = FALSE, esd = calcEarthSunDist("2015-01-01"))
Get mean extraterrestrial solar irradiance (ESun) using published values.
## S4 method for signature 'Satellite' calcTOAIrradTable(x, normalize = TRUE, esd) ## S4 method for signature 'factor' calcTOAIrradTable(x, normalize = TRUE, esd) ## S4 method for signature 'character' calcTOAIrradTable(x, normalize = TRUE, esd)
## S4 method for signature 'Satellite' calcTOAIrradTable(x, normalize = TRUE, esd) ## S4 method for signature 'factor' calcTOAIrradTable(x, normalize = TRUE, esd) ## S4 method for signature 'character' calcTOAIrradTable(x, normalize = TRUE, esd)
x |
A Satellite object or sensor id ("LT4, LT5, LE7") as character. |
normalize |
Logical; if |
esd |
Earth-sun distance (AU, can be estimated using
|
Currently implemented sensors are Landsat 4, 5 and 7.
If results should not be normalized to a mean earth-sun distance, the
actual earth-sun distance is approximated by the day of the year using
calcEarthSunDist
.
Please note that ESun values are not required for converting Landsat 8 data to reflectance as the corresponding metadata files provide coefficients necessary to convert digital numbers to radiance and reflectance (taken from https://www.gisagmaps.org/landsat-8-atco-guide/.
Satellite object with ESun information added to the metadata
Vector object containing ESun for the respective band(s)
Vector object containing ESun for the respective band(s)
Tabulated values of the solar irradiance for all Landsat sensors are taken from https://www.usgs.gov/landsat-missions/using-usgs-landsat-level-1-data-product.
calcTOAIrradRadRef
for the computation of the solar
irradiance based on maximum radiation and reflection values of the dataset or
calcTOAIrradModel
for the computation of the solar irradiance
based on look-up tables for the sensor's relative spectral response and solar
irradiation spectral data.
See calcEarthSunDist
for calculating the earth-sun
distance based on the day of the year which is called by this function if
ESun should be corrected for actual earth-sun distance.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LE07*.TIF"), full.names = TRUE) sat <- satellite(files) calcTOAIrradTable(sat) calcTOAIrradTable(x = "LE7", normalize = FALSE, calcEarthSunDist("2015-01-01"))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LE07*.TIF"), full.names = TRUE) sat <- satellite(files) calcTOAIrradTable(sat) calcTOAIrradTable(x = "LE7", normalize = FALSE, calcEarthSunDist("2015-01-01"))
Correct for topographic effects.
## S4 method for signature 'Satellite' calcTopoCorr(x, mask = TRUE) ## S4 method for signature 'RasterStackBrick' calcTopoCorr(x, hillsh, cloudmask = NULL, ...) ## S4 method for signature 'RasterLayer' calcTopoCorr(x, hillsh, cloudmask = NULL, ...)
## S4 method for signature 'Satellite' calcTopoCorr(x, mask = TRUE) ## S4 method for signature 'RasterStackBrick' calcTopoCorr(x, hillsh, cloudmask = NULL, ...) ## S4 method for signature 'RasterLayer' calcTopoCorr(x, hillsh, cloudmask = NULL, ...)
x |
|
mask |
|
hillsh |
A |
cloudmask |
A |
... |
Additional arguments passed to |
The method of Civco (1989) is applied on atmospherically corrected bands
(if not already available in the Satellite object,
calcAtmosCorr
is performed with its default settings.):
First, an analytical hillshade image is created based on a DEM and sun
elevation and sun zenith information from the metadata. A regression between
the hillshade (independent variable) and each channel is then calculated
with consideration of a cloudmask (if available).
The regression coefficents are used to calibrate the hillshade raster
(for each channel individually).
Finally, the calibrated hillshade image is subtracted from the corresponding
channel and the mean value of the channel is added.
If x is a Satellite object, a Satellite object with added,
topographic corrected layers; if x is a raster::Raster*
object, a
raster::Raster*
object with converted layer(s).
CIVCO, D.L. (1989): Topographic normalization of Landsat Thematic Mapper digitalimagery. Photogrammetric Engineering & Remote Sensing, 55, 1303-1309.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## dem files_dem <- list.files(path, pattern = "DEM", full.names = TRUE) DEM <- raster(files_dem) sat <- addSatDataLayer(sat, data = DEM, info = NULL, bcde = "DEM", in_bcde="DEM") ## Not run: sat <- calcTopoCorr(sat) ## End(Not run)
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## dem files_dem <- list.files(path, pattern = "DEM", full.names = TRUE) DEM <- raster(files_dem) sat <- addSatDataLayer(sat, data = DEM, info = NULL, bcde = "DEM", in_bcde="DEM") ## Not run: sat <- calcTopoCorr(sat) ## End(Not run)
The function compiles the sensor, band, filename and metadata filename information for standard level 1B/T Landsat files.
compFilePathLandsat(files) sortFilesLandsat(files, id = FALSE)
compFilePathLandsat(files) sortFilesLandsat(files, id = FALSE)
files |
Path and filename(s) of one or more Landsat band files or, alternatively, one or more Landsat metadata files. |
id |
|
data.frame
containing filepaths, band numbers and metadata
filepaths.
If id = FALSE
(default), sorted band files as
character
, else the corresponding sorting order as integer
.
sortFilesLandsat()
: Sort Landsat band files in ascending order.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) compFilePathLandsat(files) sortFilesLandsat(files) sortFilesLandsat(files, id = TRUE) # indices
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) compFilePathLandsat(files) sortFilesLandsat(files) sortFilesLandsat(files, id = TRUE) # indices
The function scans a Lansat metadata file for various calibration and orbit coefficients as well as some sensor specific data.
compMetaLandsat(files)
compMetaLandsat(files)
files |
Path and filename of the Landsat metadata file. |
data.frame
containing the following information for each
band/layer:
DATE date (e.g. 2013-07-07)
SID sensor id (e.g. LC8)
SENSOR sensor name (e.g. Landsat 8)
SGRP sensor group (e.g. Landsat)
BID band id (e.g. 7)
BCDE band code (5 digit standard name, e.g B001n)
SRES spatial resolution of the sensor band (e.g. 30 for 30 m x 30m)
TYPE type of the sensor band regarding wavelength (e.g. VIS)
SPECTRUM spectral range regarding radiation source (e.g. solar)
CALIB type of applied calibration (e.g. SC for scaled counts)
RID region id (e.g. R00001) for multi region Satellite objects
RADA addtition coefficient for radiance conversion
RADM multiplication coefficient for radiance conversion
REFA addtition coefficient for reflectance conversion
REFM multiplication coefficient for reflectance conversion
BTK1 brightness temperature correction parameter
BTK2 brightness temperature correction parameter
SZEN sun zenith angle
SAZM sun azimuth angle
SELV sun elevation angle
ESD earth-sun distance (AU)
LMIN Minimum wavelength of the band (micrometer)
LMAX Maximum wavelength of the band (micrometer)
RADMIN Minimum radiance recorded by the band
RADMAX Maximum radiance recorded by the band
REFMIN Minimum reflectance recorded by the band
REFMAX Maximum reflectance recorded by the band
LNBR Layer number from 1 to n layers
LAYER Layer name
FILE Filepath of the data file
METAFILE Filepath of the metadata file
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) compMetaLandsat(files)
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) compMetaLandsat(files)
Convert a band's radiance values to brightness temperature without any kind of atmospheric correction etc.
## S4 method for signature 'Satellite' convRad2BT(x) ## S4 method for signature 'RasterStack' convRad2BT(x, k1, k2) ## S4 method for signature 'RasterLayer' convRad2BT(x, k1, k2)
## S4 method for signature 'Satellite' convRad2BT(x) ## S4 method for signature 'RasterStack' convRad2BT(x, k1, k2) ## S4 method for signature 'RasterLayer' convRad2BT(x, k1, k2)
x |
An object of class Satellite, raster::RasterStack or raster::RasterLayer providing radiance values. |
k1 , k2
|
Temperature correction parameters. |
The conversion functions are taken from USGS' Landsat 8 Data Users Handbook which is available online at https://www.usgs.gov/landsat-missions/landsat-8-data-users-handbook.
If x is a Satellite object, a Satellite object with added converted
layers;
if x is a raster::Raster*
object, a raster::Raster*
object with
converted layer(s).
calcAtmosCorr
for converions of scaled counts
to physical units including a scene-based atmospheric correction.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convRad2BT(sat)
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convRad2BT(sat)
Convert a band's scaled counts to reflectance using a simple linear conversion without any kind of atmospheric correction etc.
## S4 method for signature 'Satellite' convRad2Ref(x, szen_correction = "TRUE") ## S4 method for signature 'RasterStack' convRad2Ref(x, mult, add, szen) ## S4 method for signature 'RasterLayer' convRad2Ref(x, mult, add, szen)
## S4 method for signature 'Satellite' convRad2Ref(x, szen_correction = "TRUE") ## S4 method for signature 'RasterStack' convRad2Ref(x, mult, add, szen) ## S4 method for signature 'RasterLayer' convRad2Ref(x, mult, add, szen)
x |
An object of class Satellite, raster::RasterStack or raster::RasterLayer providing radiance values. |
szen_correction |
Logical; if |
mult |
Multiplicative coefficient for value transformation (i.e. slope). |
add |
Additive coefficient for value transformation (i.e. offset) |
szen |
Cosine of solar zenith angle. |
The conversion functions are taken from USGS' Landsat 8 Data Users Handbook which is available online at https://www.usgs.gov/landsat-missions/landsat-8-data-users-handbook.
If the sensor does not provide linear conversion coefficients for reflectance computation, the reflectance is calculated using the solar irradiance following the functions taken from USGS' Landsat 7 manual, chapter 11.3.2, which is available online at https://www.usgs.gov/media/files/landsat-7-data-users-handbook.
If x is a Satellite object, a Satellite object with added converted
layers;
if x is a raster::Raster*
object, a raster::Raster*
object with
converted layer(s).
calcAtmosCorr
for conversions of scaled counts
to physical units including a scene-based atmospheric correction.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convRad2Ref(sat) # If you use a raster layer, supply required meta information bcde <- "B002n" convRad2Ref(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convRad2Ref(sat) # If you use a raster layer, supply required meta information bcde <- "B002n" convRad2Ref(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde))
The function converts the reflectance (ref) back to radiance (rad) given that linear conversion coefficients for both radiance and reflectance are available.
convRef2RadLinear(band, refm, refa, radm, rada, szen)
convRef2RadLinear(band, refm, refa, radm, rada, szen)
band |
raster::RasterStack or raster::RasterLayer containing reflectance. |
refm |
Multiplication coefficient for reflectance conversion. |
refa |
Addtition coefficient for reflectance conversion. |
radm |
Multiplication coefficient for radiance conversion. |
rada |
Addition coefficient for radiance conversion. |
szen |
Sun zenith angle. |
The conversion functions are taken from USGS' Landsat 8 Data Users Handbook which is available online at https://www.usgs.gov/landsat-missions/landsat-8-data-users-handbook.
raster::Raster*
object with converted values.
Convert a band's scaled counts to radiance using a simple linear conversion without any kind of atmospheric correction etc.
## S4 method for signature 'Satellite' convSC2Rad(x, szen_correction = "TRUE", subset = FALSE) ## S4 method for signature 'RasterStack' convSC2Rad(x, mult, add, szen) ## S4 method for signature 'RasterLayer' convSC2Rad(x, mult, add, szen)
## S4 method for signature 'Satellite' convSC2Rad(x, szen_correction = "TRUE", subset = FALSE) ## S4 method for signature 'RasterStack' convSC2Rad(x, mult, add, szen) ## S4 method for signature 'RasterLayer' convSC2Rad(x, mult, add, szen)
x |
An object of class Satellite, raster::RasterStack or raster::RasterLayer providing scaled counts (DNs). |
szen_correction |
Logical; if |
subset |
Logical; if |
mult |
Multiplicative coefficient for value transformation (i.e. slope). |
add |
Additive coefficient for value transformation (i.e. offset). |
szen |
Cosine of solar zenith angle. |
The conversion functions are taken from USGS' Landsat 8 Data Users Handbook which is available online at https://www.usgs.gov/landsat-missions/landsat-8-data-users-handbook.
If x is a Satellite object, a Satellite object with added converted
layers;
if x is a raster::Raster*
object, a raster::Raster*
object with
converted layer(s).
calcAtmosCorr
for conversions of scaled counts
to physical units including a scene-based atmospheric correction.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convSC2Rad(sat) # If you use a raster layer, supply required meta information bcde <- "B002n" convSC2Rad(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convSC2Rad(sat) # If you use a raster layer, supply required meta information bcde <- "B002n" convSC2Rad(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde))
Convert a band's scaled counts to reflectance using a simple linear conversion without any kind of atmospheric correction etc.
## S4 method for signature 'Satellite' convSC2Ref(x, szen_correction = "TRUE", subset = FALSE) ## S4 method for signature 'RasterStack' convSC2Ref(x, mult, add, szen) ## S4 method for signature 'RasterLayer' convSC2Ref(x, mult, add, szen)
## S4 method for signature 'Satellite' convSC2Ref(x, szen_correction = "TRUE", subset = FALSE) ## S4 method for signature 'RasterStack' convSC2Ref(x, mult, add, szen) ## S4 method for signature 'RasterLayer' convSC2Ref(x, mult, add, szen)
x |
An object of class Satellite, raster::RasterStack or raster::RasterLayer providing scaled counts (DNs). |
szen_correction |
Logical; if |
subset |
Logical; if |
mult |
Multiplicative coefficient for value transformation (i.e. slope). |
add |
Additive coefficient for value transformation (i.e. offset). |
szen |
Cosine of solar zenith angle. |
The conversion functions are taken from USGS' Landsat 8 Data Users Handbook which is available online at https://www.usgs.gov/landsat-missions/landsat-8-data-users-handbook.
If the sensor does not provide linear conversion coefficients for reflectance computation, the reflectance is calculated using the solar irradiance following the functions taken from USGS' Landsat 7 manual, chapter 11.3.2, which is available online at https://www.usgs.gov/media/files/landsat-7-data-users-handbook.
If x is a Satellite object, a Satellite object with added converted
layers;
if x is a raster::Raster*
object, a raster::Raster*
object with
converted layer(s).
calcAtmosCorr
for conversions of scaled counts
to physical units including a scene-based atmospheric correction.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convSC2Ref(sat) # If you use a raster layer, supply required meta information bcde <- "B002n" convSC2Ref(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde))
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- convSC2Ref(sat) # If you use a raster layer, supply required meta information bcde <- "B002n" convSC2Ref(x = getSatDataLayer(sat, bcde), mult = getSatRADM(sat, bcde), add = getSatRADA(sat, bcde))
The function is a wrapper around the crop
function to
easily crop a Satellite object by an extent
object.
## S4 method for signature 'Satellite' crop(x, y, subset = TRUE, snap = "near")
## S4 method for signature 'Satellite' crop(x, y, subset = TRUE, snap = "near")
x |
Satellite object. |
y |
|
subset |
Logical; if |
snap |
Direction towards which to align the extent as |
Crop layers of a Satellite object to the size of a given
raster::extent
object.
A Satellite object consisting of cropped layers only. If
subset = FALSE
, a Satellite object with the cropped layers appended.
Please refer to the respective functions for references.
This function is a wrapper for raster::crop
.
## Not run: ## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## geographic extent of georg-gassmann-stadium (utm 32-n) ext_ggs <- raster::extent(484015, 484143, 5627835, 5628020) ## crop satellite object by specified extent sat_ggs <- crop(sat, ext_ggs) plot(sat) plot(sat_ggs) ## End(Not run)
## Not run: ## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## geographic extent of georg-gassmann-stadium (utm 32-n) ext_ggs <- raster::extent(484015, 484143, 5627835, 5628020) ## crop satellite object by specified extent sat_ggs <- crop(sat, ext_ggs) plot(sat) plot(sat_ggs) ## End(Not run)
Compute terrain characteristics from digital elevation models (DEM) using
raster::terrain
or raster::hillShade
.
## S4 method for signature 'Satellite' demTools(x, method = "hillShade", bcde = "DEM") ## S4 method for signature 'RasterLayer' demTools(x, sunElev, sunAzim, method = "hillShade")
## S4 method for signature 'Satellite' demTools(x, method = "hillShade", bcde = "DEM") ## S4 method for signature 'RasterLayer' demTools(x, sunElev, sunAzim, method = "hillShade")
x |
A DEM provided as an object of class Satellite or RasterLayer. |
method |
Currently "slope", "aspect" and "hillshade" are implemented. |
bcde |
The name of the DEM layer in the Satellite object. |
sunElev |
If |
sunAzim |
If |
If x is a Satellite object, a Satellite object with added layer containing calculated
terrain information; if x is a raster::RasterLayer
object, a
raster::RasterLayer
object with calculated terrain information.
raster::terrain
, raster::hillShade
.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## dem files_dem <- list.files(path, pattern = "DEM", full.names = TRUE) DEM <- raster(files_dem) sat <- addSatDataLayer(sat, data = DEM, info = NULL, bcde = "DEM", in_bcde="DEM") sat <- demTools(sat)
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## dem files_dem <- list.files(path, pattern = "DEM", full.names = TRUE) DEM <- raster(files_dem) sat <- addSatDataLayer(sat, data = DEM, info = NULL, bcde = "DEM", in_bcde="DEM") sat <- demTools(sat)
The function is a wrapper around extend
to easily
extend a Satellite object to a larger spatial extent.
## S4 method for signature 'Satellite' extend(x, y, subset = TRUE, value = NA)
## S4 method for signature 'Satellite' extend(x, y, subset = TRUE, value = NA)
x |
Satellite object. |
y |
Target |
subset |
Logical. If |
value |
Fill value assigned to new cells passed to
|
A Satellite object consisting of extended layers only or, if
subset = FALSE
, a Satellite object with the extended layers appended.
This function is a wrapper around extend
.
## Not run: ## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## geographic extent of georg-gassmann-stadium (utm 32-n) ext_ggs <- raster::extent(482606.4, 482781.4, 5627239, 5627489) ## extend satellite object by specified extent sat_ggs <- extend(sat, ext_ggs) plot(sat) plot(sat_ggs) ## End(Not run)
## Not run: ## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## geographic extent of georg-gassmann-stadium (utm 32-n) ext_ggs <- raster::extent(482606.4, 482781.4, 5627239, 5627489) ## extend satellite object by specified extent sat_ggs <- extend(sat, ext_ggs) plot(sat) plot(sat_ggs) ## End(Not run)
This dataset comes from the USGS. It contains part of the Landsat 7 scene LE07_L1TP_195025_20010730_20170204_01_T1 (Collection 1 Level-1) from 2001-07-30 over Maburg, Germany.
RasterStack
with bands 1-8 (incl. QA) of 41 by 41 pixels.
Use of this data requires your agreement to the USGS regulations on using Landsat data.
https://earthexplorer.usgs.gov/
plotRGB(l7, r = 3, b = 1, stretch = "hist")
plotRGB(l7, r = 3, b = 1, stretch = "hist")
This dataset comes from the USGS. It contains part of the Landsat 8 scene LC08_L1TP_195025_20130707_20170503_01_T1 (Collection 1 Level-1) from 2013-07-07 over Maburg, Germany.
RasterStack
with bands 1-7, 9-11 (incl. QA) of 41 by 41 pixels.
Use of this data requires your agreement to the USGS regulations on using Landsat data.
https://earthexplorer.usgs.gov/
plotRGB(l8, r = 4, g = 3, b = 2, stretch = "hist") # true-color composite plotRGB(l8, r = 5, g = 4, b = 3, stretch = "hist") # false-color composite
plotRGB(l8, r = 4, g = 3, b = 2, stretch = "hist") # true-color composite plotRGB(l8, r = 5, g = 4, b = 3, stretch = "hist") # false-color composite
Get internal look-up table (LUT) values from sysdata.rda which have been
compiled using data-raw/lut_data.R. Metadata is stored in lut$meta
.
lutInfo() lutInfoBandsFromSID(sid) lutInfoSensorFromSID(sid) lutInfoBCDEFromBID(sid, bid) lutInfoBIDFromBCDE(bcde, sid) lutInfoRSRromSID(sid) lutInfoSIDfromFilename(files) lutInfoSGRPfromFilename(file)
lutInfo() lutInfoBandsFromSID(sid) lutInfoSensorFromSID(sid) lutInfoBCDEFromBID(sid, bid) lutInfoBIDFromBCDE(bcde, sid) lutInfoRSRromSID(sid) lutInfoSIDfromFilename(files) lutInfoSGRPfromFilename(file)
sid |
Sensor id as returned e.g. from |
bid |
Band id as returned e.g. from |
bcde |
Band code as returned e.g. from |
files |
Filename (or filepath) of one or more remote sensing data filenames |
file |
Filename of a remote sensing data file |
The functions above return the following information:
lutInfoBandsFromSID
returns the band info block.
lutInfoBCDEFromBID
returns the band code.
lutInfoBIDFromBCDE
returns the band ids.
lutInfoRSRromSID
returns the relative spectral response (rsr)
for the sensor.
lutInfoSensorFromSID
returns the sensor name.
The LUT contains the following band information taken, if not specified otherwise, from the USGS Landsat FAQ:
Minimum/maximum wavelength for Landsat 4 bands.
Minimum/maximum wavelength for Landsat 5 bands.
Minimum/maximum wavelength for Landsat 7 bands.
Minimum/maximum wavelength for Landsat 8 bands.
Landat 7 rsr (nm-1) taken from the spectral viewer of the USGS Landsat FAQ.
Landat 8 rsr (nm-1) taken from the spectral viewer of the USGS Landsat FAQ.
Solar irradiance (W m-2 nm-1) taken from the National Renewable Energy Laboratory.
Tabulated ESun values from tab 11.3 (Thuillier spectrum) of the Landsat7 handbook.
Tabulated ESun values from Chander G, Markham B (2003) Revised Landsat-5 TM radiometric calibration procedures and postcalibration dynamic ranges. IEEE Transaction on Geoscience and Remote Sensing 41/11, doi:10.1109/LGRS.2007.898285.
List containing several data.frame
objects with LUT values.
lutInfoBandsFromSID()
:
lutInfoSensorFromSID()
:
lutInfoBCDEFromBID()
:
lutInfoBIDFromBCDE()
:
lutInfoRSRromSID()
:
lutInfoSIDfromFilename()
:
lutInfoSGRPfromFilename()
:
ls_li <- lutInfo() # str(ls_li)
ls_li <- lutInfo() # str(ls_li)
Identify pseudo-invariant features from a satellite scene based on a vis, near infravis and short-wave infravis band.
## S4 method for signature 'Satellite' maskInvarFeatures(x) ## S4 method for signature 'RasterStack' maskInvarFeatures(x, quant = 0.01, id_vis = 1L, id_nir = 2L, id_swir = 3L) ## S4 method for signature 'RasterLayer' maskInvarFeatures(x, nir, swir, quant = 0.01)
## S4 method for signature 'Satellite' maskInvarFeatures(x) ## S4 method for signature 'RasterStack' maskInvarFeatures(x, quant = 0.01, id_vis = 1L, id_nir = 2L, id_swir = 3L) ## S4 method for signature 'RasterLayer' maskInvarFeatures(x, nir, swir, quant = 0.01)
x |
A Satellite object or a |
quant |
A value v = [0...1] which is used to define the percentage threshold values (thv) for invariant features (nir/vis ratio < thv, swir band values > 1-thv). |
id_vis |
Index of the visible band. |
id_nir |
Index of the near infravis band. |
id_swir |
Index of the short-wave infravis band. |
nir |
A |
swir |
A |
Invariant features are identified as pixels which belong to the group of (i) the n lowest VIS/NIR ratios and of (ii) the highest n SWIR values. The value of n is given by the parameter quant = [0...1].
If x is a Satellite object, a Satellite object with added layer;
if x is a raster::RasterLayer
object, a a raster::RasterLayer
object with added layers (1 indicates invariant pixels, 0 otherwise).
This function is taken and only slightly modified from the PIF function by Sarah C. Goslee (2011). Analyzing Remote Sensing Data in R: The landsat Package. Journal of Statistical Software,43(4), 1-25, doi:10.18637/jss.v043.i04.
The underlying theory has been published by Schott RJ, Salvaggio C and Volchok WJ (1988) Radiometric scene normalization using pseudoinvariant features. Remote Sensing of Environment 26/1, doi:10.1016/0034-4257(88)90116-2.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- maskInvarFeatures(sat) maskInvarFeatures(x = getSatDataLayer(sat, "B004n"), nir = getSatDataLayer(sat, "B005n"), swir = getSatDataLayer(sat, "B007n")) ## when dealing with a 'RasterStack' rst <- stack(files[c(6, 7, 9)]) maskInvarFeatures(rst)
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat <- maskInvarFeatures(sat) maskInvarFeatures(x = getSatDataLayer(sat, "B004n"), nir = getSatDataLayer(sat, "B005n"), swir = getSatDataLayer(sat, "B007n")) ## when dealing with a 'RasterStack' rst <- stack(files[c(6, 7, 9)]) maskInvarFeatures(rst)
Get/set Satellite data layer names, i.e. the BCDE id.
## S4 method for signature 'Satellite' names(x) ## S4 replacement method for signature 'Satellite' names(x) <- value
## S4 method for signature 'Satellite' names(x) ## S4 replacement method for signature 'Satellite' names(x) <- value
x |
A Satellite object. |
value |
Band codes of the individual data layers. |
Satellite data layer names as character vector.
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) names(sat) new_names <- paste0(names(sat), "_test") names(sat) <- new_names
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) names(sat) new_names <- paste0(names(sat), "_test") names(sat) <- new_names
This is the standard plotting routine for the 'Satellite' class. Layers are drawn either from the start (default; limited to a maximum of 16 sub-plots) or according to the speficied band codes.
## S4 method for signature 'Satellite,ANY' plot(x, bcde = NULL, col = grDevices::grey.colors(100), ...)
## S4 method for signature 'Satellite,ANY' plot(x, bcde = NULL, col = grDevices::grey.colors(100), ...)
x |
A 'Satellite' object, usually returned by |
bcde |
Band codes to be visualized, e.g. returned by
|
col |
Color scheme. |
... |
Further arguments passed on to |
## Not run: ## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## display data without quality flag layer bds <- getSatBCDE(sat)[1:11] plot(sat, bcde = bds) ## End(Not run)
## Not run: ## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) ## display data without quality flag layer bds <- getSatBCDE(sat)[1:11] plot(sat, bcde = bds) ## End(Not run)
Method to create a Satellite object.
## S4 method for signature 'character' satellite(x, meta, log) ## S4 method for signature 'Raster' satellite(x, meta, log) ## S4 method for signature 'list' satellite(x, meta, log)
## S4 method for signature 'character' satellite(x, meta, log) ## S4 method for signature 'Raster' satellite(x, meta, log) ## S4 method for signature 'list' satellite(x, meta, log)
x |
A vector of filenames, a (multi-layered) |
meta |
Optional metadata object (e.g. returned from
|
log |
Optionally supply a log entry. |
A Satellite object consists of three data sections: (i) a raster data section which holds the actual data values of the respective sensor bands, (ii) a metadata grid which holds meta information for each sensor band (e.g. calibration coefficients, type of sensor band etc.) and (iii) a list of log information which records the processing history of the entire dataset.
A Satellite
object.
(i) compMetaLandsat
to get more information about the
structure of the metadata component; (ii)
https://www.usgs.gov/faqs/what-naming-convention-landsat-collections-level-1-scenes?qt-news_science_products=0#qt-news_science_products
for detailed information about the naming conventions for Landsat scene
identifiers; and (iii) sortFilesLandsat
for automated
rearrangement of Landsat band files.
## 'character' input (i.e. filenames) path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) satellite(files) ## raster::RasterStack input satellite(l8)
## 'character' input (i.e. filenames) path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) satellite(files) ## raster::RasterStack input satellite(l8)
An S4 class to represent a complete satellite dataset
An S4 class to represent a satellite data file
name
name of the data file without extension
filepath
full path and file of the data file
path
path to the data file
file
filename incl. extension of the data file
extension
extension of the data file
An S4 class to represent satellite data
layers
a list object containing individual RasterLayer objects
An S4 class to represent satellite log data
log
a list object containing information on individual processing steps
An S4 class to represent satellite metadata
meta
a data frame object containing the data
Get information from class Satellite.
getSatDataLayers(sat, bcde = NULL) getSatDataLayer(sat, bcde) getSatMeta(sat, bcde) getSatMetaBCDETemplate(sat, bcde) getSatLog(sat) setSatBCDE(sat, bcde) createSatBCDE(sat, width = 3, flag = 0, prefix = "B", postfix = "n") addSatMetaParam(sat, meta_param) addSatMetaEntry(sat, meta_param) addSatLog( sat, info = NA_character_, in_bcde = NA_character_, out_bcde = NA_character_ ) addSatDataLayer(sat, bcde, data, meta_param, info, in_bcde) addRasterMeta2Sat(sat) createRasterMetaData(rst) updateRasterMetaData(sat, bcde) countSatDataLayers(sat) getSatParam(sat, param, bcde, return_bcde = TRUE) getSatBCDE(sat, lnbr) getSatBID(sat, bcde) getSatSID(sat) getSatSensor(sat) getSatSensorGroup(sat) getSatSensorInfo(sat) getSatSpectrum(sat, bcde) getSatBCDESolar(sat) getSatBCDEThermal(sat) getSatXRes(sat, bcde) getSatYRes(sat, bcde) getSatRes(sat, bcde) getSatType(sat, bcde) getSatCalib(sat, bcde) getSatBCDEType(sat, bcde, type) getSatBCDEFromType(sat, type = "VIS") getSatBCDEFromSpectrum(sat, spectrum = "solar") getSatBCDESres(sat, bcde, type) getSatBCDECalib(sat, bcde, calib) getSatBCDESolarCalib(sat, bcde, calib) getSatBCDEThermalCalib(sat, bcde, calib) getSatBandInfo(sat, bcde, return_calib = TRUE) getSatRadMax(sat, bcde) getSatRadMin(sat, bcde) getSatRefMax(sat, bcde) getSatRefMin(sat, bcde) getSatESD(sat) getSatESUN(sat, bcde) getSatSZEN(sat, bcde) getSatSAZM(sat, bcde) getSatSELV(sat, bcde) getSatMetaLayer(sat, bcde) getSatLayerfromData(sat, bcde, nbr) getSatLNBR(sat, bcde) getSatLMIN(sat, bcde) getSatLMAX(sat, bcde) getSatRADA(sat, bcde) getSatRADM(sat, bcde) getSatREFA(sat, bcde) getSatREFM(sat, bcde) getSatBTK1(sat, bcde) getSatBTK2(sat, bcde) getSatPRAD(sat, bcde) getSatDATE(sat, bcde) getSatProjection(sat, bcde)
getSatDataLayers(sat, bcde = NULL) getSatDataLayer(sat, bcde) getSatMeta(sat, bcde) getSatMetaBCDETemplate(sat, bcde) getSatLog(sat) setSatBCDE(sat, bcde) createSatBCDE(sat, width = 3, flag = 0, prefix = "B", postfix = "n") addSatMetaParam(sat, meta_param) addSatMetaEntry(sat, meta_param) addSatLog( sat, info = NA_character_, in_bcde = NA_character_, out_bcde = NA_character_ ) addSatDataLayer(sat, bcde, data, meta_param, info, in_bcde) addRasterMeta2Sat(sat) createRasterMetaData(rst) updateRasterMetaData(sat, bcde) countSatDataLayers(sat) getSatParam(sat, param, bcde, return_bcde = TRUE) getSatBCDE(sat, lnbr) getSatBID(sat, bcde) getSatSID(sat) getSatSensor(sat) getSatSensorGroup(sat) getSatSensorInfo(sat) getSatSpectrum(sat, bcde) getSatBCDESolar(sat) getSatBCDEThermal(sat) getSatXRes(sat, bcde) getSatYRes(sat, bcde) getSatRes(sat, bcde) getSatType(sat, bcde) getSatCalib(sat, bcde) getSatBCDEType(sat, bcde, type) getSatBCDEFromType(sat, type = "VIS") getSatBCDEFromSpectrum(sat, spectrum = "solar") getSatBCDESres(sat, bcde, type) getSatBCDECalib(sat, bcde, calib) getSatBCDESolarCalib(sat, bcde, calib) getSatBCDEThermalCalib(sat, bcde, calib) getSatBandInfo(sat, bcde, return_calib = TRUE) getSatRadMax(sat, bcde) getSatRadMin(sat, bcde) getSatRefMax(sat, bcde) getSatRefMin(sat, bcde) getSatESD(sat) getSatESUN(sat, bcde) getSatSZEN(sat, bcde) getSatSAZM(sat, bcde) getSatSELV(sat, bcde) getSatMetaLayer(sat, bcde) getSatLayerfromData(sat, bcde, nbr) getSatLNBR(sat, bcde) getSatLMIN(sat, bcde) getSatLMAX(sat, bcde) getSatRADA(sat, bcde) getSatRADM(sat, bcde) getSatREFA(sat, bcde) getSatREFM(sat, bcde) getSatBTK1(sat, bcde) getSatBTK2(sat, bcde) getSatPRAD(sat, bcde) getSatDATE(sat, bcde) getSatProjection(sat, bcde)
sat |
Satellite object (see |
bcde |
Band code. |
width , flag
|
Field width and format modifier for automated creation of
BCDE information, defaults to '3' and '0', respectively. See
|
prefix , postfix
|
Prefix and postfix to be added to the created BCDE information. |
meta_param |
Metadata parameters used to document new data layer |
info |
Log information added to metadata |
in_bcde |
BCDE of layer used as input dataset |
out_bcde |
BCDE of layer used as output dataset |
data |
Data layer of a Satellite object |
rst |
Input raster::Raster* object from which to extract metadata. |
param |
Parameter of the metadata set (i.e. colname) |
return_bcde |
Return bcde as attribute (TRUE/FALSE) |
lnbr |
Layer number |
type |
Type of the sensor band |
spectrum |
Spectral region, e.g. "solar" or "thermal". |
calib |
Calibration information. |
return_calib |
Return calibration information (TRUE/FALSE) |
nbr |
Return specific data layer selected by number |
The functions are generally self-explaining in that sence that
get*
returns the respective information and set*
sets the
respective information from/in the Satellite object.
addSatLog
adds a log entry to the Satellite object.
Objects of respective type (see satellite
).
getSatDataLayers()
: Return Satellite data layers
getSatDataLayer()
: Return Satellite data layer i
getSatMeta()
: Return Satellite object metadata
getSatMetaBCDETemplate()
: Return template for Satellite object metadata which is based on existing band
getSatLog()
: Return Satellite object log info
setSatBCDE()
: Set BCDE/data layer names of a Satellite object
createSatBCDE()
: If not supplied, automatically create BCDE names of a Satellite object
addSatMetaParam()
: Add additional or overwrite metainformation parameter to Satellite object
addSatMetaEntry()
: Add metainformation for an additional layer to Satellite object
addSatLog()
: Add new log entry to Satellite object
addSatDataLayer()
: Add new Satellite data layer
addRasterMeta2Sat()
: Add raster meta data to Satellite object meta data
createRasterMetaData()
: Create raster meta data
updateRasterMetaData()
: Create raster meta data
countSatDataLayers()
: Return number of Satellite data layers
getSatParam()
: Return parameter (general method implemented by the specific functions below)
getSatBCDE()
: Return Band code
getSatBID()
: Return Band IDs
getSatSID()
: Return sensor ID
getSatSensor()
: Return sensor
getSatSensorGroup()
: Return sensor group
getSatSensorInfo()
: Return sensor information
getSatSpectrum()
: Return spectrum
getSatBCDESolar()
: Return solar band codes
getSatBCDEThermal()
: Return thermal band codes
getSatXRes()
: Return sensor x resolution
getSatYRes()
: Return sensor y resolution
getSatRes()
: Return mean sensor resolution (mean of x and y res)
getSatType()
: Return sensor type
getSatCalib()
: Return calibration level
getSatBCDEType()
: Return TYPE band codes
getSatBCDEFromType()
: Return BCDE matching TYPE
getSatBCDEFromSpectrum()
: Return BCDE matching TYPE
getSatBCDESres()
: Return the mean of x and y resolution for band codes matching type
getSatBCDECalib()
: Return calibration level for band codes matching type
getSatBCDESolarCalib()
: Return calibration level for band codes machting type and are solar bands
getSatBCDEThermalCalib()
: Return calibration level for band codes machting type and are thermal bands
getSatBandInfo()
: Return band information
getSatRadMax()
: Return maximum radiance for bcde
getSatRadMin()
: Return minimum radiance for bcde
getSatRefMax()
: Return maximum reflectance for bcde
getSatRefMin()
: Return minimum reflectance for bcde
getSatESD()
: Return earth-sun distance
getSatESUN()
: Return actual solar TOA irradiance
getSatSZEN()
: Return sun zenith angle
getSatSAZM()
: Return sun azimuth angle
getSatSELV()
: Return Sun elevation
getSatMetaLayer()
: Return Layer name from metadata
getSatLayerfromData()
: Return Layer name from data layer
getSatLNBR()
: Return Layer number
getSatLMIN()
: Return minimum wavelength of the sensor band
getSatLMAX()
: Return maximum wavelength of the sensor band
getSatRADA()
: Return addition coefficient for SC to radiance conversion
getSatRADM()
: Return multiplicative coefficient for SC to radiance conversion
getSatREFA()
: Return addition coefficient for SC to reflectance
getSatREFM()
: Return multiplicative coefficient for SC to reflectance
getSatBTK1()
: Return calibration coefficent to convert SC to brightness temperature
getSatBTK2()
: Return calibration coefficent to convert SC to brightness temperature
getSatDATE()
: Return DATE
getSatProjection()
: Return projection
# List of input files path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) # Raster stack l8 sat <- satellite(l8)
# List of input files path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) # Raster stack l8 sat <- satellite(l8)
Convert selected layers of a Satellite object to a RasterStack
## S4 method for signature 'Satellite' stack(x, layer = names(x), ...)
## S4 method for signature 'Satellite' stack(x, layer = names(x), ...)
x |
an object of class 'Satellite' |
layer |
character vector (bcde codes) or integer vector (index) of the layers to be stacked |
... |
additional arguments passed on to |
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) stck <- stack(sat, c("B001n", "B002n", "B003n")) stck
path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) stck <- stack(sat, c("B001n", "B002n", "B003n")) stck
Create a subset of data layers from a Satellite
object and return it
as a standalone Satellite
object.
## S4 method for signature 'Satellite' subset(x, sid, cid) ## S4 method for signature 'Satellite,ANY,ANY' x[[i]]
## S4 method for signature 'Satellite' subset(x, sid, cid) ## S4 method for signature 'Satellite,ANY,ANY' x[[i]]
x |
Satellite object providing the source band(s) to be adjusted. |
sid |
Band numbers or bcde which should be extracted |
cid |
Calibration information used for subsetting (only works if sid is not supplied to the function) |
i |
Layer index(es) for subsetting. |
A Satellite object
A Satellite object
A Satellite object
## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat[[2:5]] subset(sat, cid = "SC")
## sample data path <- system.file("extdata", package = "satellite") files <- list.files(path, pattern = glob2rx("LC08*.TIF"), full.names = TRUE) sat <- satellite(files) sat[[2:5]] subset(sat, cid = "SC")