Scrivere più livelli su GeoPackage usando writeOGR () in R?


11

Sto cercando di scrivere più livelli nello stesso GeoPackage in R, ma ricevo un errore Creation of output file failed. Ho provato a cercare documentazione per leggere e scrivere su file .gpkg con RGDAL, ad esempio per capire se writeOGR()supporta effettivamente più livelli, con scarso successo. È anche possibile, in tal caso, come farlo? Esempio di lavoro minimo:

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)

Apparentemente esiste un ogr2ogr comando shell che esegue il trucco (hat tip mdsumner ), che posso avvolgere in una funzione R. Tuttavia, sarebbe pulito se writeOGR () e / o st_write () nel sfpacchetto includessero questo. Credo che dipenda da GDAL layer_options, ma non sembra esserci un'opzione di tipo append per GPKG in GDAL .


Potrei scrivere una semplice funzione wrapper per st_write()ma supporto nativo sfo rgdalsarebbe meglio.


Non possibile afaik. Prova con sf, che sarò felice di esplorare anche - è più facile da risolvere di rgdal per una cosa
mdsumner

1
@mdsumner st_write () in sf dà lo stesso risultato. Penso che la mancanza di un'opzione di aggiunta nelle opzioni di creazione del livello di GDAL sia la fonte del problema sia per writeOGR () che per st_write ().
eivindhammers,

Risposte:


10

Puoi farlo usando la appendbandiera su 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.