Привязка точки к растру в зависимости от состояния - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть растр и несколько точек. Я хочу привязать точки, наиболее близкие к растру, исходя из некоторых общих условий.

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)

В результате получается

enter image description here

Теперь я хочу привязать точки (+) к зеленой диагональной линии. Здесь я предоставил диагональную матрицу, чтобы упростить ее, но она может иметь любую форму (например, изогнутую форму, например, реки).

Я нашел несколько методов, которые привязывают только ближайшую растровую сетку к точкам.

##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). (б) привязать точки на основе некоторого радиуса поиска (скажем, соседние некоторые точки).

...