Используя пакет 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, но он все еще не удался с той же ошибкой. Я нашел обходной путь, удалив файл в моей файловой системе, но это было бы проблематично c, если бы я просто пытался заменить один слой.
Кто-нибудь знает, является ли это известной проблемой или способом заставить ее заменить, а не добавить слой?
мой код:
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)