[R-sig-Geo] how to get the value of a pixel and its 8 surrounding pixels from points?

Barry Rowlingson b@row||ng@on @end|ng |rom gm@||@com
Wed Nov 6 10:19:53 CET 2019


On Wed, Nov 6, 2019 at 6:18 AM Bede-Fazekas Ákos <bfalevlist using gmail.com>
wrote:

> Dear Cristabel,
> function focal() of package raster is what you are searching for.
>

No it isn't. That operates over the whole raster, which is massive overkill
for querying the eight pixels around a single point.


>
> > var <- nc[lon.coor, lat.coor, ]
> >
> > In var are the values for my point. But I also need the values of the
> > 8 surrounding pixels to get an average.
>
>
The 8 pixels around X[i,j] are:

X[i-1,j-1], X[i, j-1], X[i+1,j-1]
X[i-1,j], X[i+1,j]
X[i-1,j+1], X[i,j+1], X[i+1,j+1]

as long as those cells aren't now outside the matrix.

So write a function that generates those offsets given i,j:

 > n8 =
function(i,j){cbind(i+c(-1,0,1,-1,1,-1,0,1),j+c(-1,-1,-1,0,0,1,1,1))}

which returns this:

 > n8(23,12)
     [,1] [,2]
[1,]   22   11
[2,]   23   11
[3,]   24   11
[4,]   22   12
[5,]   24   12
[6,]   22   13
[7,]   23   13
[8,]   24   13

Then for a test matrix:

> m = matrix(1:10000,100,100)

where i,j = 23, 12:

> m[23,12]
[1] 1123

the 8 neighbours are:

> m[n8(23,12)]
[1] 1022 1023 1024 1122 1124 1222 1223 1224
>

Now I'm not sure if you can do exactly that with your netcdf object because
netcdf is a structured flexible format, and you've shown `nc[lon, lat, ]`
where `nc` is your netcdf object rather than a variable got from it and I
can't get that to work for my test NCDF. (I have sea surface temp in an
netcdf which I get with `sst = nc_getvar(nc, "sst")` for example). But the
mechanism is the same - compute the index of the 8 neighbour pixels and
extract.

	[[alternative HTML version deleted]]



More information about the R-sig-Geo mailing list