QGISの[レイヤー]ペインに存在しないqgsファイルからレイヤーを削除するパージ機能を探していますか?


8

長い間使用してきたQGISプロジェクトがいくつかあります。レイヤーの追加と削除、削除または移動したファイルへの参照の更新などです。

qgsファイルをテキストエディターで開くと、さまざまなファイルへの参照が多数含まれていることがわかります。この参照は、レイヤーツリーペインには表示されません。

私には3つの異なるケースがあります。既存のファイルへの参照、不足しているファイルへの参照、データベース接続への参照です。別のマシンでプロジェクトを開いたときにこれに気付き、QGISはレイヤーツリービューに存在しないベクターテーブルへのデータベース接続が欠落していると報告しました。

qgsファイルから参照を手動で削除すると問題が解決しましたが、私は巨大なプロジェクトを管理しており、プロジェクトの整合性を手動で確認することはほぼ不可能です。「空のレイヤーの削除」プラグインを試しましたが、削除しようとしているのは空のレイヤーではありません。

qgisファイルを「パージ」する方法はありますか?


.qgsファイルに相対パスを保存して確認しましたか?Setting--> Project Properties-->save paths-->relativeチアーズN で開催
Naresh 2012

新しいプロジェクトファイルに「名前を付けて保存」についてはどうですか?
AndreJ 2012

1
それはうまくいきませんでした!QGISユーザーメーリングリストに、レイヤーペインに存在しないファントムレイヤーを含むGQISプロジェクトファイルを投稿します。
ブラディパス

1
qgsファイルを私たちがアクセスできる場所に投稿していただけませんか?あなたの状況を再現することはできません。おそらく、必要なのは単純なパーサーだけです。
ike 2013

1
@ikeこちらを確認してください:lists.osgeo.org/pipermail/qgis-user/2012-September/019327.html。私がメーリングリストに送ったテストプロジェクトがそこにあります。それを再現するには、この相対パスに./Planimetrie/2012/plan01_2012.tifにtifファイルを配置する必要があります。詳細については、次のメッセージもご覧ください。
ブラディパス

回答:


7

問題のレイヤーはレイヤーレジストリにありますが、凡例にはありません。

次のpythonスクリプトは、読み込まれているが凡例には表示されていないすべてのレイヤーを削除します。

レイヤーの削除:

registryLayers = QgsMapLayerRegistry.instance().mapLayers().keys()
legendLayers = [ layer.id() for layer in iface.legendInterface().layers() ]
layersToRemove = set( registryLayers ) - set( legendLayers )
QgsMapLayerRegistry.instance().removeMapLayers( list( layersToRemove ) )

QGIS内のPythonコンソールから実行する必要があります。それを適用した後は、レイヤーからなくなっていることを確認することで動作を確認することができます(2.0でプロジェクト)ファイル => プロジェクトのプロパティ => 識別可能な層を。変更は自動的に保存されません

最後に次の行を追加すると、変更も自動的に保存されます。

iface.actionSaveProject().trigger()

このスクリプトを適用した後、プロジェクトファイルを上書きする前に、プロジェクトファイル(.qgs)のバックアップコピーを作成してください。

QGIS 1.8の場合、最初に次の行を実行する必要があります。

iface = qgis.utils.iface

入力するとエラーが発生します。トレースバック(最後の最新の呼び出し):<モジュール>のファイル "<input>"、1行目NameError:name 'legendLayerNames' is not defined
Ger

1
QGIS 1.8では、ifaceにアクセスする別の方法が必要です。回答はこれを反映するように更新されています。
Matthias Kuhn

1
ここにあると思います。私の場合はうまくいきました。その結果、QGIS Cloudは、レイヤーをアップロードできるようになり、より適切に機能しました。優秀な。
2013

0

他の多くの便利な機能に加えて、「レイヤーボード」という名前のプラグイン(プラグインインストーラー内で利用可能)には、この問題を解決する「ゴーストレイヤーを削除する」ための組み込みボタンがあります。

ゴーストレイヤーを削除する1クリックボタンに加えて、各レイヤーとそのプロパティを一覧表示するGUIで個々のレイヤーを表示および削除することもできます。必要に応じて、これらの個々のレイヤーをテーブルから選択し、[レイヤーの削除]ボタンをクリックして、各問題を個別に解決できます。

私の場合、個々のレイヤー参照を削除する機能は非常に重要でした。同じ名前の「ゴーストレイヤー」がレジストリに2〜3回参照されていたためです。レイヤーボードを使用して、正しいエントリを個別に削除し、正しい単一レイヤーの参照に戻しました。

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