If you want a multi-layer object you can create a RasterBrick in stead
of a RasterLayer. I.e. 'brick()' in stead of  'raster()'

library(raster)
etopo1 <- brick("Etopo1.tif") # change here
e <- extent(-90, -32, -60, 15)
r <- crop(etopo1, e)


Alternatively, you could create three RasterLayer objects
etopo1 <- brick("Etopo1.tif", band=1)
etopo2 <- brick("Etopo1.tif", band=2)
etopo3 <- brick("Etopo1.tif", band=3)


Robert

On Fri, Jul 23, 2010 at 7:54 AM, Michael Sumner <[email protected]> wrote:
> I know this is rather simplistic, and has bugs that I just don't have
> the impetus to track down at the moment, but it should work for your
> problem. I didn't realize that raster doesn't support (AFAICS)
> multiband rasters, such as 3-band images.
>
> Please use with caution - there are bugs! and very bad practices . . .
>
> readpartGDAL <- function(x, xlim = NULL, ylim = NULL, ...) {
>        require(rgdal)
>        info <- GDALinfo(x)
>        offs <- info[c("ll.x", "ll.y")]
>        scl <- info[c("res.x", "res.y")]
>        dimn <- info[c("columns", "rows")]
>        ## brain dead, but easy
>        xs <- seq(offs[1], by = scl[1], length = dimn[1]) + scl[1]/2
>        ys <- seq(offs[2], by = scl[2], length = dimn[2]) + scl[2]/2
>
>        if (!is.null(xlim)) {
>                if (!is.numeric(xlim)) stop("xlim must be numeric")
>                if (!length(xlim) == 2) stop("xlim must be of length 2")
>                if (!diff(xlim) > 0) stop("xlim[1] must be less than xlim[2]")
>                xind <- which(xs >= xlim[1] & xs <= xlim[2])
>        }
>
>        if (!is.null(ylim)) {
>                if (!is.numeric(ylim)) stop("ylim must be numeric")
>                if (!length(ylim) == 2) stop("ylim must be of length 2")
>                if (!diff(ylim) > 0) stop("ylim[1] must be less than ylim[2]")
>                yind <- which(ys >= ylim[1] & ys <= ylim[2])
>        }
>        ## probably need a sign check for info["ysign"]
>        ## reverse for y/x order in readGDAL
>        rgdal.offset <- rev(c(min(xind), dimn[2] - max(yind)))
>        rgdal.dim <- rev(c(length(xind), length(yind)))
>        readGDAL(x, offset = rgdal.offset, region.dim = rgdal.dim, ...)
> }
>
> f <- "Etopo1.tif"
>
> d <- readpartGDAL(f, xlim = c(-90, -32), ylim = c(-60, 15))
>
> ## assuming you have 3-bands describing RGB
> ## (see ?SGDF2PCT
> cols <- SGDF2PCT(d)
> d$idx <- cols$idx
> image(d, "idx", col = cols$ct)
>
>
>
> On Sat, Jul 24, 2010 at 12:09 AM, Rodrigo Aluizio <[email protected]> wrote:
>> Well Etopo1 have the colored image as well 
>> (ftp://ftp.ngdc.noaa.gov/mgg/global/relief/ETOPO1/image/color_etopo1_ice_full.tif.gz).
>>  I'm not able to import it using readGDAL (because of the vector size), but 
>> normally when I do so with georeferenced images, the object created have, in 
>> the data slot, the three band (RGB) color codes as columns. Using 
>> raster{raster} and then as(x,'SpatialGridDataFrame') these data seems to get 
>> truncated and unrecognizable to image{sp}.
>>
>> Regards.
>>
>> Rodrigo
>>
>> -----Mensagem original-----
>> De: Michael Sumner [mailto:[email protected]]
>> Enviada em: sexta-feira, 23 de julho de 2010 10:53
>> Para: Rodrigo Aluizio
>> Cc: R Help
>> Assunto: Re: [R-sig-Geo] RES: Import Part of a GeoTiff using readGDAL{rgdal}
>>
>> I don't know what you mean by "band data structure" and "original colors". I 
>> just have the generic (ice/cell registered) Etopo1 which is elevation values 
>> as 16-bit integers. Perhaps you could describe the actual file you have 
>> more, where you got it, and how you have used it before.
>>
>> Cheers, Mike.
>>
>> On Fri, Jul 23, 2010 at 8:43 PM, Rodrigo Aluizio <[email protected]> wrote:
>>> Excellent suggestion, but I'm facing another little problem. When importing 
>>> through raster{raster}, I lost the band data structure (but the data seems 
>>> to still be there) which turns impossible to reproduce the original colors. 
>>> Is there a way to bypass this?
>>>
>>> Thanks.
>>>
>>> Rodrigo.
>>>
>>> -----Mensagem original-----
>>> De: Michael Sumner [mailto:[email protected]] Enviada em:
>>> quinta-feira, 22 de julho de 2010 12:50
>>> Para: Rodrigo Aluizio
>>> Cc: R Help
>>> Assunto: Re: [R-sig-Geo] Import Part of a GeoTiff using
>>> readGDAL{rgdal}
>>>
>>> With readGDAL you must figure out the impled coordinates, referenced from 
>>> the top left - it's confusing, but with some experimenting you will get it.
>>>
>>> But, far easier is to use the raster package, which will let you deal with 
>>> the entire Etopo1 if you want by accessing the file as needed, and there 
>>> are simpler methods to crop the big raster - and coerce to 
>>> SpatialGridDataFrame if need be.
>>>
>>> E.g.
>>> ## all this works pretty fast as raster takes care of the memory
>>> library(raster)
>>> etopo1 <- raster("Etopo1.tif")
>>>  e <- extent(-90, -32, -60, 15)
>>> r <- crop(etopo1, e)
>>> plot(r)
>>>
>>> ## if we want to enforce the full memory use as an sp object x <-
>>> as(r, "SpatialGridDataFrame")
>>> image(x)
>>> summary(x)
>>> Object of class SpatialGridDataFrame
>>> Coordinates:
>>>   min max
>>> s1 -90 -32
>>> s2 -60  15
>>> Is projected: FALSE
>>> proj4string :
>>> [+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0] Number of 
>>> points: 2 Grid attributes:
>>>   cellcentre.offset   cellsize cells.dim
>>> s1         -89.99167 0.01666667      3480
>>> s2         -59.99167 0.01666667      4500 Data attributes:
>>>   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
>>>  -8086   -4188   -2583   -2025     148    6494
>>>
>>>
>>>
>>> sessionInfo()
>>> R version 2.11.1 (2010-05-31)
>>> x86_64-pc-mingw32
>>>
>>> locale:
>>> [1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252
>>> [3] LC_MONETARY=English_Australia.1252 LC_NUMERIC=C [5]
>>> LC_TIME=English_Australia.1252
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>> other attached packages:
>>> [1] rgdal_0.6-27 raster_1.2-6 sp_0.9-65
>>>
>>> loaded via a namespace (and not attached):
>>> [1] grid_2.11.1    lattice_0.18-8 tools_2.11.1
>>>
>>> On Fri, Jul 23, 2010 at 1:14 AM, Rodrigo Aluizio <[email protected]> 
>>> wrote:
>>>> Hi List.
>>>>
>>>> I’m trying to import only a part of interest from a raster image map
>>>> (let say, ETOPO 1 Global Relief GeoTiff). I realize that, PROBABLY,
>>>> the readGDAL function can deal with my issue through the arguments:
>>>>
>>>>
>>>>
>>>> offset - Number of rows and columns from the origin (usually the
>>>> upper left
>>>> corner) to begin reading from; presently ordered (y,x) - this may
>>>> change
>>>>
>>>> region.dim - The number of rows and columns to read from the dataset;
>>>> presently ordered (y,x) - this may change
>>>>
>>>>
>>>>
>>>> But, I don’t know exactly how to specify that I want the rows (and
>>>> columns?) which show only South America, I do know the SA coordinate
>>>> limits, but not the corresponding rows.
>>>>
>>>> The real problem is that I don’t know how to use the function
>>>> resources properly. I’m trying to limit the region during import to
>>>> avoid memory limit issues, once importing the ETOPO 1 Geotiff tries to 
>>>> generate a huge vector.
>>>>
>>>> Really Sorry About It, Thanks for Your Patience and Attention.
>>>>
>>>>
>>>>
>>>> -------------------------------------------------------------
>>>>
>>>> MSc.  <mailto:[email protected]> Rodrigo Aluizio
>>>>
>>>> Centro de Estudos do Mar/UFPR
>>>> Laboratório de Micropaleontologia
>>>> Avenida Beira Mar s/n - CEP 83255-000 Pontal do Paraná - PR - Brasil
>>>>
>>>>
>>>>
>>>>
>>>>        [[alternative HTML version deleted]]
>>>>
>>>>
>>>> _______________________________________________
>>>> R-sig-Geo mailing list
>>>> [email protected]
>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Michael Sumner
>>> Institute for Marine and Antarctic Studies, University of Tasmania Hobart, 
>>> Australia
>>> e-mail: [email protected]
>>>
>>> _______________________________________________
>>> R-sig-Geo mailing list
>>> [email protected]
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>>
>>
>>
>>
>> --
>> Michael Sumner
>> Institute for Marine and Antarctic Studies, University of Tasmania
>> Hobart, Australia
>> e-mail: [email protected]
>>
>>
>
>
>
> --
> Michael Sumner
> Institute for Marine and Antarctic Studies, University of Tasmania
> Hobart, Australia
> e-mail: [email protected]
>
> _______________________________________________
> R-sig-Geo mailing list
> [email protected]
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>

_______________________________________________
R-sig-Geo mailing list
[email protected]
https://stat.ethz.ch/mailman/listinfo/r-sig-geo

Reply via email to