Recharger un fichier CSV dans QGIS?


9

J'utilise QGIS pour illustrer les résultats de ma simulation Matlab. Matlab produit un fichier CSV qui est connecté à un fichier de formes dans QGIS.

Pour le moment, je dois fermer et rouvrir QGIS pour afficher les nouveaux résultats de la simulation Matlab.

Est-il possible de recharger la table attributaire du fichier CSV sans fermer et rouvrir QGIS?


Merci @Jason, votre astuce a fonctionné comme un charme pour moi - en utilisant QGIS 3.10, l'option est sous propriétés-> source ! [ Propertiescreatespatialindex ] ( i.stack.imgur.com/5G3y5.png )
Hannes Buhrmann

Réponses:


3

Je peux suggérer un flux de travail alternatif qui, bien qu'il ne soit pas nécessairement plus facile que de fermer et d'ouvrir QGIS à chaque fois, pourrait avoir plus de sens:

  • Importez votre fichier de formes dans spatialite
  • Importez le CSV dans spatialite (à l'aide de l'option "Virtual TXT / CSV)
  • Créez une vue spatiale dans spatialite en JOIGNANT la table spatiale (shapefile) à la table CSV virtuelle

Maintenant, vous pouvez afficher la vue dans QGIS comme n'importe quelle couche spatiale et utiliser les valeurs JOINed de spatialite. Mais, chaque fois que le CSV est recréé, vous devrez SUPPRIMER la table CSV virtuelle et la lier à nouveau. Ensuite, une actualisation dans QGIS affichera les nouvelles valeurs. Cela ne prend qu'un moment, et en plus, vous pouvez définir de nombreuses vues, et garder les précédentes si nécessaire ...

HTH


2

Pour ceux qui recherchent toujours une réponse à cela sans utiliser de format spatialite, j'ai trouvé quelque chose qui fonctionne.

Si vous avez un csv et utilisez une jointure pour le joindre à une couche spatiale, l'une des options de la jointure est de mettre en cache la couche. Vous pouvez accéder à cette option si vous accédez aux propriétés de votre couche, puis aux données jointes et cliquez sur modifier la jointure. Si vous désactivez l'option de cache , vous pouvez recharger la couche de données après la modification du csv, puis déclencher une nouvelle peinture de votre carte pour obtenir une vue de carte actualisée.

Vous pouvez effectuer le rechargement et la repeinture dans la console Python. Tout d'abord, vous devez définir un nom pour le canevas de carte, le csv et pour la couche:

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

Assurez-vous d'avoir les calques actifs lorsque vous les nommez dans la console lors de l'utilisation de la méthode currentLayer (ce doit être le «calque actuel»).

Ensuite, si vous définissez l'option de cache comme désactivée pour votre jointure, vous pouvez modifier le csv, puis utiliser les deux commandes suivantes dans la console Python pour redessiner votre carte:

csv_layer.reload()
layer.triggerRepaint()

Cela a fonctionné pour moi, mais je n'avais que 100 lignes de données. Il se peut que les opérations soient lentes sans mise en cache lorsque vous disposez d'un plus grand ensemble de données.


0

Ouvrez les propriétés de calque du fichier de formes et accédez à General- Coordinate reference system, cliquez sur Create spatial index. Une fois terminé, le fichier de formes est actualisé.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.