如何避免在编辑过程中创建损坏的Shapefile?


15

我有一位GIS技术人员以shapefile格式数字化了QGIS中的某些行。我不知道他是怎么做的(他也不是),但是不知何故,shapefile损坏了。它正在创建随机线,或者他创建的某些线会消失。我进入ArcCatalogue,看看它在ArcGIS中的外观,这就是我所看到的:

在此处输入图片说明

注意问号图标,我应该在其中看到shapefile的“线”图标。显然,ArcCatalogue无法读取此文件。另外,似乎已创建第二个dbf文件,并在其末尾附加了“ _packed”。当我使用Windows资源管理器查看shapefile时,我发现shapefile'M3_PRE_SMU_lines_10Apr13_SMC.dbf'已经有一个.dbf,所以我不知道这个_packed shapefile的来源,我似乎也找不到在线内容说话。

我试图将此文件添加到ArcMap中,并收到以下错误:

在此处输入图片说明

该错误是不言自明的...形状的数量与记录的数量不匹配。我只是不知道为什么会这样。在线上似乎没有任何东西可以解释QGIS中这种情况的发生,但是我确实看到了一些修复工具。我实际上是通过打开QGIS,添加图层,然后右键单击图层并“另存为”另一个shapefile来修复此问题的。因此,我想出了一个解决方法,但是我希望找到一个解决方案,从一开始就可以防止这种情况的发生。谢谢,迈克


1
我已经使用QGIS多年了,之前从未见过此问题。另一个.dbf文件的“神奇”外观表明Shapefile已被QGIS外部篡改。如果您只能使用QGIS重现该错误,请提交错误报告。那将是非常重要的!
昏暗

我一直在尝试复制问题,但是没有运气。我注意到的一件事是,与ArcGIS不同,在QGIS中进行编辑时,我没有收到模式锁定消息(即,如果有人在shapefile上具有模式锁定,而您开始编辑该文件,则在保存时,ArcGIS将抛出错误编辑(QGIS不会)我在想,当您保存被模式锁定的shapefile时,它会保存一些奇怪的信息。我不是100%确信这是原因,但有一点值得注意。
Mike

编辑shapefile时也出现了此错误。我的工作只是在ArcMap中进行编辑。显然,这不是一个真正的解决方案-但是-遇到这种错误的人并不孤单。
凯文(Kevin)

您是否尝试将..._ SMC.dbf文件重命名为..._ SMC.dbf.backup,并将..._ SMC_packed.dbf重命名为..._ SMC.dbf?
Matthias Kuhn

2
您好,Dufur遇到同样的问题。仅在q gis环境中创建的文件。当我编辑形状并最终保存并停止编辑时,它会发生,因此线条消失了,属性表似乎没有任何数据。如果尝试再次在qgis上加载形状,则看起来为空。在文件夹中,文件es。mario.shx已成为mario_packed.shp。我发现删除名称中的打包单词(返回mario.shx),现在已加载形状,并且似乎可以正常工作。多久?不知道我为此而发疯
user27144 2014年

Answers:


16

说明

OGR(GDAL的一部分)是QGIS用于访问shapefile的库。OGR删除功能时,它不会立即删除它们,而只是将功能标记为已删除。有时,将执行名为repack的命令,该命令将创建一个带有后缀_repack的新文件,并将所有未标记为已删除的功能复制到该新文件中。完成后,将原始的.dbf替换为_repack.dbf。然后,它对shapefile执行相同的操作:创建一个新文件(_packed.shp),复制所有未删除的功能,并最终替换原始的.shp。

似乎在此过程中的某处发生了某些故障(可能是崩溃?)。

在此过程中,功能部件ID会发生变化,因此,我想您拥有的shp(几何形状)和dbf(属性表)会对相同的功能部件使用不同的功能部件ID,这会导致您遇到奇怪的行为。看来,两个文件之一仍包含(部分)已删除的功能,而另一个则不包含。

如何处理

更新,2016年11月: GDAL 2.2带有内置功能,可在文件写入磁盘时自动调用重新打包。因此,在执行其他操作之前:请检查有关对话框的QGIS中的GDAL版本,并将您的GDAL(通常作为QGIS的一部分提供)更新为最新版本。

除了进行定期备份,以免丢失更多的数据之外,您可能无法做很多事情(无论如何,对吗?😉)。并且,如果您找到一种重现此方法的方法(最好是使用示例数据集),请创建一个错误报告

如果再次遇到此问题,也可以尝试在shapefile上创建空间索引。在此过程中,QGIS将再次在shapefile上调用repack,并可能“修复” shp / dbf。但这只是未经证实的猜测。

如@rhm所提到的以及在注释中,它也可能有助于{xyz} _packed。{ext}文件重命名为{xyz}。{ext}。如果打包文件已经被完全写入,而只是重命名失败,那么手动执行此步骤绝对有效。但是,如果尚未完全写入_packed文件,则可能缺少部分功能的信息。因此,在尝试此操作之前,请为所有涉及的文件制作备份副本

有关何时重新打包的背景信息

QGIS 2.0和2.8之间无论何时卸载该层,都将调用重新打包(退出QGIS,加载其他项目...)。如果已删除特征或更改了几何图形,则存在带有标记为已删除记录的.shp和.dbf文件。

从QGIS 2.10开始,只要在有可能将已删除标志添加到记录的操作后保存层,就会调用repack。因此,文件现在应始终处于健全状态,以供其他应用程序处理。


1

这在QGIS中发生了。我设法通过从文件名中删除'_packed'来解决此问题,就像有人在上面的评论部分中建议的那样。


1

也许这是损坏的.shx索引文件的另一个问题。几何类型应存储在.shp和.shx标头中。如果它们不匹配,则软件将生成错误。

看起来QGIS对损坏的索引文件不是很严格,可以使用进行重新创建Save As...,而ARCGIS坚持使用正确的索引文件,并为可以通过功能部件的正确部分找到的功能创建打包的dbf(属性表)。索引文件,或者可能不使用索引。


1

重新出现已删除特征和/或在QGIS中已删除特征的shapefile的异常行为是一个已知错误,请参阅此错误报告11007和此相关问题- 删除的多边形似乎恢复为旧版本。以及ArcGIS在使用此类shapefile时遇到麻烦,将它们保存在QGIS中作为MapInfo TAB文件时,它们会导致MapInfo RouteFinder插件崩溃,除非在加载RouteFinder之前先将表打包在MapInfo中。运行通用转换器在MapInfo中转换这些损坏的shapefile失败。

如您所见,可以通过在QGIS中执行“另存为”来解决问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.