gpt4 book ai didi

r - 从 GeoPackage 中删除图层

转载 作者:行者123 更新时间:2023-12-05 01:38:32 27 4
gpt4 key购买 nike

我正在尝试使用 sf 包从 GeoPackage 文件中删除矢量图层。 “删除”是指永久删除而不是覆盖或更新。我知道 delete_layer 选项,但据我了解,这仅用于在用同名层替换之前删除层。

不幸的是,我使用非标准编码编写了一个名称为 GeoPackage 的层,这有效地使整个 gpkg 文件在 QGIS 中不可读。因此,我试图找到一种解决方案,通过 R 将其删除。

最佳答案

geopackage 也是一个 SQLite 数据库,因此您可以使用 RSQLite 数据库函数来删除表。

设置测试:

> d1 = st_as_sf(data.frame(x=runif(10),y=runif(10),z=1:10), coords=c("x","y"))
> d2 = st_as_sf(data.frame(x=runif(10),y=runif(10),z=1:10), coords=c("x","y"))
> d3 = st_as_sf(data.frame(x=runif(10),y=runif(10),z=1:10), coords=c("x","y"))

将这些写入 GPKG:

> st_write(d1,"deletes.gpkg","d1")
Writing layer `d1' to data source `deletes.gpkg' using driver `GPKG'
features: 10
fields: 1
geometry type: Point
> st_write(d2,"deletes.gpkg","d2",quiet=TRUE)
> st_write(d3,"deletes.gpkg","d3",quiet=TRUE)

现在要删除,使用 RSQLite 包(来自 CRAN),创建数据库连接:

library(RSQLite)
db = SQLite()
con = dbConnect(db,"./deletes.gpkg")

并删除表格:

dbRemoveTable(con, "d2")

有一个小问题 - 这会删除表格,但不会删除 GPKG 用来说明此包是空间表的元数据。因此,您使用 GDAL 工具会收到这样的警告:

$ ogrinfo -so -al deletes.gpkg 
ERROR 1: Table or view 'd2' does not exist
Warning 1: unable to read table definition for 'd2'

不过,QGIS 很高兴地正确读取了剩余的两层。我认为这可以在 R 中解决,方法是在 SQLite 模块旁边加载 Spatialite 模块扩展,或者手动删除元数据表 gpkg_geometry_columnsgpkg_ogr_contents 中的行,但似乎没有什么与那些没有更新的东西一起努力。

关于r - 从 GeoPackage 中删除图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59722900/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com