Suite

Comment traiter par lots les tables attributaires dans QGIS (ou GRASS) ?


J'utilise GRASS 6.4.3 dans Linuxmint 16. J'ai un script bash pour GRASS que j'utilise pour traiter près de 300 fichiers raster. Le script importe d'abord quelques fichiers raster (r.in.gdal), puis effectue des calculs et une classification (en utilisantr.mapcalcetr.reclasser). Et enfin transforme le raster résultant en vecteur (r.à.vect) et l'enregistre (v.out.ogr, utilisanttype=zone).

Disons que chaque fichier vectoriel a un champ intitulé Catégorie et qu'il ne prend que deux valeurs 1 et 2. Comme je ne m'intéresse qu'à la surface totale des polygones avec catégorie = 2 et avec une superficie supérieure à 10 000 m2, j'ouvre chaque fichier vectoriel dans QGIS, édite sa table attributaire, calcule la superficie de chaque polygone et les élimine tous avec catégorie=1 et $superficie<10 000.

Mais je dois le faire manuellement,

Existe-t-il un moyen de le faire par lots dans QGIS ?

Ou encore mieux, est-il possible de le faire dans GRASS ?

Est-il possible de modifier la table attributaire dans la console de commande dans GRASS ?

Pourrais-je le faire dans le même script bash que j'utilise pour faire tous les autres processus dans GRASS ?

J'ai lu ceci mais je ne sais pas comment l'appliquer à mon problème. Je n'ai pas trouvé comment calculer la surface des polygones et l'ajouter à une nouvelle colonne à l'aide de GRASS. je pense que je pourrais utiliserdb.selectpour rechercher les polygones que je veux éliminer, mais je ne sais pas comment le faire.

Merci pour ton aide!


Eh bien, vous pouvez le faire en utilisant ogr2ogr, après avoir exporté les vecteurs de GRASS vers shp :

ogr2ogr -sql "SELECT * FROM file_in WHERE 'category' == 2 AND OGR_GEOM_AREA > 10000" file_out.shp file_in.shp

file_in.shp est vos données exportées de GRASS

file_out.shp est vos résultats filtrés.

Ensuite, vous pouvez exécuter :

ogr2ogr -sql "SELECT count(OGR_GEOM_AREA) FROM file_out" file_out.shp

Ou si vous n'avez pas besoin de résultats filtrés, placez simplement l'argument WHERE :

ogr2ogr -sql "SELECT count(OGR_GEOM_AREA) FROM file_in WHERE 'category' == 2 AND OGR_GEOM_AREA > 10000" file_in.shp

J'espère que cela aide.