R'de writeOGR () kullanarak GeoPackage'a birden çok katman yazma?


12

Aynı GeoPackage R birden çok katman yazmaya çalışıyorum, ama bir hata alıyorum Creation of output file failed. RGDAL ile .gpkg dosyalarına okuma ve yazma belgelerini aramaya çalıştım, örneğin, writeOGR()aslında çok sayıda katmanı destekleyip desteklemediğini anlamak için . Bu mümkün mü, eğer öyleyse, nasıl yapılır? Minimum çalışma örneği:

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)

Görünüşe göre , bir R fonksiyonuna sarılabileceğim hile yapan bir ogr2ogr kabuk komutu var (şapka ucu mdsumner ). Ancak, paketteki writeOGR () ve / veya st_write () sfbu yerleşik olsaydı temiz olurdu . Ben GDAL's bağlıdır layer_options, ancak GDAL GPKG için bir ekleme türü seçeneği gibi görünmüyor .


Basit bir sarma işlevi yazabilirdim st_write()ama yerel destek sfya rgdalda daha iyi olurdu.


Afaik mümkün değil. Ben de keşfetmek için mutlu olacak sf ile deneyin - bir şey için rgdal daha düzeltmek daha kolay
mdsumner

1
sf içindeki @mdsumner st_write () aynı sonucu verir. GDAL katman oluşturma seçeneklerinde bir ekleme seçeneği eksikliği hem writeOGR () hem de st_write () için sorunun kaynağı olduğunu düşünüyorum.
eivindhammers

Yanıtlar:


10

Bunu, appendüzerindeki bayrağı kullanarak yapabilirsiniz 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.