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