[R-sig-Geo] Problem merging rasters after conversion and reprojection of .hdf file
Loïc Dutrieux
loic.dutrieux at wur.nl
Wed Apr 30 14:49:16 CEST 2014
Dear Justin,
gdalwarp is able to reproject/resample and mosaic all at once, and that
is probably the preferred option in that case (since there are no
overlapping areas).
See the simplified example below:
###
library(raster)
library(gdalUtils)
dir <- file.path(rasterOptions()$tmpdir, 'MODIS')
dir.create(dir, recursive=TRUE)
# Download two neighboring modis tiles
download.file('http://e4ftl01.cr.usgs.gov/MOLT/MOD13A2.005/2000.04.22/MOD13A2.A2000113.h20v08.005.2006275210548.hdf',
destfile=file.path(dir, 'NDVI.h20v08.hdf'))
download.file('http://e4ftl01.cr.usgs.gov/MOLT/MOD13A2.005/2000.04.22/MOD13A2.A2000113.h21v08.005.2006275210549.hdf',
destfile=file.path(dir, 'NDVI.h20v09.hdf'))
# Get list of files downloaded
list <- list.files(dir, full.names=TRUE)
# Get list of sds1
sdsList <- sapply(X=list, FUN=function(x){get_subdatasets(x)[1]})
# Warp
gdalwarp(srcfile=sdsList, t_srs="+proj=longlat +datum=WGS84 +no_defs",
dstfile=file.path(dir, 'mosaic_latlong.tif'))
r <- raster(file.path(dir, 'mosaic_latlong.tif'))
plot(r)
Hope this helps
Best regards,
--
Loïc Dutrieux
Laboratory of Geo-Information Science and Remote Sensing
Wageningen University
The Netherlands
On 14-04-30 01:10 AM, Justin Michell wrote:
> Hi Jonathan
>
> Thanks, very helpful!
>
> I have followed your suggestions (except I already had a loop going so I
> didn�t use batch_gdal_translate). But after this process when I I try to
> match these NDVI values (for Jan as shown below) to the coordinates of
> my dataset, I get mostly NA�s. I am not sure if this makes sense,
> although the reprojected map when I plot it looks fine I think.
>
> My coordinates in my spatial dataset represent 464 unique sample sites
> scattered across Kenya with a count of the number people examined and
> positive at each site, and downloaded from the malaria atlas project
> (http://www.map.ox.ac.uk/browse-resources/). Any thoughts would be
> appreciated!
>
> # Jan tiles (4 tiles cover Kenya)
>
>> for (i in 1 : 4){
> + # extract the NDVI band (sd_index=1) and converts to .tiff
> + gdal_translate(out.files[i], paste0("Jan", "_", i, ".tiff"),
> sd_index=1)
> + }
>
>> mosaic_rasters(gdalfile=c("Jan_1.tiff", "Jan_2.tiff", "Jan_3.tiff", "Jan_4.tiff"),dst_dataset="NDVI1_mosaic.tiff", separate=F, verbose=TRUE)
>
>> gdalwarp("NDVI1_mosaic.tiff","MODIS_NDVI/NDVIJan.tiff", s_srs="+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs",t_srs="+proj=longlat +datum=WGS84 +no_defs", srcnodata=-3000,dstnodata=-3000)
>
>> NDVI1 <- raster("MODIS_NDVI/NDVIJan.tiff")*0.0001
>> NDVI1 <- crop(NDVI1, extent(kenya))
>
>> NDVI1
> class : RasterLayer
> dimensions : 1107, 953, 1054971 (nrow, ncol, ncell)
> resolution : 0.008397857, 0.008397857 (x, y)
> extent : 33.905, 41.90816, -4.671056, 4.625372 (xmin, xmax, ymin,
> ymax)
> coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84
> +towgs84=0,0,0
> data source : in memory
> names : NDVIJan
> values : -0.2, 0.9031 (min, max)
>
>> summary(NDVI1)
> NDVIJan
> Min. -0.2000
> 1st Qu. 0.1813
> Median 0.2892
> 3rd Qu. 0.4550
> Max. 0.9031
> NA's 652208.0000
>
>> extract(NDVI1, sitesPolyPoints at coords)
>
> extract(NDVI1, sitesPolyPoints at coords)
> [1] 0.5094 NA 0.6557 NA NA 0.6575 0.6493 0.6469 NA
> 0.6607 NA NA NA 0.6814 NA NA 0.6620 NA
> NA NA NA 0.6749 0.6887 NA 0.6880 0.5959 NA
> [28] NA NA 0.6570 0.6212 NA NA NA NA NA
> 0.6647 NA NA 0.6296 NA NA 0.5831 NA NA NA
> 0.6147 NA 0.6167 NA 0.6258 0.6615 NA 0.6613
> [55] NA 0.6626 NA NA 0.6406 NA 0.6451 0.6718 NA
> 0.6641 NA NA NA NA 0.6479 NA 0.6506 NA
> 0.6478 NA 0.6629 NA NA NA 0.6519 NA 0.6699
> [82] NA NA NA NA 0.5996 NA 0.6694 NA
> 0.6855 NA 0.6625 NA NA NA NA NA NA NA
> 0.6389 NA NA NA NA NA NA NA NA
> [109] NA NA NA NA NA NA NA NA NA
> NA NA 0.6203 NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [136] 0.6159 NA NA 0.6538 NA 0.6613 0.6731 NA NA
> NA 0.6781 NA 0.6090 NA NA 0.6054 NA NA NA
> 0.6810 NA NA NA NA NA NA NA
> [163] 0.6486 NA NA 0.6328 NA NA 0.6681 NA 0.6681
> 0.6766 NA NA 0.6910 NA NA NA NA NA
> NA NA NA NA 0.6706 NA NA NA NA
> [190] NA 0.6839 NA 0.6632 NA NA NA NA NA
> NA 0.6716 NA NA NA NA NA NA 0.6282 NA
> NA NA NA 0.6607 NA NA NA NA
> [217] NA NA NA NA NA 0.2105 NA NA NA
> NA NA NA NA NA NA NA NA NA NA NA
> 0.7046 NA 0.7367 NA 0.6968 NA NA
> [244] NA 0.5180 0.3300 0.7082 0.5610 0.3725 NA NA NA
> NA NA NA 0.2636 0.7032 0.6201 0.6996 NA NA 0.3071 0.3292
> 0.4628 NA NA NA NA NA NA
> [271] NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [298] NA NA NA NA 0.7367 NA NA NA NA
> NA NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [325] NA NA NA NA NA NA NA NA NA
> NA NA NA NA 0.7073 NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [352] NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [379] NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [406] NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA
> [433] NA NA NA NA NA NA NA NA NA
> 0.3652 NA NA NA NA NA NA NA NA
> NA NA NA NA NA NA NA NA NA
>
>> head(sitesPolyPoints at coords)
> coords.x1 coords.x2
> [1,] 33.9940 0.1580
> [2,] 34.1164 -0.0115
> [3,] 34.1175 0.3770
> [4,] 34.1277 -0.4222
> [5,] 34.1318 -0.0035
> [6,] 34.1350 0.4016
>
> Cheers
> Justin
>
>
> On Apr 29, 2014, at 2:56 PM, Justin Michell <jwm302 at gmail.com> wrote:
>
>> Hi Jonathan
>>
>> Thanks for you help here. I get the following error when I tried the following as per you advice (and the example for mosaic_rasters). Do I not have the right GDALDriver?:
>>
>>> gdal_setInstallation()
>>> valid_install <- !is.null(getOption("gdalUtils_gdalPath"))
>>> valid_install
>> [1] TRUE
>>> if(require(raster) && require(rgdal) && valid_install)
>> + {
>> + NDVI_1 <- mosaic_rasters(gdalfile=c(out.files[1],out.files[2], out.files[3],out.files[4], out.files[5], out.files[6]),dst_dataset="NDVI1_mosaic.hdf", separate=F, of=c("HDF4","HDF5"), verbose=TRUE)
>> + gdalinfo("NDVI1_mosaic.hdf")
>> + }
>> Checking gdal_installation...
>> GDAL command being used: "/Library/Frameworks/GDAL.framework/Versions/1.10/Programs/gdalbuildvrt" -separate "/var/folders/t_/dby7tsnj0vgbfxp8hgclyrj80000gn/T//RtmpSKFW71/file17fd953983454.vrt" "MOD13A3.A2013001.h20v08.005.2013042085256.hdf" "MOD13A3.A2013001.h20v09.005.2013042085401.hdf" "MOD13A3.A2013001.h21v08.005.2013042085514.hdf"
> "MOD13A3.A2013001.h21v09.005.2013042085607.hdf"
> "MOD13A3.A2013001.h22v08.005.2013042085522.hdf"
> "MOD13A3.A2013001.h22v09.005.2013042085359.hdf"
>> Checking gdal_installation...
>> GDAL command being used: "/Library/Frameworks/GDAL.framework/Versions/1.10/Programs/gdal_translate" -of "HDF4" -of "HDF5" "/var/folders/t_/dby7tsnj0vgbfxp8hgclyrj80000gn/T//RtmpSKFW71/file17fd953983454.vrt" "NDVI1_mosaic.hdf"
>> Input file size is 3600, 24000
>> character(0)
>> attr(,"status")
>> [1] 1
>> Warning messages:
>> 1: running command '"/Library/Frameworks/GDAL.framework/Versions/1.10/Programs/gdal_translate" -of "HDF4" -of "HDF5" "/var/folders/t_/dby7tsnj0vgbfxp8hgclyrj80000gn/T//RtmpSKFW71/file17fd953983454.vrt" "NDVI1_mosaic.hdf"' had status 1
>> 2: running command '"/Library/Frameworks/GDAL.framework/Versions/1.10/Programs/gdalinfo" "NDVI1_mosaic.hdf"' had status 1
>> ERROR 6: GDALDriver::Create() ... no create method implemented for this format.
>>
>> ERROR 4: `NDVI1_mosaic.hdf' does not exist in the file system,
>> and is not recognised as a supported dataset name.
>>
>> gdalinfo failed - unable to open 'NDVI1_mosaic.hdf�.
>>
>>
>> Cheers
>> Justin
>>
>>
>>
>>
>>
>>
>> On Apr 28, 2014, at 3:17 PM, Jonathan Greenberg <jgrn at illinois.edu> wrote:
>>
>>> Also note you can use ?batch_gdal_translate to do your HDF -> TIF conversions.
>>>
>>> --j
>>>
>>> On Mon, Apr 28, 2014 at 8:12 AM, Jonathan Greenberg <jgrn at illinois.edu> wrote:
>>>> Justin:
>>>>
>>>> Couple of comments:
>>>>
>>>> 1) In general, I find it easier to mosaic FIRST and then reproject
>>>> SECOND -- when you reproject first, mosaic second, you can get weird
>>>> issues particularly along the seams.
>>>> 2) Since you are already using gdalUtils, have you tried
>>>> ?mosaic_rasters (which will be faster than merge() in all likelihood,
>>>> since it uses the base GDAL mosaicking capabilities)? Make sure
>>>> separate=FALSE for this particular application.
>>>>
>>>> --j
>>>>
>>>> On Mon, Apr 28, 2014 at 7:18 AM, Justin Michell <jwm302 at gmail.com> wrote:
>>>>> Dear Group
>>>>>
>>>>> I am dealing with the task of preprocessing and re-projecting MODIS gridded tiles in .hdf format from Sinusoidal projection, in R, to a geographic projection. I would like to align all my other climate layers (from worldclim.org) which are at 1km resolution to my NDVI layers. I am using the gdal_utils package in R, and only
> one subset I�m interested in (monthly NDVI). I am working on Mac OS and
> grabbed gdal from here: http://www.kyngchaos.com/software/frameworks .
>>>>>
>>>>> To do this I use the following code (previous list entries relating to gdalUtils have assisted me up till this point):
>>>>>
>>>>> # download all available monthly images for the year 2013 - MODIS PRODUCT (MOD13A3, Terra, Vegetation Indices, Tile, 1000m, Monthly)
>>>>> ModisDownload(x="MOD13A3",h=c(20,21,22),v=c(8,9),dates=c('2013.01.01','2013.12.31'),mosaic=F,proj=F)
>>>>>
>>>>> # extract the NDVI band (sd_index=1) and converts to .tiff for 1 tile for January
>>>>> gdal_translate("MOD13A3.A2013001.h20v08.005.2013042085256.hdf", "Jan_1.tiff", sd_index=1)
>>>>>
>>>>> # converts projection to Geog WGS84
>>>>> gdalwarp(�Jan_1.tiff","MODIS_NDVI/NDVIJan_1.tiff", s_srs="+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181 +b=6371007.181 +units=m +no_defs",t_srs="+proj=longlat +datum=WGS84 +no_defs",srcnodata=-3000,dstnodata=-3000)
>>>>>
>>>>> I have 6 tiles per month (covering Kenya). For each month I�d like to merge all 6 tiles using the raster package (to cover Kenya). For January I perform the following operation using the merge function in the raster package:
>>>>>
>>>>> NDVI1 <- (merge(raster("MODIS_NDVI/NDVIJan_1.tiff"),raster("MODIS_NDVI/NDVIJan_2.tiff"),raster("MODIS_NDVI/NDVIJan_3.tiff"), raster("MODIS_NDVI/NDVIJan_4.tiff"), raster("MODIS_NDVI/NDVIJan_5.tiff"), raster("MODIS_NDVI/NDVIJan_6.tiff"), tolerance=0.5))*0.0001
>>>>> NDVI1 <- crop(NDVI1, extent(kenya))
>>>>>
>>>>> Without including the tolerance argument I get an error:
>>>>>
>>>>> Error in compareRaster(x, extent = FALSE, rowcol = FALSE, orig = TRUE, :
>>>>> different origin
>>>>>
>>>>> But after this merge a lot of NA�s are introduced and the plot doesn�t look right (as it did before for each tile).
>>>>>
>>>>> The resolution is not exactly the same. Here are a comparison of the layers (before merging NDVI tiles) and my SpatialPolygonsDataFrame called kenya, as well as my r sessionInfo() printed below:
>>>>>
>>>>>
>>>>>> n1 <- raster("MODIS_NDVI/NDVIJan_1.tiff")
>>>>>> n1
>>>>> class : RasterLayer
>>>>> dimensions : 1219, 1275, 1554225 (nrow, ncol, ncell)
>>>>> resolution : 0.008205785, 0.008205785 (x, y)
>>>>> extent : 20, 30.46238, -0.002852273, 10 (xmin, xmax, ymin, ymax)
>>>>> coord. ref. : +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
>>>>> data source : /Users/justinmichell/MODIS_NDVI/NDVIJan_1.tiff
>>>>> names : NDVIJan_1
>>>>> values : -32768, 32767 (min, max)
>>>>>
>>>>>> meanTemp1
>>>>> class : RasterLayer
>>>>> dimensions : 1115, 960, 1070400 (nrow, ncol, ncell)
>>>>> resolution : 0.008333333, 0.008333333 (x, y)
>>>>> extent : 33.90833, 41.90833, -4.666667, 4.625 (xmin, xmax, ymin, ymax)
>>>>> coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0
>>>>> data source : in memory
>>>>> names : layer
>>>>> values : -4.4, 30 (min, max)
>>>>>
>>>>>> kenya
>>>>> class : SpatialPolygonsDataFrame
>>>>> features : 1
>>>>> extent : 33.90722, 41.90517, -4.669618, 4.622499 (xmin, xmax, ymin, ymax)
>>>>> coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0
>>>>> variables : 11
>>>>> names : FIPS, ISO2, ISO3, UN, NAME, AREA, POP2005, REGION, SUBREGION, LON, LAT
>>>>> min values : KE, KE, KEN, 404, Kenya, 56914, 35598952, 2, 14, 37.858, 0.53
>>>>> max values : KE, KE, KEN, 404, Kenya, 56914, 35598952, 2, 14, 37.858, 0.53
>>>>>
>>>>>> sessionInfo()
>>>>> R version 3.0.2 (2013-09-25)
>>>>> Platform: x86_64-apple-darwin10.8.0 (64-bit)
>>>>>
>>>>> locale:
>>>>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>>>>
>>>>> attached base packages:
>>>>> [1] stats graphics grDevices utils datasets methods base
>>>>>
>>>>> other attached packages:
>>>>> [1] gdalUtils_0.2.0 rgdal_0.8-14 RCurl_1.95-4.1 bitops_1.0-6 raster_2.2-12 sp_1.0-14
>>>>>
>>>>> loaded via a namespace (and not attached):
>>>>> [1] codetools_0.2-8 foreach_1.4.1 grid_3.0.2 iterators_1.0.6 lattice_0.20-24 scatterplot3d_0.3-34
>>>>>
>>>>>
>>>>> Thanks very much,
>>>>> Justin Michell
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> [[alternative HTML version deleted]]
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> R-sig-Geo mailing list
>>>>> R-sig-Geo at r-project.org
>>>>>https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Jonathan A. Greenberg, PhD
>>>> Assistant Professor
>>>> Global Environmental Analysis and Remote Sensing (GEARS) Laboratory
>>>> Department of Geography and Geographic Information Science
>>>> University of Illinois at Urbana-Champaign
>>>> 259 Computing Applications Building, MC-150
>>>> 605 East Springfield Avenue
>>>> Champaign, IL 61820-6371
>>>> Phone: 217-300-1924
>>>>http://www.geog.illinois.edu/~jgrn/
>>>> AIM: jgrn307, MSN: jgrn307 at hotmail.com, Gchat: jgrn307, Skype: jgrn3007
>>>
>>>
>>>
>>> --
>>> Jonathan A. Greenberg, PhD
>>> Assistant Professor
>>> Global Environmental Analysis and Remote Sensing (GEARS) Laboratory
>>> Department of Geography and Geographic Information Science
>>> University of Illinois at Urbana-Champaign
>>> 259 Computing Applications Building, MC-150
>>> 605 East Springfield Avenue
>>> Champaign, IL 61820-6371
>>> Phone: 217-300-1924
>>>http://www.geog.illinois.edu/~jgrn/
>>> AIM: jgrn307, MSN: jgrn307 at hotmail.com, Gchat: jgrn307, Skype: jgrn3007
>>
>
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
More information about the R-sig-Geo
mailing list