【问题标题】:Overlay shapefile over Raster in Multiple plots在多个图中将 shapefile 覆盖在栅格上
【发布时间】:2020-04-27 19:47:23
【问题描述】:

我正在尝试使用以下代码将南亚的 shapefile 覆盖在多个光栅图之上:“a”是一个多层光栅文件。这是数据的链接(917KB 大小)Test_Data

ras <- list.files("/filepath/", pattern = "\\.tif$", full=TRUE)
s <- stack(ras)
south_asia  <- readOGR('/filepath/south_asia.shp')  #to import shapefile
cropped <- crop(x = s, y = extent(south_asia))          #crop raster
plot(cropped)
plot(south_asia, add=TRUE)

这段代码给了我一个 shapefile 和多个光栅图。如何将 shapefile 覆盖在栅格之上? 任何帮助将不胜感激。 PS:他们在同一个CRS 谢谢

【问题讨论】:

  • 您可以发布您的数据吗?否则没有人可以复制您的案例并帮助您。
  • 已上传数据。请检查文件
  • 我认为this question 对你有帮助。
  • 感谢您的帮助

标签: r plot gis raster shapefile


【解决方案1】:

首先,请尝试给出一个可重现的示例,而不是外部下载文件的链接!

如果您手动构建绘图(例如,使用 parbase 绘图),您可以获得所需的行为:

library(raster)

## testdata

# shapefile
shp <- getData(country='IND', level=1)

# raster 
r <- getData('alt', country='IND', mask=TRUE)

# create 4 layer rasterstack
rs <- stack(r,r,r,r)

## finally plot

# 2 rows, 2 cols
par(mfrow=c(2,2))


# loop layers
for (ii in 1:nlayers(rs)){

  plot(subset(rs,ii), main=names(rs)[ii])
  plot(shp, add=T)


}

编辑:

在循环中使用plot(subset(rs,ii), main=names(rs)[ii]) 来绘制相应的层。

结果:

【讨论】:

  • 虽然你的结果是我想要的。我仍然得到与上面相同的数字(我的)。请在我编辑代码时尝试可重现的示例。
  • 我的方法的关键是使用par(mfrow=c(2,2)) 来设置绘图并独立地可视化每一层,而不是一次绘制整个栅格堆栈。现在我看到我已经包含了一个错误,因为我在循环中一遍又一遍地绘制相同的栅格 - 而在每次迭代中它应该是层 ii。我会更新
  • plot(subset(rs,ii), main=names(rs)[ii]) 正在做这项工作,但我在屏幕上得到了一个情节。最后一个图是屏幕上的最后一层。我想要一个图中的所有图而不是单个图。请更新
  • @Dipu 你之前跑过par(mfrow=c(2,2)) 吗?
  • 使用基础绘图开始变得有点麻烦。你可以做到,但也许你想看看rasterVis
【解决方案2】:

我建议在光栅堆栈/砖的绘图选项中使用参数 addfun 例如:

# Function to add shapefile "shp_file" on each raster plot
add_shp=function(){plot(shp_file, bg="transparent", add=TRUE)}

#Plot selected raster of a raster stack, rs
plot(rs[[c(1:5)]],col=tim.colors(5),addfun=add_shp)

这会将 shapefile shp_file 添加到 rasterstack rs 中的 5 个绘图中的每一个。

【讨论】:

    猜你喜欢
    • 2017-05-05
    • 1970-01-01
    • 2018-09-15
    • 2014-04-06
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多