Вычисление попарного минимального расстояния, перемещающегося только в пределах обрезанной области - PullRequest
0 голосов
/ 07 октября 2019

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

Я пытался сделать это, используя gDistance (воспроизводимый пример ниже), но не уверен, что это сработало. Мне нужно знать попарные расстояния между участками, где пройденный путь не выходит за обрезанную границу (в приведенном ниже примере это граница Швейцарии).

library(maptools)  
library(raster)
data(wrld_simpl)
SPDF <- subset(wrld_simpl, NAME=="Switzerland") #polygon map of Switzerland
## Example RasterLayer
r <- raster(nrow=1000, ncol=1000, crs=proj4string(SPDF)) #blank raster

r[] <- 0 #set all cell values in raster to 0

## crop raster to extent of Switzerland polygon, SPDF
r2 <- crop(r, extent(SPDF)) 

#create patches by setting certain cells in raster to value 1; all other cells are still 0

r2[8,1] <- 1 
r2[9,11] <- 1

plot(r2)

r2

p <- clump(r3) #give each patch of its own unique ID
spplot(p)

p[is.na(p[])] <- 0 #all cells that were previously 0 were set to NA by clump() so we need to change them back to 0


p.masked <- mask(p,SPDF) #now clip the raster to the border of Switzerland using SPDF; outside of Switzerland's border cells are now NA

plot(p.masked)

p.masked

# rasterToPolygon method
rpoly <- rasterToPolygons(p.masked, dissolve=T) #convert from raster to polygons; NA cells (outside Switzerland) do not get converted
plot(rpoly)

rpoly

d <- gDistance(rpoly, byid=T) #calculate minimum pairwise distances between polygons



library(reshape2)
df <- melt(as.matrix(d), varnames = c("row", "col")) #put pairwise distances into a dataframe

#add column names
colnames(df) <- c("node_i_ID","node_j_ID","Distance")  

df

df

Я не могу сказать, сделал ли gDistance то, что я пытаюсь сделать, то есть рассчитать минимальные попарные расстояния между патчами безпокинув границу Швейцарии, или же пройденный путь включает в себя районы за пределами Швейцарии. Если бы это было последним, я мог бы использовать некоторую помощь, чтобы выяснить способ удержать путь, ограниченный границей страны. Спасибо!

...