Menulis banyak layer ke GeoPackage menggunakan writeOGR () di R?

11

Saya mencoba untuk menulis beberapa layer ke GeoPackage yang sama di R, tapi saya mendapatkan kesalahan Creation of output file failed,. Saya telah mencoba mencari dokumentasi membaca dan menulis ke file .gpkg dengan RGDAL, misalnya untuk mengetahui apakah writeOGR()sebenarnya mendukung banyak lapisan, dengan sedikit keberhasilan. Apakah ini bahkan mungkin, jika demikian, bagaimana cara melakukannya? Contoh kerja minimal:

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)

Tampaknya ada ogr2ogr perintah shell yang melakukan trik (hat tip mdsumner ), yang dapat saya bungkus dalam fungsi R. Namun, akan lebih rapi jika writeOGR () dan / atau st_write () dalam sfpaket memiliki bawaan ini. Saya rasa itu tergantung pada GDAL layer_options, tetapi sepertinya tidak ada opsi append-type untuk GPKG di GDAL .


Saya bisa menulis fungsi pembungkus sederhana untuk st_write()tetapi dukungan asli sfatau rgdalakan lebih baik.

eivindhammers
sumber
Tidak mungkin afaik. Coba dengan sf, yang saya akan senang mengeksplorasi juga - lebih mudah untuk memperbaiki daripada rgdal untuk satu hal
mdsumner
1
@mdsumner st_write () di sf memberikan hasil yang sama. Saya pikir kurangnya opsi append dalam opsi pembuatan layer GDAL adalah sumber masalah untuk writeOGR () dan st_write ().
eivindhammers

Jawaban:

10

Anda dapat melakukan ini menggunakan appendbendera di 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
sumber