Запис декількох шарів в GeoPackage за допомогою writeOGR () в R?


11

Я намагаюся написати кілька шарів до того ж GeoPackage в R, але я отримую повідомлення про помилку, Creation of output file failed. Я намагався шукати документацію для читання та запису у .gpkg файли за допомогою RGDAL, наприклад, щоб зрозуміти, чи writeOGR()підтримує насправді декілька шарів, з невеликим успіхом. Чи можливо це навіть, якщо так, як це зробити? Мінімальний робочий приклад:

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)

Мабуть, є ogr2ogr команда оболонки, яка виконує трюк (hat tip mdsumner ), яку я можу вкласти в функцію R. Однак було б акуратно, якби в sfпакеті було вбудовано writeOGR () та / або st_write () . Я вважаю, що це залежить від GDAL layer_options, але, здається, не існує опції типу GPKG для додавання в GDAL .


Я міг би написати просту функцію обгортки для, st_write()але рідної підтримки в sfабо rgdalкраще.


Неможливо afaik. Спробуйте з sf, який я також буду радий вивчити - це легше виправити, ніж rgdal за одне
mdsumner

1
@mdsumner st_write () в sf дає такий же результат. Я думаю, що відсутність опції додавання у параметрах створення шарів GDAL є джерелом проблеми як для writeOGR (), так і для st_write ().
eivindhammers

Відповіді:


10

Це можна зробити, використовуючи appendпрапор на 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.