Gravando várias camadas no GeoPackage usando writeOGR () no R?

11

Estou tentando gravar várias camadas no mesmo GeoPackage no R, mas recebo um erro Creation of output file failed,. Eu tentei procurar documentação de leitura e gravação em arquivos .gpkg com RGDAL, por exemplo, para descobrir se writeOGR()realmente suporta várias camadas, com pouco sucesso. Isso é possível, se sim, como fazê-lo? Exemplo de trabalho mínimo:

library(sp)
library(maptools)
library(rgdal)

data(wrld_simpl)

norway <- wrld_simpl[wrld_simpl$NAME == "Norway", ]
sweden <- wrld_simpl[wrld_simpl$NAME == "Sweden", ]

file <- tempfile("scandinavia", fileext = c(".gpkg"))

writeOGR(norway, dsn = file, layer = "norway", driver = "GPKG")
writeOGR(sweden, dsn = file, layer = "sweden", driver = "GPKG")

ogrListLayers(file)

Aparentemente, existe um ogr2ogr comando shell que executa o truque (hat tip mdsumner ), que eu posso agrupar em uma função R. No entanto, seria interessante se writeOGR () e / ou st_write () no sfpacote tivessem isso embutido. Acho que depende dos GDALs layer_options, mas não parece haver uma opção do tipo append para GPKG no GDAL .


Eu poderia escrever uma função de wrapper simples para st_write()suporte nativo sfou rgdalseria melhor.

eivindhammers
fonte
Não é possível afaik. Tente com o sf, que também ficarei feliz em explorar - é mais fácil corrigir do que rgdal, por um lado
mdsumner
11
@mdsumner st_write () em sf fornece o mesmo resultado. Eu acho que a falta de uma opção de acréscimo nas opções de criação de camadas do GDAL é a fonte do problema para writeOGR () e st_write ().
precisa saber é o seguinte

Respostas:

9

Você pode fazer isso usando a appendbandeira em sf::st_write():

library(sf)

nc     <- st_read(system.file("shape/nc.shp", package="sf"))
storms <- st_read(system.file("shape/storms_xyz.shp", package="sf"))

st_write(nc,     "nc.gpkg", "nc")
st_write(storms, "nc.gpkg", "storms", append = TRUE)

st_layers("nc.gpkg")
## Driver: GPKG 
## Available layers:
##   layer_name  geometry_type features fields
## 1         nc  Multi Polygon      100     14
## 2     storms 3D Line String       71      0
jsta
fonte