Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 01 December 2009 10:43

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Batch import de Raster sous GRASS

Bonjour,
Voilà je débute sous GRASS et aussi sous Linux, j'ai quelque connaissances théorique en programmation mais c'est assez limité pour l'instant. Je voudrai profiter d'un besoin d'importer sous GRASS environ 70 raster pour créer mon premier batch. J'imaginais faire ça en script shell mais je suis ouvert à d'autre propositions (je vois souvent le python revenir pour ce genre d'action).

Les raster sont tous dans des sous dossiers sous une arboressence de ce type :

Code:

/home/user/Geomatic/Data/ASTER
                            |-/ASTGTM_N47E004/ASTGTM_N47E004_dem.tif
                            |-/ASTGTM_N47E005/ASTGTM_N47E005_dem.tif

Je pense qu'il s'agit plus d'une connaissance en rédaction de script Shell que de connaissance de GRASS puisque la commande va surement ressembler à ça

Code:

r.in.gdal --verbose input=/home/user/Geomatic/Data/ASTER/ASTGTM_N47E004/ASTGTM_N47E004_dem.tif output=ASTGTM_N47E004

mais elle devra traiter tous les sous-dossier du dossier /ASTER/ et reprendre le nom du sous-dossier pour le nom de la couche en sortie (s'il reprend le nom du fichier ce n'est pas très grave).

Voilà je suis un peu gêné de demander ce genre d'aide mais mes recherches pour apprendre à programmer des scripts shell me font avancer trop lentement et je ne serai pas contre un petit coup de boost.

Petite précision, je suis sous Ubuntu 9.10 (d'ailleurs je serai curieux de savoir comment réaliser la même opération sous windows sachant que GRASS a été installé avec l'installateur de OSGeo et je dispose donc du OSGeo Shell)

Si je n'ai pas été claire n'hésitez pas à me demander des précisions. Merci d'avance.

Hors ligne

 

#2 Tue 01 December 2009 11:17

Sylvain_M
Membre
Lieu: Lyon
Date d'inscription: 3 Aug 2009
Messages: 298

Re: Batch import de Raster sous GRASS

tu as bien raison de poser des questions, c'est également comme ca qu'on apprend wink

je te propose donc de regarder le script que j'ai ecris pour importer automatiquement les dalles ASTER

Code:

for list in `find -type f  -iname "*_dem.tif" | sed 's/^\.\///'`
do
#folder=$(dirname $list);
file=$(basename $list);
name=$(basename $file _dem.tif);

echo `r.in.gdal -e --o input=${list} output=${name} title=${name}`;
echo `r.colors map=${name} color=srtm`;

done;

l'explication de texte:
- la boucle for liste de manière récursive le dossier courant à la rechercge de tous les fichiers contenant "_dem.tif"
- on recupere le nom du fichier (basename) duquel on supprimer la chaine _dem.tif pour obtenir le nom final
- on importe via r.in.gdal
- on colorise selon la palette srtm qui va est tres bien pour le relief

Hors ligne

 

#3 Tue 01 December 2009 12:21

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Merci beaucoup, super impressionnant ta réactivité.

Je suis en train d'essayer de comprendre le code ; j'ai bien compris la logique maintenant j'essaie de comprendre le sens des différents symboles. Je test ça ce midi ou ce soir normalement.

Hors ligne

 

#4 Tue 01 December 2009 13:09

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Je suppose que le "echo" est là pour débuguer wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#5 Tue 01 December 2009 14:45

Sylvain_M
Membre
Lieu: Lyon
Date d'inscription: 3 Aug 2009
Messages: 298

Re: Batch import de Raster sous GRASS

effectivement dans le cas présent le "echo" ne sert à rien ... en fait je les mets tout le temps car j'ai eu des problemes avec certains scripts dans lesquels les variables n'etaient pas tourjours remplacées correctement ...

sinon pour ce qui estd es symboles, il s'agit de standards du bash
- le ` (Alt droite + 7) indique qu'il s'agit d'une commande
- dans "*_dem.tif" le * indique qu'il doit y avoir d'autres caractères avant
- le sed 's/^\.\///' sert à remplacer les ./ au debut des noms de fichiers par rien du tout la syntaxe de base est sed 's/chaine/remplacement/' (le s veut dire substitute, remplacer en anglais), dans "^\.\/" les \ servent à rendre inexécutable le caractère suivant il s'agit en fait simplement de ^./

Hors ligne

 

#6 Tue 01 December 2009 22:21

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Merci pour les explications supplémentaires, j'ai testé et ça marche. C'est d'ailleurs assez impressionnant. Je n'ai pas encore compris à quoi servent les symboles { }.

En tout cas ça m'a fait gagné du temps ; mais surtout j'ai pu mettre un premier pied dans la programmation en shell et ça c'est génial.
J'ai tenté de poursuivre en affichant tous les rasters importés avec la commande

Code:

for list in `g.list type=rast mapset=ASTER`
do
echo $list
echo `d.rast -o map=${list}`
done;

Mais l'affichage du raster c'est-à-dire la commande d.rast ne fonctionne pas dans le terminal on dirait. Après je dois peut-être créer un autre sujet si je veux continuer cette discussion.

En tout cas merci beaucoup pour le coup de main

Dernière modification par mygeomatic (Tue 01 December 2009 22:22)

Hors ligne

 

#7 Wed 02 December 2009 09:04

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Ici ${list} est équivalent à $list mais cela peut être intéressant dans d'autre cas, notamment pour remplacer des variables dynamiquement ${$test} ou $test prendrait la valeur list, list2, etc. D'autres possibilités sont possible. La manière lamoins dangeureuse (ie qui apporte le moins de problème) est celle-ci : ${list} (le nom de la variable est protégée.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#8 Wed 02 December 2009 13:57

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Bien merci pour l'explication.

Es-ce que je dois lancer un nouveau sujet pour la commande d.rast dans le terminale ou je peux continuer d'en parler ici ?

Hors ligne

 

#9 Wed 02 December 2009 14:14

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Soyons pragmatique, reste ici, je créerai un nouveau sujet si cela dérive trop wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#10 Wed 02 December 2009 23:00

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Voilà, quand j'exécute mon script pour afficher tous les rasters du mapset ASTER le terminal bloque à la fonction d.rast et me demande choisir un "monitor".
Seulement je ne sais s'il en existe un qui corresponde au Display x de ma fenêtre Layer Manager ou de ma fenêtre GRASS GIS Map Display x.  J'ai bien essayé avec un d.mon start=x1 , d.mon select=x1 ça lance bien une nouvelle fenêtre pour afficher les rasters mais je voudrais les voir dans le Layer Manager et le Map Display.

Voilà si quelqun connait la manip à faire.

Sinon je me permet encore une question : je fais ces manips chez moi sous ubuntu mais je me demande quel est le moyen de les faire sous windows (pour le travail). J'ai bien essayé d'utiliser le OSGeo Shell mais sans succé.

Bonne soirée

Hors ligne

 

#11 Thu 03 December 2009 08:59

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Il me semble qu'il y a une autre commande que d.rast pour afficher une couche raster. Cette commande est l'ancienne commande (à vérifier).

Pour pouvoir lancer des commandes sous windows et linux, Python me parait plus judicieux que du Bash wink

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#12 Thu 03 December 2009 10:05

simon_g
Participant assidu
Lieu: Paris
Date d'inscription: 4 Oct 2006
Messages: 195
Site web

Re: Batch import de Raster sous GRASS

@mygeomatic :  Tu peux aussi émuler un système unix avec cygwin http://www.cygwin.com/ et travailler indifféremment en bash sous linux et windows

Hors ligne

 

#13 Thu 03 December 2009 14:27

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Ok je ne connais pas du tout Python mais j'ai l'impression qu'il représente une solution à beaucoup de problèmes. J'ai déjà vu que tu le plébiscitais, j'imagine que c'est une solution plus pérennes et plus intéressante si on veut aller plus loin dans la programmation.
Si tu as un conseil pour un point de départ pour commencer à apprendre (tuto, manuel, etc.).
Merci pour votre aide Yves et yarma.

EDIT:

Pardon j'avais pas ton message simon, merci je vais également regarder de coté.

Dernière modification par mygeomatic (Thu 03 December 2009 14:29)

Hors ligne

 

#14 Fri 04 December 2009 14:46

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Bon je reviens sur la discussion pour dire que je me suis lancé dans l'apprentissage du Python.
En parallèle je test cygwin mais je n'arrive pas à lancer Grass depuis le Shell. Pour info j'ai installé GRASS avec OSGeo4W donc tous les dossier /bin /etc... sont dans C:\OSGeo4W.
J'ai regardé dans les fichiers grass64.bat et grass.bat pour essayer de comprendre comment le lancer mais je n'y arrive toujours pas.
Voilà je m'en remet encore à vos conseils et à votre gentillesse

Hors ligne

 

#15 Fri 04 December 2009 15:45

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Cygwin est un émulateur, il permet d'installer des appli linux et de les lancer sous windows, pas de lancer des appli windows wink

Il te faut installer GRASS sous cygwin !

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#16 Fri 04 December 2009 18:29

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Ok merci.

Je crois que je vais discrètement installer une machine virtuelle et ubuntu sur mon pc du boulot pour pouvoir travailler sous linux.

Bon week end

Hors ligne

 

#17 Wed 09 December 2009 11:24

mygeomatic
Participant occasionnel
Date d'inscription: 14 Oct 2009
Messages: 24
Site web

Re: Batch import de Raster sous GRASS

Bonjour,

Je poursuis la discussion pour évoquer le fait que le problème de l'exécution de script (dans sens suite de commande GRASS) peut être réalisé sous Windows en démarrant GRASS en mode Text puis en collant la suite de commande préalablement rédigée.

Le mode Text est normalement facilement accessible si l'installation de GRASS s'est faite à partir de l'installateur OSGeo.

Bonne journée.

Hors ligne

 

Pied de page des forums

Powered by FluxBB