編集中に破損したシェープファイルを作成しないようにする方法は?


15

QGISの一部の行をシェープファイル形式でデジタル化するGIS技術者がいます。私は彼がそれをどのようにしたのかわかりません(そして彼もしません)が、どういうわけかシェープファイルが壊れました。ランダムな行を作成していたか、作成した行の一部が消えてしまいました。ArcCatalogueにアクセスして、ArcGISでの外観を確認しました。これは私が見たものです。

ここに画像の説明を入力してください

シェイプファイルの「ライン」アイコンが表示されるはずの疑問符アイコンに注目してください。明らかに、ArcCatalogueはこのファイルを読み取ることができません。また、最後に '_packed'が付加された2番目のdbfファイルが作成されたようです。Windowsエクスプローラーを使用してシェープファイルを見ると、シェープファイル 'M3_PRE_SMU_lines_10Apr13_SMC.dbf'の.dbfが既にあることがわかります。この_packedシェープファイルがどこから来たのかわかりません。それはそれに話します。

このファイルをArcMapに追加しようとすると、次のエラーが発生しました。

ここに画像の説明を入力してください

エラーはかなり自明です...図形の数はレコードの数と一致しません。なぜそれが起こっているのか分からない。QGISでこれがどのように発生するかを説明するオンライン情報はないようですが、修復ツールがいくつかあります。QGISを開いてレイヤーを追加し、レイヤーを右クリックして別のシェープファイルとして「保存」するだけで、実際に自分でこれを修復しました。だから、私は回避策を考えましたが、私はこれが最初に発生するのを防ぐ解決策を見つけることを望んでいます。ありがとう、マイク


1
私は何年もQGISを使用していますが、この問題は以前に見たことがありません。別の.dbfの「魔法の」外観は、QGISの外部でShapefileが改ざんされていることを示唆しています。QGISのみを使用してバグを再現できる場合は、バグレポートを提出してください。それは非常に重要です!
暗闇

私は運のない問題を再現しようとしています。私が気づいたことの1つは、ArcGISとは異なり、QGISで編集するときにスキーマロックメッセージが表示されないことです(つまり、シェープファイルにスキーマロックがあり、同じものを編集し始めると、ArcGISは保存時にエラーをスローしますQGISはそうではありません)スキーマがロックされているシェープファイルを保存すると、奇妙なことになります。これが原因であると100%確信しているわけではありませんが、注目に値するものです。
マイク

また、シェープファイルの編集中にこのエラーが発生しました。回避策は、ArcMapで編集することだけでした。明らかにそれは本当の解決策ではありません-しかし-この種のエラーを経験するのはあなただけではありません。
ケビン

..._ SMC.dbfファイルの名前を..._ SMC.dbf.backupに、..._ SMC_packed.dbfを..._ SMC.dbfに変更しようとしましたか?
マティアスクーン

2
デュフールと同じ問題。q gis環境のみで作成されたファイル。シェイプを編集し、最後に保存して編集を停止すると、行が消え、属性テーブルにデータが含まれていないように見えます。qgisで形状を再度ロードしようとすると、空に見えます。フォルダー内のファイルはesです。mario.shxはmario_packed.shpになりました。名前からパックされた単語を削除すると(元のmario.shxです)、シェイプが読み込まれ、機能しているようです。どのぐらいの間?私はちょうどこれでおかしくなりそうだかわからない
user27144

回答:


16

説明

OGR(GDALの一部)は、QGISがシェープファイルにアクセスするために使用するライブラリです。OGRがフィーチャーを削除する場合、すぐに削除されるのではなく、フィーチャーを削除済みとしてマークするだけです。たまには、と呼ばれるコマンド再パックは、この新しいファイルに削除済みとしてマークされていないすべての機能サフィックス_repackコピーして新しいファイルを作成する、実行されます。終了すると、元の.dbfは_repack.dbfに置き換えられます。次に、シェープファイルに対して同じことを行います。新しいもの(_packed.shp)を作成し、削除されていないすべての機能をコピーし、最終的に元の.shpを置き換えます。

このプロセスのどこかで、何かが失敗したようです(クラッシュした可能性があります)。

このプロセス内で機能IDが変化するため、お持ちのshp(ジオメトリ)とdbf(属性テーブル)は同じ機能に対して異なる機能IDを使用しているため、奇妙な動作が発生します。2つのファイルの1つには削除された機能(の一部)が含まれているが、もう1つのファイルには含まれていないようです。

これに対処する方法

2016年11月の更新: GDAL 2.2には、ファイルがディスクに書き込まれるたびに自動的に再パックを呼び出す組み込み機能が付属しています。したがって、他のことを行う前に、ダイアログについてQGISのGDALバージョンを確認し、GDAL(多くの場合QGISの一部として出荷されています)リリースを最新バージョンに更新します。

おそらく、あなたが処理できる以上のデータを失わないようにするために、通常のバックアップ作成する以外に、あなたがそれについてできることは多くはないでしょう(とにかくそれをしているのですか?😉)。そして、これを再現する方法を見つけた場合(サンプルデータセットで最適)、バグレポートを作成します。

この問題が再び発生する場合は、シェープファイルに空間インデックス作成してみることもできます。このプロセスでは、QGISはシェープファイルでrepackを再度呼び出し、shp / dbfを「修復」する場合があります。しかし、これは単なる未検証の推測です。

@rhmとコメントで述べたように{xyz} _packed。{ext}ファイルの名前を{xyz}。{ext}変更すると役立つ場合があります。パックされたファイルがすでに完全に書き込まれ、失敗したのが名前の変更だけであった場合、このステップを手動で行うことは絶対に有効です。ただし、_packedファイルが完全に書き込まれていない場合は、機能の一部から情報が欠落している可能性があります。したがって、これを試す前に、関係するすべてのファイルのバックアップコピー作成してください

リパックがいつ呼び出されるかに関する背景情報

QGIS 2.0と2.8の間では、レイヤーがアンロードされるたびに(QGISを終了し、別のプロジェクトをロードする...)常にrepackが呼び出されます。フィーチャが削除されたか、ジオメトリが変更された場合、削除済みとしてマークされたレコードを持つ.shpおよび.dbfファイルが存在します。

QGIS 2.10以降では、削除されたフラグをレコードに追加する可能性がある操作の後にレイヤーが保存されるたびに、再パックが呼び出されます。そのため、ファイルは常に他のアプリケーションで処理できるように常に正常な状態になっているはずです。


1

これはQGISで私に起こりました。上記のコメントセクションで誰かが提案したように、ファイル名から「_packed」を削除するだけで問題を解決できました。


1

たぶん、これは壊れた.shxインデックスファイルの別の問題です。ジオメトリタイプは、.shpおよび.shxヘッダーに保存する必要があります。それらが一致しない場合、ソフトウェアはエラーを生成します。

QGISは壊れたインデックスファイルにあまり厳密ではなく、で再作成できるように見えますが、Save As...ARCGISは正しいインデックスファイルを主張し、インデックスファイル、またはインデックスを使用しない場合があります。


1

削除されたフィーチャの再出現および/またはQGISでフィーチャが削除されたシェープファイルの奇妙な動作は既知のバグです。このバグレポート11007とこの関連質問- 削除されたポリゴンは古いバージョンに戻るようです。ArcGISがこのようなシェープファイルに問題を抱えているのと同様に、QGISにMapInfo TABファイルとして保存すると、RouteFinderをロードする前にテーブルがMapInfoに最初にパックされない限り、MapInfo RouteFinderプラグインがクラッシュします。Universal Translatorを実行して、MapInfoでこれらの破損したシェープファイルを変換すると失敗します。

お気づきのとおり、QGISで「名前を付けて保存」を行うことで問題を解決できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.