データソースが変更されたときにレイヤーを自動的に更新しようとしています。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()
で、マップキャンバスのラスターのビューを確実に更新するようです。
layer.setCacheImage(None)
およびlayer.triggerRepaint()
?
triggerRepaint()
です。v 2.10.1-ピサ