相关疑难解决方法(0)

将栅格添加到ggmap基本地图:在ggplot2中设置alpha(透明度)并将颜色填充到inset_raster()

我想在ggplot2中使用覆盖GoogleMaps基本地图的栅格绘制地图.因此,我用get_map()insert_raster()这样的:

library(ggplot2)
library(ggmap)

bm <- ggmap(get_map(location = "Bangkok", maptype = "hybrid"))

bm + inset_raster(as.raster(r), xmin = r@extent[1], xmax = r@extent[2],
                  ymin = r@extent[3], ymax = r@extent[4])
Run Code Online (Sandbox Code Playgroud)

是否有可能设置alpha和更改fill颜色?

结果如下: 在此输入图像描述

plot r geospatial ggplot2 ggmap

9
推荐指数
1
解决办法
7502
查看次数

如何加速从栅格中提取缓冲区中土地覆盖类型的比例?

我想在10万个类似SpatialLines对象的10 km缓冲区中提取空间数据,并计算缓冲线周围每种土地覆盖类型的比例.在第一次,我使用该功能crop来裁剪我的栅格.然后,我使用函数extract(包栅格)来计算10种土地覆盖类型的比例.这是我的代码:

lapply(1:nrow(tab_lines), FUN=function(k){
Run Code Online (Sandbox Code Playgroud)

第一步:建立一条10公里左右的缓冲区

buf_line <- gBuffer(seg_line[k], width=10000) ## seg_line =  Lines objects
Run Code Online (Sandbox Code Playgroud)

第二步:从栅格中提取缓冲区中的土地覆盖类型

ha <-extract(x=data_raster,y=buf_line)
Run Code Online (Sandbox Code Playgroud)

第三步:计算10种土地覆盖类型的比例

每种土地覆盖类型的比例必须是列(一列=一个土地覆盖类型)

    ha_1 <-length(ha[[1]][ha[[1]]==1])/length(ha[[1]])
    ha_2 <-length(ha[[1]][ha[[1]]==2])/length(ha[[1]])
    ha_3 <-length(ha[[1]][ha[[1]]==3])/length(ha[[1]])
    ha_4 <-length(ha[[1]][ha[[1]]==4])/length(ha[[1]])
    ha_5 <-length(ha[[1]][ha[[1]]==5])/length(ha[[1]])
    ha_6 <-length(ha[[1]][ha[[1]]==6])/length(ha[[1]])
    ha_7 <-length(ha[[1]][ha[[1]]==7])/length(ha[[1]])
    ha_8 <-length(ha[[1]][ha[[1]]==8])/length(ha[[1]])
    ha_9 <-length(ha[[1]][ha[[1]]==9])/length(ha[[1]])
    ha_10 <-length(ha[[1]][ha[[1]]==10])/length(ha[[1]])

     return(cbind(ha_1, ha_2, ha_3, ha_4, ha_5, ha_6, ha_7, ha_8, ha_9, ha_10))  
    })
Run Code Online (Sandbox Code Playgroud)

如何加快30 000个空间线的处理时间?R中是否还有其他软件包可以为这种类型的提取提供更快的处理?

performance r spatial data-extraction r-raster

6
推荐指数
1
解决办法
674
查看次数

如何使用Lapply在R中批量处理geoTIFF

我有一些大型的geoTIFF,现在我想将它们转换为ASCII文件,在进行一些搜索之后,我编写了以下代码:

library(raster)

f <- list.files("inputFolder", pattern = "*.tif", full.names = TRUE)
r <- lapply(f, raster)
a <- lapply(r, writeRaster, filename = "output", format = "ascii")
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是,如何根据原始名称分别命名输出文件?

我试过了:

a <- lapply(r, writeRaster, filename = "outputFolder" + f, format = "ascii")
Run Code Online (Sandbox Code Playgroud)

但是我收到错误:

二进制运算符的非数字参数

然后我尝试了:

a <- lapply(r, writeRaster, filename = paste0(f, ".asc"), format = "ascii")
Run Code Online (Sandbox Code Playgroud)

但是我收到了:

file(filename,“ w”)中的错误:无效的'description'参数另外:警告消息:1:如果if(filename ==“”){:条件的长度> 1,则仅使用第一个元素2 :in if(!file.exists(dirname(filename))){:条件的长度> 1并且仅使用第一个元素3:In if(toupper(x @ file @ name)== toupper(filename) ){:条件的长度> 1,仅第一个元素将被使用4:In if(trim(filename)==“”){:条件的长度> 1,仅第一个元素将被使用5:In if(!file.exists(dirname(filename))){:条件的长度> 1,仅第一个元素将被使用6:in if(filename ==“”){:条件的长度> 1,且仅第一个元素将被使用7:在if(!overwrite&file.exists(filename)){中:条件的长度> 1,并且仅使用第一个元素

r lapply r-raster

2
推荐指数
1
解决办法
556
查看次数