QGISで「悪いレイヤーを処理する」を無視する方法は?


11

QGIS(2.14.3-Essen)プロジェクトがあり、職場でも自宅でも使用しています。プロジェクトには2つのレイヤー以外のすべてを保持します。

残りの2つのレイヤーは非常に大きく、合計20 GBを超えるDEMと陰影起伏があり、職場と自宅では異なるパスに保存されます。

Handle Bad Layersダイアログを無視し、それらのレイヤーの壊れたパスを保持したいと思います。私はしばしば彼らが悪いことを気にしません。プロジェクトの他の部分に変更を加えたい。

不正なレイヤーの処理ダイアログを無視またはスキップして、更新しない場合にレイヤーへの参照が失われないようにする方法はありますか?


これは、QGISの上流で解決する必要があるものです。それほど難しくありません。これをアップストリームで修正することをお勧めします(ダイアログの追加オプション:a)このセッションで非表示にするb)ソースパスを修正するc)レイヤーを削除する)。あなたの代わりにこれを喜んでやってくれる会社たくさんあります。
マティアスクーン

1
@Matthias Kuhn-それは非常に良い考えです。それは前向きな方法です。私はそのリストのコンサルタント会社の1つを使用します(名前を付けるのが完了したかどうかはわかりません)。それらの可能性を探ります。ありがとう
マーティン・ヒューギ

@MartinHügi、これについて何か進展はありましたか?似た何かがメーリングリストで、いくつかの確認を上げlists.osgeo.org/pipermail/qgis-developer/2017-May/048450.html
マティアス・クーン

いいえ、私はこれを進めていません。実際に私たちが一緒に住んでいるものの一つになったので、私は実際に忘れていました。お知らせいただきありがとうございます。私たちのコンサルタントに質問することができますか、それともすでに進行中のものですか?@Aaron-これはどのように機能しましたか?
マーティンヒューギ

回避策を引き続き使用します。2つの並列QGISプロジェクト-1つは仕事用、もう1つは家用です。
アーロン

回答:


4

自宅と職場で使用するために、プロジェクトファイルから個別のコピーを作成するだけです。

保存するデータは、プロジェクトファイルではなく、レイヤーのソースファイルに書き込まれます。

宿題の部分が終わったら、それを使って作業し、悪いレイヤーを再び追加することができます。レイヤーのスタイル設定が難しい場合は、個別に保存して追加することもできます。


別の選択肢は、外部ソースの周りにVRTファイルをラップすることです。

で作成されたGeotifラスターファイルのサンプル例gdal_translate

<VRTDataset rasterXSize="1656" rasterYSize="846">
  <GeoTransform> 2.0005201224994706e+005, 6.2653333397239589e+002, 0.0000000000000000e+000, 6.9906275735481549e+006, 0.0000000000000000e+000,-6.2653333397239589e+002</GeoTransform>
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">2 (pixels/inch)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">120</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">120</MDI>
  </Metadata>
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Red</ColorInterp>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">testtif.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="1656" RasterYSize="846" DataType="Byte" BlockXSize="1656" BlockYSize="1" />
      <SrcRect xOff="0" yOff="0" xSize="1656" ySize="846" />
      <DstRect xOff="0" yOff="0" xSize="1656" ySize="846" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

シェープファイルのサンプル:

<OGRVRTDataSource>
    <OGRVRTLayer name="testshp">
        <SrcDataSource>F:\Karten\vrt\testshp.shp</SrcDataSource>
            <SrcLayer>testshp</SrcLayer>
            <GeometryType>wkbPolygon</GeometryType>
            <LayerSRS>EPSG:31466</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>

ソースファイルが存在しない場合、ラスターは黒い四角として表示され(レイヤーを非表示にすることができます)、ベクターレイヤーはエラーメッセージなしで非ジオメトリテーブルになります。ソースファイルが削除されていない追加の非vrtレイヤーはそのまま残り、編集できます。ソースファイルを再インストールすると、他のレイヤーへの変更も含め、すべてが正常に戻ります。


1
この特定のケースでは、自宅用とオフィス用に別々のプロジェクトを作成するのが適切な回避策です。ただし、マップサービスが一時的にダウンしている場合、不良レイヤーの通知を無視したい場合など、他のケースもあります。もう一度質問しますが、特定のレイヤーの参照を失わないように、不良レイヤーの処理ダイアログを無視またはスキップする方法はありますか?
アーロン

VRTファイルの詳細、それらの内容、開始方法を教えてください。私が検討したことから、VRTはラスターにのみ適用されますか?ベクターファイル、または接続がない場合は利用できないリモートPostGISレイヤーはどうでしょうか。これらの「不良レイヤーの処理」をどのように無視できますか?
マーティンヒューギ

MartinHügi@あなたはまた、ベクトルファイルのためのVRTを構築することができますが、それはまだ手仕事必要ですgdal.org/drv_vrt.htmlpaolocorti.net/2012/03/08/gdal_virtual_formatsを。いくつかの例については、すぐに回答を拡大します。
アンドレイ

@AndreJおかげで、これらのリンクを見ると、私の限られた理解は、XMLファイルの一種がデータのソースへの中間マップとして機能するということです。QGISは、データソースが利用できない場合でも、そこにあると考えていますか?GDALは、把握するか、少なくとも理解していると良いと思われるものです。
マーティンヒューギ

はい、あなたはQGISエラーハンドラをだましています。
-AndreJ

3

可能な回避策は、スクリプトを使用してqgsプロジェクトファイルを変更することです。データソースを置き換えると、「<datasource>.</datsource>不良レイヤーの処理」ポップアップが無視されることがわかりました。

特定のレイヤーをロードしたくない場合に実行するPythonスクリプト。

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

適切なデータソースパスを挿入するために実行するPythonスクリプト。

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.\path\to\your\datasource</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

これを行うDoNotLoad.pyと、2番目のスクリプトをパターンとして使用して、トップスクリプトとhome.pyホームソースへのwork.pyパス、および作業ソースへのパスを設定できます。

作業するプロジェクトは1つになりますが、現在の環境に応じてパスを簡単に変更したり、レイヤーが読み込まれずにプロジェクト内にあるようにパスを変更したりできます(すべてのスタイルが保存されます必要に応じてスタイリングを変更することもできます。マップには何も表示されません)。


ありがとう。私は概念を理解しました。Pythonの基本的な使用法を理解し始めるために歩き回ることを意味していたその時間を費やす必要があることは非常に明確です。今のところ、WordPadでproject.qgsを手動で編集してデータソースを変更し、元に戻したため、概念が得られました。QGISは不正なレイヤーのハンドルを無視しませんでしたが、<ID>がプレースホルダーとして機能するため、変更を元に戻すことができました。そう、私はそれを得る-私は思う。
マーティンヒューギ

私はこれが開始するには良い場所だと思いwiki.python.org/moin/BeginnersGuide
マーティンHügi

@MartinHügi役立つ場合は、このstackoverflowの答えから私のスクリプトのメインパターンを取得しましたstackoverflow.com/a/290494/4708150これは、スクリプトのロジックをより徹底的に説明しています。コメントを確認してください。printステートメントの最後にカンマがある理由を説明する最高評価のコメントがあります。
TJロックフェラー

1

ChangeDataSourceプラグインは、不適切なレイヤーのハンドルグループに一時的に移動することにより、ファイル内のレイヤーを保持します。https://geogear.wordpress.com/2016/01/29/changedatasourcepluginplugin-plugin-release-2-0/それはあなたが望むことをする必要があります。昨年、私は同様の問題を抱えていて、レイヤーで動作するが、悪いレイヤーを処理しないChangeDataSourceプラグインがあることに気付きました。開発者の(Enrico Ferreguti)ブログのコメントで、不良レイヤーの処理は素晴らしい機能になると述べました。一週間以内に彼はそれを追加しました!


このプラグインは、悪いレイヤーを処理するためには機能しませんでした。私は2つの異なるラップトップで試してみました-1つはWin7を実行し、もう1つはWin10を実行しました。両方にQGIS 2.18.0がインストールされています。「不良レイヤーの処理」をチェックし、インストール後にQGISを再起動しました。無効なレイヤーを処理するQGISのデフォルトは、無効なデータソースを見つけて処理したプラグインの通知ではなく、ポップアップし続けました。
アーロン

今も私のために働いていない。開発者に知らせます。
バスワイン

changeDataSourceプラグインが問題なく実行されることを確認しました。キャッチされていない条件を修正して例外をスローしたり、誤ったエラーを報告したりして、新しいバージョンをリポジトリにコミットします。[問題が解決しない場合は、レポートしてください](github.com/enricofer/changeDataSource/issues)データセットまたはそれらを再現する操作手順を指定します。
エンリコフェレグティ

プラグインをポップアップさせるには、Qgisを実行してからプロジェクトを開く必要があります。
バスワイン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.