破損したシェープファイルを修正していますか?


10

ArcGIS Desktop 9.3で作業していたシェープファイルが何らかの理由で破損し、「シェイプの数がテーブルレコードの数と一致しません。」というエラーが発生します。このシェープファイルには、他のリビジョンのファイルにはない編集が多数含まれているため、このシェープファイルを復元する必要があります。

以前はogr2guiを使用してこのエラーから回復しましたが、ツールがクラッシュするだけです。コマンドラインバージョンのogr2ogrを試してみましたが、まだうまくいきません。このスクリプト、ArcScripts WebサイトのShapefile Repair Toolも役に立ちませんでした。

何か案は?(シェープファイルの使用をやめることを除いて)


以下はogr2ogrからの出力です(回答の提案に基づいています)。 ここに画像の説明を入力してください


1
属性テーブル(.dbfファイル)が個別に編集されていて、形状レコードと属性レコードの間に不整合が生じているため、ほぼ確実に破損しました。シェープファイルを "修正"できたとしても、正しい属性がシェイプに関連付けられていることを十分に注意深く確認してください。
whuber

エラーメッセージは多くを明らかにします。これらのポイントとパーツの数は、2 ^ 30と2 ^ 32(符号なし)の間の値を示し、.shpファイル自体のレコードヘッダーの物理的な上書きを強く示唆しています(これは有効なカウントではないため)。したがって、これらのレコードのデータも上書きされている可能性が高いです。つまり、少なくとも.shpファイルの多くの部分に形状データが存在していない可能性があるため、ソフトウェアで復元することはできません。バックアップから復元し、そこから開始します。
whuber

1
@whuber。ありがとう。確かにそうです。この破損したシェープファイルから復元された各ファイルには、バックアップよりもはるかに少ないレコードが含まれています。その後、バックアップに戻りました。
エリック

Brad Nesoms推奨事項shapecheck.exe、破損したシェイプファイルを初めて修正しました!優れたツール

回答:


8

破損した機能が失われた場合のオプションは、-skipfailuresオプションを指定して、ogr2ogrを使用してシェープファイルを別のシェープファイルに変換することです。

ogr2ogr -skipfailures fixed_shapefile.shp corrupted_shapefile.shp

詳細については、PerryGeoブログの次のブログ投稿をご覧ください。

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


コマンドを実行しました(除外した-f "ESRI Shapefile"を含む)。ファイルに関するエラーレポートを取得しました。[ここにスクリーンショットを投稿できません]。それは私が推測する犯人の形に関係しています。形式は次のとおりです。エラー1:破損した.shpファイル:Shape 2352、nPoints = 7、nEntitySize = 88。
エリック

安全に-fオプションを削除できます。シェープファイルはデフォルトの出力形式です。今後の調査のために、シェープファイルのコピーを添付できたら興味深いでしょう
capooti

調査用ファイル:ファイルを転送していただければ幸いですが、残念ながらデータは著作権で保護されています。とにかくありがとう。
エリック

@エリック、スクリーンショットをimgur.com配置したら、ここに投稿できます(まだ関連がある場合)
djq

5

私はこれを使います。それは常に私にとってその問題を解決してきました。

shapecheck.exe


私はブラッドに同意します。ShapeCheckはそのまま機能します-スタンドアロンはシェープファイルを修正します-必要に応じて切り捨てます。
Mapperz

@Mapperz。いくつかの切り捨てを使用して、ツールを実行しました。実際にその後シェープファイルを開くことができます!しかし、今は元に戻す必要があるバックアップよりも少ないレコードが含まれています。バックアップがなかったら、このような回復はそれだったでしょう。(不測の事態のためのアーカイブツール)ありがとうございます。
エリック

リンクが壊れています。これが機能しています:geonet.esri.com/servlet/JiveServlet/download/614216-1-160601/…ソース:geonet.esri.com/thread/177037#comment-614216
Mr. Che

4

Esriから公式回答にはいくつかのヒントがありますが、私を何度か解雇するのを助けたshp修復ユーティリティを示しています。

私が聞いたことはあるが、私が試したとは言えない他のものはほとんどありません。


サイモン、ありがとう。しかし、私の大きな問題は、最初にファイルを開くことができないため、ほとんどの提案が機能しないことです。あなたが提案したTip Oneですべてを試しました。何もうまくいきませんでした。
エリック

2

さて、ここに上記の良い答えの山に追加する別のトリックがあります。

これは少し力ずくであり、ほとんどの場合は役立ちますが、場合によっては役立ちません。それはおそらく問題を修正するための最初のステップにすぎませんが、それ自体は解決策ではなく、解決するのではなく、シェープファイルを開くことができる場所に移動します。ほとんどの場合、シェープファイルが開いた後も、ArcMapでさらに手動で修復する必要があります(フィーチャの破損、属性の欠落、属性の不整合など)。

  1. シェープファイルを新しい空のフォルダーにコピーします。SHP、SHX、およびDBFのみを携帯してください。他のすべてのファイルを残してください。そうすれば、prjも含まれます。

  2. (Windows):SHXファイルを右クリックし、[プロパティ]を選択してファイルのプロパティを開きます。

  3. [全般]タブで、このSHXファイルの正確なファイルサイズをバイト単位で確認します。「ディスク上のサイズ」プロパティではなく、「サイズ」プロパティを確認してください。

  4. バイト単位のそのファイルサイズを取り、100バイト(ヘッダー)を引きます。残りの8で割ります(各「単語」のサイズ)。結果として、シェープファイルのSHPパーツ内の形状フィーチャの数がわかります。

  5. DBFを編集してDBFとして保存できるようにするソフトウェアでDBFを開きます。ステップ4で計算したSHPのシェイプフィーチャの数とDBFの行を一致させるために、レコードを追加または削除します。(古いバージョンのExcelを使用している場合は、行#1にフィールド名が含まれていることに注意してください。1,000レコードの場合、最初のデータ行以降、シートの行は1,001行になります。行#2です。)行の数を一致させるために行を削除する必要があり、それらの行に保持する必要のある実際のデータが含まれている場合は、それらを新しいDBFに保存するだけで、その内容を読み取ることができます。その後、ArcMapですべてが再び開くようになると、

  6. 上記の手順を使用してSHPのフィーチャの数とDBFの行の数を一致させたら、シェープファイルをArcMapで再度開いてみます。


1

ogrinfoを使用して.shpファイルに形状の数を数えることができます(動作するかどうかは不明です)。

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

図形の数を数えることができる場合は、オープンオフィスで.dbfファイルを開いてそれを完了する(または余分な行を削除する)ことができます。


提案をありがとうございますが、私はGDALツールのプロではありません。または「非常に」SQL文芸。指定したパラメーターでツールを実行しようとしましたが、ツール関連のエラーが発生しました。「データソースカウントを開けません(*)」。
エリック

コマンドラインをコピー/貼り付けできますか?
simo

できますが、それでも同じエラーが発生します。しかし、@ capootiの解決策はいくつかの結果を生み出したようである/犯人の形状を特定した。
エリック

1

インデックスファイル(.idxと.shx)を削除して運が良かったので、再接続するとGISが再生成されます。


成功せずにこれを試しました。提案してくれてありがとう。
エリック

0

シェープファイルがポイントレイヤーで、XYフィールド値があった場合、[XYイベントレイヤーの作成(Make XY Event Layer)]ツールを実行して、破損したシェープファイルdbfから別のレイヤーを作成できます。


その道路(ポリライン)ファイル。ただし、ポイントシナリオのヒントは覚えておきましょう。ありがとう。
エリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.