Добавьте затененный слой на карту в R

Я создаю карты для отдельных школ в округе и хочу создать заштрихованную область вокруг границы школы. Я могу сделать это вручную с помощью QGIS, однако хотел бы иметь возможность создать что-то подобное в R. Я нахожусь в той точке, где могу сопоставить некоторые демографические переменные на уровне района, добавить местоположение школы и границы. Существует цикл, который автоматически создает новую карту для каждой школы и вставляет ее в отчет по вязанию.

Чего я не могу понять, так это того, как создать слой, который будет затенять область за пределами границы. Это моя карта с использованием R:

однако хотелось бы, чтобы это выглядело примерно так:

Я пробовал функцию add.masking из GISTools, однако она основана на плотности точек ядра, а не на полигонах.

Мой код выглядит так (извините за невоспроизводимость, так как это шейп-файлы, хранящиеся на защищенном диске.

# Load Shape files
proj<- CRS("+init=epsg:32617")

schoolBound <- readShapePoly("J:/GIS/Data/Catchments/ElementaryAreas.shp", proj4string= proj)
schools <- readShapePoints("J:/GIS/Data/Schools/ElementarySchools.shp", proj4string= proj)
roads <- readShapePoints("J:/GIS/Data/Roads/MajorRoads.shp") 
da <- readShapePoly("J:/GIS/Data/Dissemination Areas 2011/da2011.shp", 
                       proj4string = proj) 

SCH <- "School A"

# Subset shape files for area around school

school1Bound <- schoolBoundR [schoolBoundR$SchoolName == paste(SCH),] 
school1BoundBuff <- gBuffer(school1Bound, width = 15) # Adds buffer around geometry
school1Point <- schoolsR [schoolsR$Name == paste(SCH),] 
roadsBound <- roadsR[apply(gIntersects(roadsR, school1BoundBuff, byid = TRUE),2,any),]

# Plot map and add layers

plot(school1BoundBuff) 
plot(da,
     add = TRUE,
     col=colours[findInterval(da$sri, brks,all.inside=TRUE)], # Adds colour palette to Social Risk Index
     axes=F)
plot(school1Point, add = TRUE, pch = 15, col = "blue")
plot(roadsBound, add = TRUE, col = "gray60")
plot(school1Bound, add = TRUE, lwd = 5)

person GregRousell    schedule 28.08.2015    source источник
comment
Будет трудно показать вам это без ваших шейп-файлов, но попробуйте следовать stackoverflow.com/questions/29624895/, чтобы вырезать дыру для рассматриваемой области, а затем использовать что-то вроде gUnaryUnion для растворения затеняемых полигонов.   -  person hrbrmstr    schedule 28.08.2015


Ответы (1)


Я нашел способ, добавив цветовые коды в файл данных из этого вопроса: -upon-a-slot-value">R - застрял с plot() - раскрашивание полигонов шейп-файла на основе значения слота

schoolBound@data$filter <- NA
schoolBound@@data$filter[bound@data$Code == SCH] <- 1
schoolBound@@data$filter[bound@data$Code != SCH] <- 0

schoolBound@data$COLOUR <- "#FFFFFF"
schoolBound@@data$COLOUR[(as.numeric(as.character(bound@data$filter)) %% 10) == 0] <- "white"
schoolBound@@data$COLOUR[(as.numeric(as.character(bound@data$filter)) %% 10) == 1] <- NA

## Add layers to plot
plot(school1BoundBuff) 
plot(da,
     add = TRUE,
     col=colours[findInterval(da$sri, brks,all.inside=TRUE)], # Adds colour palette to Social Risk Index
     axes=F)
plot(school1Point, add = TRUE, pch = 15, col = "blue")
plot(roadsBound, add = TRUE, col = "gray60")
plot(schoolBound, add = TRUE, col = schoolBound@data$COLOUR)
person GregRousell    schedule 02.09.2015