- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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_columns
和 gpkg_ogr_contents
中的行,但似乎没有什么与那些没有更新的东西一起努力。
关于r - 从 GeoPackage 中删除图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59722900/
我正在尝试使用 sf 包从 GeoPackage 文件中删除矢量图层。 “删除”是指永久删除而不是覆盖或更新。我知道 delete_layer 选项,但据我了解,这仅用于在用同名层替换之前删除层。 不
我想使用geopandas读取geopackage文件,它可以读取第一层或带有layer=''参数的特定层。但它如何读取所有层呢?可能是这样的: all_layers = gp.read_xxxx('
我正在使用 postgis 处理 postgresql 数据库。我是从包含地理信息的数据库生成 csv 文件,但我现在需要生成 geopackage 文件。我对此进行了搜索,但没有发现任何工具可以直接
使用 sf在 R 中打包,我正在读取存储在地理包中的一系列图层,过滤它们,然后将它们重新保存为新的地理包。 当我设置我的脚本时,我测试了其中一个层并且它工作正常,但是当在层列表上运行相同的代码时,它失
我正在 Azure 中将 Kartoza Geoserver v.2.18.0(Geoserver 作为 Docker 镜像)作为应用服务运行。路径映射设置为文件存储并且工作正常。 Kartoza G
我是一名优秀的程序员,十分优秀!