J'ai eu l'idée de ce blog en finissant mon énième CDD et en rangeant mon bureau plein de post-its, de notes dans les coins de cahier, sur les feuilles de brouillon ...


Dommage de perdre toutes ces informations glanées au fur et à mesure des années et puis finalement pourquoi ne pas en faire profiter la sphère des heureux sigistes et fières de l'être?


J'ai travaillé sous GRASS, Arcview, ArcGis, MapInfo,QGIS et je suis devenue accroc à l'open source.


Alors voila, il était une fois ...

mercredi 2 septembre 2015

Bash, vous avez dit bash?

Dans un précédent article, je parlais de "bash", mais kezako et surtout comment le lance-t-on?

N'étant pas informaticienne, je vous dirais juste qu'un bash est un script qui permet d'automatiser certaines procédures fastidieuses en utilisant par exemple des commandes OGR/GDAL ou grass. C'est l'équivalent du batch sous windows, sauf que lui se lance dans un shell Unix/Linux.

Ouh la me direz-vous, je suis sous windows et je vous répondrais: aucun soucis, moi aussi :)

1. Utilité du bash


Vous recevez par exemple le nouveau cadastre, vous le recevez à peu près 2 fois par an. On vous livre des fichiers Mif/Mid répartis  par dossiers "commune" et contenant entre autres fichiers: parcelles.mif et bati.mif. 

Or vous travaillez sous Qgis, vous préféreriez donc des shapes et vous voudriez votre cadastre non pas par commune mais agrégé en un seul shape. Les Mifs sont en WGS 84 mais vous les voulez dans un système de coordonnées projetées tel que l'EPSG 2972 (Guyane).

Chaque année vous convertissez donc un à un les fichiers manuellement et vous assemblez votre shape puis le transformez dans le bon système de coordonnées.

Grâce au bash, vous n'avez qu'une ligne de commande à lancer et c'est parti!

Autre exemple que tout le monde connait: vous rentrez de vacances, vous avez pris 300 photos qui pèsent toutes 5 Mo et vous souhaitez les partager mais elles sont trop lourdes. Grâce à un bash, vous enregistrez vos photos au format JPG en choissisant votre rapport qualité/poids.

2. Ecrire un bash



  • Utilisez Notepad ++ ou le  blocnote, word, pour écrire vos bash.

  • Enregistrez le au format texte, puis renommer le manuellement en remplaçant le .txt par .sh

  • Exemple 1 : convertir vos photos


#!/bin/bash

# Compresse tous les JPG du répertoire courant 
# Les fichiers convertis sont placés dans le répertoire photos_compressees

for i in $i.JPEG
do
  echo "Processing "${i}""  
  gdal_translate -of JPEG -co QUALITY=40 "${i}" photos_compressees/${i}
  
done


  • Exemple 2 :convertir du MIF en shape puis assembler tous les shapes en un seul

#!/bin/sh
#Convertir les PARCELLES.MIF de chaque commune du cadastre en shape EPSG 2972 et les assembler en un seul shape
#Les shapes et le merge sont dans le répertoire 'PARCELLES' créé par le bash

DATA=`find . -name 'PARCELLE.MIF'`
mkdir 'PARCELLES'
j=1
for i in $DATA
do
ogr2ogr -s_srs "+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs" -t_srs EPSG:2972 -f "ESRI Shapefile" 'PARCELLES\'$j.'PARCELLE.shp' $i
let "j += 1"
done
cd 'PARCELLES\'
a=`find . -name '*.shp'`
ogr2ogr -a_srs EPSG:2972 merge.shp
for z in $a
do
ogr2ogr -append -update merge.shp $z -f "Esri Shapefile"

done

3. Lancer un bash


  • Vous devez lancer votre bash dans un shell (invite de commandes) tel que Msys (installé automatiquement avec QGIS), FWtools ou encore le shell de GRASS. C'est ce dernier que j'utilise

  • Dans Qgis, créez un nouveau jeu de données dans GRASS, l'ouvrir puis cliquez sur la boite à outil GRASS

  • Lancez le shell GRASS

Déplacez vous jusqu'au répertoire ou est rangé votre bash. Perso je dépose mon bash à la racine du répertoire contenant les fichiers à convertir.

Pour vous déplacer, utilisez les commandes suivantes:

e: pour changer de disque
.. pour remonter dans l'arborescence
cd chemineversmonrepertoire pour aller dans le dossier de votre choix


  • Lancez le bash: bash nomdemonbash.sh

et c'est parti:)


Aucun commentaire: