RでwriteOGR()を使用して複数のレイヤーをGeoPackageに書き込みますか?


11

Rの同じGeoPackageに複数のレイヤーを書き込もうとしていますが、エラーが発生しますCreation of output file failed。RGDALを使用した.gpkgファイルの読み取りと書き込みのドキュメントを検索してみました。たとえば、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 シェルコマンド(ヒントmdsumner)があるようですが、これをR関数でラップできます。ただし、sfパッケージのwriteOGR()やst_write()にこれが組み込まれているとlayer_options便利です。GDALに依存していると思いますが、GDALの GPKGには追加タイプのオプションがないようです。


私は単純なラッパー関数を作成することもできますst_write()が、ネイティブサポートをsf使用したrgdal方がよいでしょう。


可能性のあるafaik。sfで試してみてください。これも同様に探索できます-rgdalよりも簡単に修正できます
mdsumner

1
sfの@mdsumner st_write()でも同じ結果が得られます。GDALのレイヤー作成オプションに追加オプションがないことが、writeOGR()とst_write()の両方の問題の原因だと思います。
eivindhammers 2017年

回答:


9

これを行うには、次の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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.