使用sf
R 中的包,我正在读取存储在地理包中的一系列层,过滤它们,然后将它们重新保存为新的地理包。
当我设置我的脚本时,我测试了其中一个层并且它工作正常,但是当在层列表上运行相同的代码时,它失败了,因为测试层已经存在。的文档st_write
同时具有附加和覆盖参数,但设置为替换而不是附加(append = FALSE
或overwrite = TRUE
)会导致它失败并出现错误
st_write.sf (., dsn = gpkg_out, layer = layername, overwrite = TRUE) 中的错误:无法识别的参数覆盖
st_write.sf(., dsn = gpkg_out, layer = layername, append = FALSE) 中的错误:无法识别的参数追加
我更新了我的 sf 包副本,但它仍然失败并出现同样的错误。我通过删除文件系统中的文件找到了解决方法,但是如果我只是尝试替换一层,这将是有问题的。
有谁知道这是否是一个已知问题或一种使其替换而不是附加图层的方法?
我的代码:
library(sf)
library(tidyverse)
gpkg <- "D:/GIS/Sugar/SugarEC_hydropts.gpkg" # name of existing geopackage
layers = st_layers(gpkg)$name
layers
# [1] "ec1520" "ec17200" "ec224" "ec2500"
# "ec271" "ec4680" "ec488" "ec5540" "ec8140" "ec9860"
gpkg_out <- "D:/GIS/Sugar/SugarEC_hydropts_wet.gpkg"
# the following works, but appends to layer if it exists
read_write <- function (layername) {
st_read(gpkg, layer = layername ) %>%
filter(Water_Elev_ft >0) %>%
st_write(dsn = gpkg_out, layer = layername) # Appends
#
# This following versions fails though:
# st_write(dsn = gpkg_out, layer = layername, overwrite = TRUE)
# or
# st_write(dsn = gpkg_out, layer = layername, append = FALSE)
invisible()
}
lapply(layers, read_write)