У меня есть растр и несколько точек. Я хочу привязать точки, наиболее близкие к растру, исходя из некоторых общих условий.
library(raster)
##create a diagonal matrix
xy = diag(1, 100, 100)
# Turn the matrix into a raster
rast <- raster(xy)
# Give it lat/lon coords
extent(rast) <- c(-180,180,-90,90)
# ... and assign a projection
projection(rast) <- CRS("+proj=longlat +datum=WGS84")
##create two points just for reference
lonlat <- data.frame(x = c(50,130), y = c(75,-50))
coordinates(lonlat)<-~x+y
crs(lonlat)<- CRS("+proj=longlat +datum=WGS84")
plot(rast)
plot(lonlat,add=T)
В результате получается
Теперь я хочу привязать точки (+) к зеленой диагональной линии. Здесь я предоставил диагональную матрицу, чтобы упростить ее, но она может иметь любую форму (например, изогнутую форму, например, реки).
Я нашел несколько методов, которые привязывают только ближайшую растровую сетку к точкам.
##snap raster grid closest to point
Idx = sapply(lonlat$x,function(i) which.min(abs(unique(rasterToPoints(rast, spatial = TRUE)@coords[,1])-i)))
Idy = sapply(lonlat$y,function(i) which.min(abs(unique(rasterToPoints(rast, spatial = TRUE)@coords[,2])-i)))
Я, в основном, хочу две вещи (a) привязать ближайшую точку на основе некоторого простого условия (rast == 1). (б) привязать точки на основе некоторого радиуса поиска (скажем, соседние некоторые точки).