Запись нескольких слоев в 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 команда shell, которая делает свое дело (hat tip mdsumner ), которую я могу обернуть в функцию R. Тем не менее, было бы здорово , если writeOGR () и / или st_write () в sfпакете было это встраивается. Я считаю , что это зависит от GDAL - х layer_options, но не кажется , что будет вариант конкатенирующего типа для GPKG в GDAL .


Я мог бы написать простую функцию-обертку для, st_write()но встроенную поддержку sfили rgdalбудет лучше.

eivindhammers
источник
Не возможно, афаик. Попробуйте с sf, который я тоже буду рад изучить - это легче исправить, чем rgdal, с одной стороны
mdsumner
1
@mdsumner st_write () в sf дает тот же результат. Я думаю, что отсутствие опции добавления в опциях создания слоя GDAL является источником проблемы для writeOGR () и st_write ().
Эйвиндхаммерс

Ответы:

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
jsta
источник