【问题标题】:Add a shaded layer to a map in R在 R 中向地图添加阴影层
【发布时间】:2015-08-28 15:08:55
【问题描述】:

我正在为一个学区内的各个学校创建地图,并希望在学校边界周围创建一个阴影区域。我可以使用 QGIS 手动完成,但是希望能够在 R 中生成类似的东西。我可以在社区级别映射一些人口统计变量,添加学校位置和边界。有一个循环会自动为每所学校创建一个新地图并将其插入到 knitr 报告中。

我想不通的是如何创建一个图层来遮蔽边界外的区域。这是我使用 R 的地图:

但是想让它看起来更像这样:

我已经尝试过 GISTools 中的 add.masking 函数,但是它基于点的内核密度,而不是多边形。

我的代码看起来像这样(抱歉,因为它们是位于安全驱动器上的形状文件,所以无法重现。

# 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)

【问题讨论】:

  • 如果没有 shapefile,将很难向您展示这一点,但请尝试跟随 stackoverflow.com/questions/29624895/… 为相关区域切出一个洞,然后使用 gUnaryUnion 之类的东西来溶解多边形被着色。

标签: r gis maptools


【解决方案1】:

我已经找到了一种方法,将颜色代码添加到这个问题的数据文件中:R - stuck with plot() - Colouring shapefile polygons based upon a slot value

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)

【讨论】:

    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2015-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多