¿Escribir múltiples capas en GeoPackage usando writeOGR () en R?

11

Estoy intentando escribir varias capas a la misma GeoPackage en R, pero me da un error, Creation of output file failed. He intentado buscar documentación de lectura y escritura en archivos .gpkg con RGDAL, por ejemplo, para averiguar si writeOGR()realmente admite varias capas, con poco éxito. ¿Es esto posible, si es así, cómo hacerlo? Ejemplo de trabajo 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 hay un ogr2ogr comando de shell que hace el truco (hat tip mdsumner ), que puedo envolver en una función R. Sin embargo, sería bueno si writeOGR () y / o st_write () en el sfpaquete tuvieran esto incorporado. Creo que depende de GDAL layer_options, pero no parece haber una opción de tipo de agregado para GPKG en GDAL .


Podría escribir una función de contenedor simple para st_write()pero el soporte nativo en sfo rgdalsería mejor.

eivindhammers
fuente
No es posible afaik. Pruebe con sf, que también estaré encantado de explorar: es más fácil de arreglar que rgdal por una cosa
mdsumner el
1
@mdsumner st_write () en sf da el mismo resultado. Creo que la falta de una opción de agregar en las opciones de creación de capas de GDAL es la fuente del problema tanto para writeOGR () como para st_write ().
eivindhammers

Respuestas:

10

Puede hacer esto usando la appendbandera en 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
fuente