Viết nhiều lớp vào GeoPackage bằng writeOGR () trong R?


11

Tôi đang cố gắng viết nhiều lớp vào cùng một GeoPackage trong R, nhưng tôi gặp lỗi Creation of output file failed. Tôi đã cố gắng tìm kiếm tài liệu đọc và ghi vào các tệp .gpkg bằng RGDAL, ví dụ để tìm hiểu xem có writeOGR()thực sự hỗ trợ nhiều lớp hay không, với rất ít thành công. Điều này thậm chí có thể, nếu vậy, làm thế nào để làm điều đó? Ví dụ làm việc tối thiểu:

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)

Rõ ràng có một ogr2ogr lệnh shell thực hiện thủ thuật (hat tip mdsumner ), mà tôi có thể gói trong hàm R. Tuy nhiên, sẽ rất gọn gàng nếu writeOGR () và / hoặc st_write () trong sfgói được tích hợp sẵn. Tôi cho rằng nó phụ thuộc vào GDAL layer_options, nhưng dường như không có tùy chọn loại phụ cho GPKG trong GDAL .


Tôi có thể viết một hàm bao bọc đơn giản cho st_write()nhưng hỗ trợ riêng trong sfhoặc rgdalsẽ tốt hơn.


Không thể afaik. Hãy thử với sf, điều mà tôi cũng sẽ rất vui khi khám phá - nó dễ sửa hơn rgdal vì một điều
mdsumner

1
@mdsumner st_write () trong sf cho kết quả tương tự. Tôi nghĩ rằng việc thiếu một tùy chọn chắp thêm trong các tùy chọn tạo lớp của GDAL là nguồn gốc của vấn đề cho cả writeOGR () và st_write ().
eivindhammer

Câu trả lời:


9

Bạn có thể làm điều này bằng cách sử dụng appendcờ trên 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.