QGIS内でCSVファイルをリロードしますか?


9

QGISを使用して、Matlabシミュレーションの結果を説明します。Matlabは、QGIS内のシェープファイルに接続されるCSVファイルを生成します。

現時点では、Matlabシミュレーションの新しい結果を表示するには、QGISを閉じて再度開く必要があります。

QGISを閉じて再度開かなくても、CSVファイルの属性テーブルを再読み込みできますか?


@Jasonに感謝します。あなたのヒントは私にとって魅力的でした-QGIS 3.10を使用すると、オプションはプロパティ->ソースの下にあります![propertiescreatespatialindex ](i.stack.imgur.com/5G3y5.png
Hannes Buhrmann

回答:


3

毎回QGISを閉じて開くよりも必ずしも簡単ではないが、より理にかなった別のワークフローを提案できます。

  • シェープファイルをスペーシャライトにインポートします
  • CSVをスペーシャルサイトにインポートします(「仮想TXT / CSVオプションを使用して」)
  • 空間テーブル(シェープファイル)を仮想CSVテーブルに結合して、spatialiteに空間ビューを作成します。

これで、任意の空間レイヤーと同じようにQGISでビューを表示し、spatialiteから結合された値を使用できます。ただし、CSVが再作成されるたびに、仮想CSVテーブルを削除し、それに再リンクする必要があります。次に、QGISで更新すると、新しい値が表示されます。これはほんの少しの時間で済みます。さらに、多くのビューを定義して、必要に応じて以前のビューを維持できます...

HTH


2

Spatialiteフォーマットを使用せずにこれに対する答えをまだ探している人のために、私はうまくいくものを見つけました。

csvがあり、結合を使用してそれを空間レイヤーに結合する場合、結合のオプションの1つはレイヤーをキャッシュすることです。レイヤーのプロパティに移動し、結合されたデータに移動して[結合の編集]をクリックすると、このオプションが表示されます。キャッシュオプション無効にすると、 csvが変更された後にデータレイヤーを再読み込みし、マップの再描画をトリガーして、更新されたマップビューを取得できます。

Pythonコンソールで再読み込みと再描画を行うことができます。まず、マップキャンバス、csv、およびレイヤーの名前を定義する必要があります。

mc = iface.mapCanvas()
layer=mc.currentLayer()
csv_layer=mc.currentLayer()

currentLayerメソッドを使用するときは、コンソールでレイヤーに名前を付けるときにレイヤーをアクティブにしてください(「現在のレイヤー」である必要があります)。

次に、結合のキャッシュオプションをオフに設定すると、csvを変更してから、Pythonコンソールで次の2つのコマンドを使用してマップを再描画できます。

csv_layer.reload()
layer.triggerRepaint()

これでうまくいきましたが、データが100行しかありませんでした。データセットが大きい場合、キャッシュを使用しないと操作が遅くなる可能性があります。


0

シェープファイルのレイヤープロパティを開き、General- Coordinate reference systemに移動してをクリックしますCreate spatial index。完了すると、シェープファイルが更新されます。

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