[R-sig-Geo] Raster reprojection in R
Michael Sumner
md@umner @end|ng |rom gm@||@com
Sun Sep 15 00:10:48 CEST 2019
Hi again, I checked the actual extent and it makes more sense now as it is
a tiny region of the Aleutians. The problem in raster's heuristic is that
part of your projected raster overlaps the anti-meridan, and so the
extent-determiner unhelpfully expands to include the full extent of all
longitudes:
library(raster)
ex <- extent(-11119505, -10007555, 5559753, 6671703)
prj <- "+proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181
+ +b=6371007.181 +units=m +no_defs"
projectExtent(raster(ex, crs = prj, res = 463), crs = "+init=epsg:4326")
class : RasterLayer
dimensions : 2402, 2402, 5769604 (nrow, ncol, ncell)
resolution : 0.1498734, 0.004163854 (x, y)
extent : -179.9968, 179.999, 49.99842, 60 (xmin, xmax, ymin, ymax)
crs : +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs
+ellps=WGS84 +towgs84=0,0,0
Illustrated here:
https://gist.github.com/mdsumner/012c4c8e36ffa42e9053621420924eab
So, you'd want something like
projectRaster(tile, raster(extent(-180, -135, 50, 60), crs = geocrs, res =
0.02)
but, that's still outrageously wasteful and unnecessary as mentioned before
- but depends on what you are doing.
(It's a curious way to store data, but I'm pretty sure the MODIS terra
community settled on a global raster in sinusoidal to match the L3 bins in
a way the marine community doesn't usually do).
Thanks for the example, that gives a good way to approach this question on
various forums where it comes up quite a lot and I never was really
motivated to pursue before.
Cheers, Mike.
On Sat, Sep 14, 2019 at 7:49 PM Michael Sumner <mdsumner using gmail.com> wrote:
> You should set a target raster with the extent and dimensions required.
> There are inherent limits in reprojection and heuristics won't always work.
> Generally using a target raster is much more efficient anyway.
>
> But, this is an intensive remodeling of the data, delivered in a
> projection for good reason (global equal area probably, and reasonably
> close to the L3 bins used for daily statistics.
>
> You should find an alternative process IMO, are you trying to extract
> pixel values or something else?
>
> Cheers, Mike
>
> On Sat., 14 Sep. 2019, 11:30 Víctor Rodríguez Galiano, <
> vrgaliano using gmail.com> wrote:
>
>> Hello,
>>
>> I am trying to reproject a raster image from sinusoidal projection using
>> “projectRaster”. The size of the image is not very big (922 KB), but when
>> applying the reprojection I get this error message: “Error: cannot
>> allocate
>> vector of size 7.1 Gb”. Please see the code below:
>>
>> HDFpath <- "C:/images/" # dir with images
>> setwd(HDFpath) # set working directory
>> library(raster)
>> library(rgdal)
>> geocrs <- "+proj=longlat +ellps=WGS84 +datum=WGS84"
>> tile <- brick(“image.tif”)
>> tile_reproj <- projectRaster(tile, crs=geocrs)
>>
>> Error: cannot allocate vector of size 7.1 Gb
>>
>> > tile
>> class : RasterStack
>> dimensions : 2400, 2400, 5760000, 1 (nrow, ncol, ncell, nlayers)
>> resolution : 463.3127, 463.3127 (x, y)
>> extent : -11119505, -10007555, 5559753, 6671703 (xmin, xmax, ymin,
>> ymax)
>> coord. ref. : +proj=sinu +lon_0=0 +x_0=0 +y_0=0 +a=6371007.181
>> +b=6371007.181 +units=m +no_defs
>> names : INCA.h08v03.Dormancy_median
>> min values : 19
>> max values : 540
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>
--
Michael Sumner
Software and Database Engineer
Australian Antarctic Division
Hobart, Australia
e-mail: mdsumner using gmail.com
[[alternative HTML version deleted]]
More information about the R-sig-Geo
mailing list