変更されたデータソースからQgisレイヤーを更新する
データソースが変更されたときにレイヤーを自動的に更新しようとしています。Rを使用して属性を持つシェープファイルを作成し、QGISでその属性に応じて色付けしています。 さまざまな属性値を使用して新しいシェープファイルを作成し、Qgisマップの色を更新します。ステップ1はそのプロセスをトリガーし、ステップ2は変更されたシェープファイルからレイヤーをリロードします。そのステップ2ここで心配しています。 他の質問/メーリングリストのチャット担当者はtriggerRepaint、レイヤーでの使用について言及しています-それは機能しません。その他の提案にはsetCacheImage(None)、これも機能しません。レイヤーは最終的に更新されますが、実際にはロジックを見ることができず、何もしなかった後に時々驚かされます。または、2分前に何かをしたかもしれません。 更新できるようにする再現可能な方法の1つは、凡例メニューからレイヤーを複製することです。複製は常に現在のシェープファイルからデータを取得し、元のレイヤーも更新されます。そのため、何らかの方法が必要です。 2.8ではうまく機能していたと思いますが、これは2.10なので、どこかに新しいバグがあるかもしれません。 関連するが、2.10では機能しない: QGISでソースが変更された場合、ラスターレイヤーを自動的に再読み込みする方法は? 私が試した他のこと: layer.dataProvider().dataChanged.emit() -一度作業した後、同じレイヤーで再び作業しなかった レイヤーの複製が機能する理由を追跡したと思います-更新されたレイヤーに基づいて新しい使い捨てレイヤーを作成し、更新されたレイヤーを呼び出すと.triggerRepaint()、マップキャンバスで更新されます: QgsVectorLayer( layer.source(), "layer copy", layer.providerType() ) layer.triggerRepaint() 別のレイヤーソースを使用すると動作しません。そのため、同じレイヤーソースに基づいてレイヤーオブジェクトを作成すると思われます... ラスターレイヤー(GeoTIFFから)を使用した簡単なテストと、呼び出しだけrlayer.triggerRepaint()で、マップキャンバスのラスターのビューを確実に更新するようです。