修复损坏的shapefile?


10

我有一个在ArcGIS Desktop 9.3中使用的shapefile某种程度上被破坏了,并且出现错误“形状数与表记录数不匹配”。我想要的是恢复此shapefile,因为它具有许多其他版本的文件所没有的编辑功能。

之前我使用ogr2gui从此错误中恢复了,但是该工具现在崩溃了。我什至尝试了命令行版本ogr2ogr,但仍然没有运气。ArcScripts网站上的Shapefile Repair Tool这个脚本也没有帮助。

有任何想法吗?(除了我停止使用shapefile)


这是ogr2ogr的输出(基于答案中的建议): 在此处输入图片说明


1
由于它的属性表(.dbf文件)被单独编辑,几乎肯定会损坏,从而在形状记录和属性记录之间造成不一致。即使您设法“修复” shapefile,也请务必仔细检查以确保正确的属性与形状相关联!
ub

错误消息揭示了很多。这些点和部分的数量表示2 ^ 30到2 ^ 32(无符号)之间的值,强烈暗示.shp文件本身中记录头的大量物理覆盖(因为它们永远不会是有效的计数)。因此,这些记录中的数据也很有可能也被覆盖。简而言之,形状数据可能至少在.shp文件的许多部分中不再存在,因此无法通过软件恢复。从备份还原并从那里开始。
ub

1
@whuber。谢谢。当然可以。从此损坏的shapefile中恢复的每个文件包含的记录比我的备份少。此后,我恢复了备份。
埃里克(Erick)

Brad Nesoms建议shapecheck.exe,第一次修复了我损坏的形状文件!很棒的工具

Answers:


8

一个丢失了损坏的功能的选项可能是使用ogr2​​ogr,使用-skipfailures选项将您的shapefile转换为另一个shapefile:

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

有关更多详细信息,请参阅PerryGeo博客中的以下博客文章:

http://www.perrygeo.net/wordpress/?p=132


运行命令(包括您遗漏的-f“ ESRI Shapefile”)。在文件上显示了错误报告。[无法在此处发布屏幕截图]。我猜这与罪魁祸首的形状有关。格式为:错误1:.shp文件损坏:形状2352,nPoints = 7,nEntitySize = 88。
Erick

您可以安全地删除-f选项:shapefile是默认输出格式。如果您可以附加shapefile的副本,这将是一件有趣的事情
capooti 2011年

供研究用的文件:我很乐意转发该文件,但不幸的是该数据受版权保护。不管怎么说,还是要谢谢你。
Erick

@Erick,如果您将屏幕截图放在imgur.com上,我可以在此处发布(如果仍然相关)
djq 2011年

5

我用这个。它一直为我解决了这个问题。

shapecheck.exe


我同意Brad的观点,ShapeCheck可以正常工作-独立修复shapefile-必要时截断。
Mapperz

@Mapperz。运行该工具,并截短其后。此后确实可以打开shapefile!但是现在它包含的记录少于我必须还原到的备份。如果我没有备份,将进行这样的恢复。(万一有可能的存档工具)谢谢。
Erick


4

Esri官方解答提供了许多技巧,但可以将您指向shp修复实用程序,它使我免于被开除几次。

我听说过但又不能说我尝试过的其他产品:


谢谢西蒙。但是我的主要难题是我无法为初学者打开文件,因此大多数建议都行不通。刚刚尝试了您建议的技巧一中的所有内容。没事。
Erick

2

好的,这是添加到上面大量答案中的另一个技巧。

这有点蛮力,在大多数情况下它会有所帮助,有时却无济于事,虽然这可能只是解决问题的第一步(而不是针对自身的解决方案,通常不是这样),但它可以有所帮助带您到可以打开shapefile的位置。在大多数情况下,shapefile打开后,您仍需要在ArcMap中进行更多的手动修复(损坏的功能,缺少的属性,未对齐的属性等)。

  1. 将shapefile复制到一个新的空文件夹中。仅随身携带SHP,SHX和DBF。保留所有其他文件,是的,包括prj。

  2. (Windows):右键单击SHX文件,然后选择“属性”以打开文件属性。

  3. 在“常规”选项卡上,查看此SHX文件的精确文件大小,直至字节。查看“大小”属性,而不是“磁盘大小”属性。

  4. 将该文件的大小(以字节为单位)减去100字节(标头)。在其余部分中,除以8(每个“单词”的大小)。结果为您提供了shapefile的SHP部分中的多个形状特征。

  5. 在某些软件中打开DBF,该软件将允许您编辑DBF并将其另存为DBF。添加或删除记录,以使DBF中的行与您在步骤4中计算出的SHP中的形状特征数匹配。(如果您使用的是旧版Excel,请记住,行#1包含字段名称,因此,如果要进行1000条记录,那么自第一个数据行起,该表最终将是工作表中的1,001行是第2行。)如果要使行数匹配,则需要删除行,并且这些行中包含真实数据,则需要保留这些行,只需将其保存到新的DBF中,然后您可以将其读回稍后,一旦您到达ArcMap中所有内容再次打开的地步。

  6. 使用上述步骤将SHP中的要素数量与DBF中的行数量进行匹配后,尝试再次在ArcMap中打开shapefile。


1

您可以尝试使用ogrinfo来计算.shp文件中形状的数量(不确定是否可以使用):

 ogrinfo -sql 'select count(*) from myshp' myshp.shp

如果您能够计算形状的数量,则可以在开放办公室中打开.dbf文件以完成它(或删除多余的行)


感谢您的建议,但我并不是GDAL工具的专业人士。或“非常”精通SQL。尝试使用提供的参数运行工具,但出现与工具相关的错误。“无法打开数据源计数(*)”。
埃里克(Erick)

您可以复制/粘贴命令行吗?
simo

我可以但仍然是同样的错误。但是@capooti的解决方案似乎已经产生了一些结果/确定了罪魁祸首的形状。
Erick

1

我很幸运地删除了索引文件(.idx和.shx),这些文件在重新连接时会重新生成。


尝试了这个没有成功。感谢您的建议。
Erick

0

如果shapefile是点图层并且具有XY字段值,则可以运行“使XY事件图层”工具从损坏的shapefile dbf中制作另一个图层。


它是道路(折线)文件。但是在记分方案时请记住您的提示。谢谢。
艾瑞克(Erick)
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.