[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