Pages: 1 2
- Sujet précédent - QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles - Sujet suivant
#1 Mon 23 July 2012 13:33
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
J'étudie le phénomène de transport d'aérosols désertiques (poussières saharien) au dessus de l'océan atlantique à partir d'un indice dérivé de l'imagerie satellitaire qui est "l'épaisseur optique d'aérosols" issu du capteur MODIS AQUA. Je voudrais caractériser la variation de la couche d'aérosols (épaisseur optique d'aérosols) lors du transport du nuage sur une certaine durée (séries temporelles). En fait j'essaie de suivre le déplacement du pixel chargé en aérosols (en fonction de la direction des vents bien sûr) en calculant la différence d'épaisseur optique entre un début et une fin de zone. Sachant que j'utilise QGIS 1.7.3 et je dispose de données d'épaisseur optique d'aérosols sous forme de grille (grids) au format HDF4 (à une bande) sur mes séries temporelles.
Je suis partagé entre deux approches différentes et je ne sais laquelle choisir et comment l'effectuer avec QGIS.
La première, je compte réaliser un stack (superposition) de mes grids de séries temporelles pour obtenir une seule grille à travers un MAKESTACK à partir de la calculatrice raster (ou un autre outil que je connais pas). Et après, calculer mes valeurs de différences d'épaisseurs optique sur la grille résultante. Mais je me demande comment pourrai-je parvenir à calculer cette différence de valeur sur une seule grille sachant que le choix du (ou des) pixel (s) de fin de zone est fonction de la direction du vent (suivant un angle)? Existe-il des fonctions ou méthode sur QGIS ou son interfaçage avec Grass permettant de réaliser (ou modéliser) cette opération?
La deuxième, considérer mes grilles sans superposition et calculer la différence d'épaisseur optique entre un pixel de la première et celui de la seconde en considérant le déplacement du pixel suivant la direction du vent et ainsi de suite jusqu'à la dernière grille correspondant à la dernière série temporelle de l'étude. Ainsi j'obtiendrai un ensemble de valeurs d'épaisseur optique sous forme de séries temporelles que je compte analyser en fin.
Cette deuxième approche me parait plus logique, mais la méthode de sa réalisation sur QGIS est bien mon interrogation.
Merci d'avance de votre réponse et proposition.
Hors ligne
#2 Mon 23 July 2012 13:57
- yopyop25
- Participant actif
- Lieu: besançon
- Date d'inscription: 2 Jun 2008
- Messages: 144
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Le plugin time manager permet de visualiser des données datées (format vecteur ou raster).
Voir ce blog :
http://underdark.wordpress.com/2012/03/ … e-manager/
C'est peut-être un premier élément de réponse...
Yohan
Hors ligne
#3 Mon 23 July 2012 15:00
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Ok merci pour ce début de réponse qui m'est essentiel.
Je vais voir cet outil.
Hors ligne
#4 Tue 24 July 2012 15:05
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
J'ai exploré "TimeManager" qui est intéressent tout de même.
Mais il permet juste une visualisation de la variabilité spatio-temporelle de la série à étudier, mais ne permet pas d'estimer ces variabilités à travers un calcul quelconque. Et la finalité de mon travail consiste à évaluer la différence de valeurs de pixel entre 2 instants t et t+1.
Donc est-ce quelqu'un aurait une idée pour effectuer cette opération sur QGIS et/ou Grass.
Merci
Hors ligne
#5 Wed 25 July 2012 08:51
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Etant donnés deux rasters de deux instants T et T+i, vous pouvez créer un raster différence r(T+i) - r(T) pour avoir la différence: r.mapcalc ou tout simplement la calculatrice raster
Vous pourriez lisser le résultat avec grass::r.neighbors
Pour vous focaliser sur chaque pixel, je ne vois que R qui sera bcp plus adéquat dans votre cas. Là, vous pourrez établir une correspondance pour chaque pixel entre les deux instants.
geodata au cerema et petits billets en géomatique
Hors ligne
#6 Wed 25 July 2012 11:24
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Moi aussi je pense que le logiciel R est bien plus adapté a ce que tu veux faire.
Avec il est très facile de manipuler de multiples raster/grid sous la forme de matrices et d'y faire toutes sortes d'opérations.
Par exemple avec tes rasters de vent créer un index spatial et temporel te permettant de récupérer facilement le pixel qui t'intéresse à chaque pas de temps dans tes rasters d'aérosols.
Toutefois pour cela il te faudra te familiariser avec ce logiciel très puissant mais qui fonctionne uniquement en ligne de commande.
En cherchant, tu trouveras de très nombreux documents sur le web pour démarrer, en voici 2 par exemple :
http://www.jerome-mathieu.com/pdf/tutor … uter.R.pdf
http://rug.mnhn.fr/semin-r/PDF/INED-SFd … 280411.pdf
Si tu es plutôt livres et si tu lis l'anglais :
- la référence c'est "The R book" mais ce livre est très axé sur une utilisation statistique de R.
- pour la manipulation de données et la programmation sous R, je recommande "Introduction to Scientific Programming and Simulation With R"
Bonne lecture
Rodolphe
Dernière modification par freesnowpetrel (Wed 25 July 2012 11:24)
Hors ligne
#7 Wed 25 July 2012 12:54
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Ok, merci Baobazz et freesnowpetrel pour vos réponses.
Je vais m'y mettre avec R (avec lequel j'ai déjà une petite initiation).
Je vous tiendrai au courant de la suite.
Cordialement
Hors ligne
#8 Wed 25 July 2012 14:18
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Je te conseille la librairie R raster qui répondra très bien à tes besoins.
tu peux jeter un oeil à cette vignette http://cran.r-project.org/web/packages/ … Raster.pdf où sont détaillées les calculs que tu auras à réaliser. C'est assez simple pour soustraire deux rasters, s'ils ont la même étendue et la même résolution.
Code:
s1 <- raster("s.tif") s2 <- raster("s_plustard.tif") dif <- s2 - s1
geodata au cerema et petits billets en géomatique
Hors ligne
#9 Wed 25 July 2012 15:03
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Ok merci.
Mais comme l'a suggéré freesnowpetrel pour la création d'un index spatial, mes données vent sont un fichier texte au format csv (et non un raster) avec les caractéristiques du vent (direction, vitesse...). Mon soucis est comment créer cet index à partir de ce fichier.
Merci d'avance de votre aide.
Hors ligne
#10 Wed 25 July 2012 15:23
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
à regarder, sans doute, un paquet appelé spacetime dans R:
http://cran.r-project.org/web/packages/ … index.html
Dans la vignette http://cran.r-project.org/web/packages/ … cetime.pdf
il est question de "interpololating irish wind"
Dernière modification par baobazz (Wed 25 July 2012 15:24)
geodata au cerema et petits billets en géomatique
Hors ligne
#11 Wed 25 July 2012 16:46
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
ok merci je regarde ça et te mets au courant.
Hors ligne
#12 Wed 25 July 2012 19:41
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
J'ai chargé et installé le package gstat.
Comme les données d'exemple du paquet concerne l'Irland, je dois importer mon propre fichier de données csv dans R pour faire les traitements.
Et je suis encore tout au début avec R, j'ai un peu du mal. Peut être qu'il y a un travail de nettoyage du fichier à faire en amont d'abord.
Je l'ai mis en pièces jointes pour une visualisation et me dire où se trouverait le problème. Je précise que ce sont des mesures météo de deux stations en Mauritanie (Nouadhibou et Nouakchott).
Merci d'avance de votre réponse
Hors ligne
#13 Thu 26 July 2012 10:31
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Je vais essayer d'apporter un peu d'eau a ton moulin.
Préambule : la sute est un cadre théorique ne prenant en compte aucune limitation en terme de mémoire disponible, il faudra surement adapter en découpant par étapes...
L'idée que j'avais est de créer des tableaux à 3 dimensions (x,y,t) pour stocker tes rasters/csv. x,y étant les dimensions de tes rasters en pixel ou de tes matrices en lignes et colonnes et t étant la variable temporelle) Puis à l'aide de ce tableau des vents créer un index spatial et temporel te permettant de localiser le pixel qui t'intéresse à chaque pas de temps en fonction de tes critères, puis appliquer cet index au tableau des aérosols pour récupérer les valeurs.
En décomposant ça donnerai :
Code:
# creer un tableau 3D vide (x=5,y=5,t=3) vent <- array(dim=c(5,5,3)) # chemin d'accès au dossier contenant les fichiers de vent folderpath <- "C:/dossier/dossier/dossier" # créer un vector contenant les nom des fichiers csv à charger fileslist <- list.files(folderpath, pattern='*.csv') # créer le pas de temps t t<-0 # faire une boucle sur les fichiers de la liste pour remplir le tableau 3D # attention ceci présuppose que les fichiers soient dans l'ordre croissant du pas de temps for (filename in fileslist) { # recréer le chemin complet du fichier filepath <- paste(folderpath,filename,sep='/') # ajouter 1 au pas de temps t t <- t+1 # lire le fichier et le sauver dans le tableau 3D de vent vent[,,t] <- read.table(filepath,header=F,sep=',') } # ensuite il faut que tu détermine ton point de départ (x,y,1) selon tes caractéristiques.. 1 étant le premier pas de temps # par exmple en haut à gauche p <- c(1,1,1) # vent[p1] te retourne la valeur du pixel de coordonnées 1,1 pour le pas de temps 1 # Puis dans une boucle correspondant à ton nombre de pas de temps # il te faut extraire (je suppose)les conditions de vents autour de ce point (donc les 9 valeurs autour de ce point) au pas de temps 1 pour connaitre la position du point suivant au pas de temps 2 ventlocal <- vent[p[1]-1:p[1]+1,p[2]-1:p[2]+1,1] # puis appliquer ta méthode de sélection genre max(vent_local) et en déduire la position de ton prochain pixel # stocker la valeur de p dans ton index spatio-temporel idx[] <- rbind(idx,p) # stocker la nouvelle position de ton pixel dans p p <- nouvelles position # et repartir dans la boucle # attention a penser à mettre des conditions pour sortir de la boucle quand ton pixel sort de ton raster #Une fois que ta boucle a finis de tourner, tu as ton index spatio-temporel #tu n'as plus qu'a créer ton tableau 3D d'aérosols comme ci-dessus pour les vents et utiliser ton index pour obtenir tes valeurs d'aérosols valeurs <- aero[idx]
Bon pour des raisons de limites de mémoire, il te faudra peut-etre découper ton travail par étapes et/ou détruire ton objet vent (pour libérer de la mémoire), une fois que tu as ton index et avant de créer ton objet aero à l'aide de la commande :
Code:
rm(object)
Voilà pour une piste de travail, bien sur il serait mieux/plus rapide de ne pas faire de boucles et d'utiliser des fonctions comme sapply() par exemple pour travailler en mode vecteur, mais j'ai voulut essayer de rester simple.
Bon courage et tiens nous au courant, tu peux même poster ton code.
A+
Rodolphe
Dernière modification par freesnowpetrel (Thu 26 July 2012 10:32)
Hors ligne
#15 Thu 26 July 2012 13:01
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Merci.
je m'excuse baobazz le fichier était beaucoup trop lourd pour l'envoi avec georezo. J'ai extrait la série temporelle qui m'intéresse pour le moment càd celle de mars 2004 (du 26 février au 5 avril 2004) qui correspond à l'observation d'une grande tempête de poussière dans le Sahara. Donc je fais pour un premier temps une analyse journalière du phénomène avec mes valeurs journalière d'épaisseur optique d'aérosols. Mais dans le fichier vents, c'est principalement les informations sur la station (STN), le temps (TIME), la direction et la vitesse du vent (DRCT, SPED) j'aurai à exploiter, notamment pour définir le déplacement de mon pixel et créer mon index spatial. Sachant aussi que ces paramètres vent sont données dans le fichiers heure après heure. Peut être que je devrais faire une moyenne journalière.
Merci freesnowpetrel pour le code qui parait très logique, claire et précis. Je vais voir ça en attendant de finir avec la structuration de mon fichier csv pour être sûr de pouvoir l'importer.
N'hésitez pas à pas me faire signe si le fichier n'est toujours pas là.
A toute
Hors ligne
#16 Fri 27 July 2012 18:32
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Juste pour vous informer de ce petit silence. Je suis encore sur la phase de nettoyage de mon fichier "données vent" et de choix de mes séries temporelles d'analyse . Je pense que c'est le préalable à faire. Dès que je finis ce travail, j'appliquerai le code proposé. Et je vous tiendrai au courant de la suite avec le code.
Hors ligne
#17 Tue 31 July 2012 19:49
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
J'ai fini le nettoyage de la partie de mon fichier csv de données vent qui m’intéresse pour le moment . J'avais pas mal de chose à faire dessus car je devais déterminer des moyennes journalières sur plusieurs de mes paramètres vent. Surtout celles de direction de vent qui était assez délicate à réaliser. J'ai commencé à exécuter le code sur R ci-dessous:
creer un tableau 3D vide (x=7,y=7,t=1)
vent <- array(dim=c(7,7,1))
# chemin d'accès au dossier contenant les fichiers de vent
folderpath <- "E:/projetSILAT_golfe/vents/vents_mauritanie.csv"
# créer un vecteur contenant les nom des fichiers csv à charger
fileslist <- list.files(folderpath, pattern='*.csv')
# créer le pas de temps t
t<-0
Mais je suis au niveau de la création des boucles. Freesnowpetrel, j'ai pas compris quand tu parle toujours de mes fichiers csv, alors que je n'en ai qu'un seul fichier qui regroupe l'ensemble des paramètres de vent (direction, vitesse, visibilité) à des dates. Ou faut-il créér un fichier pour chaque paramètre et faire ainsi la boucle pour remplir le tableau 3D ou bien le fichier peut être exploité dans l'ensemble avec tous les paramètres regroupés dans un seul fichier. Je voudrais bien cette précision avant de tenter de faire la boucle. Aussi, si je pouvais avoir plus de précision sur la fonction à utiliser pour faire la boucle, ça m'aurait fait gagner en temps. Néanmoins je mets en pièces jointes mon fichier traité (csv et xls) pour que vous voyez bien la structure de mes données.
Merci
Dernière modification par celdia (Tue 31 July 2012 19:50)
Hors ligne
#18 Wed 01 August 2012 07:40
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Ah ben là, moi aussi je suis un peu perdu en voyant tes données...
Je pensais que tu avais pour chaque date un raster de vent et un raster d'aérosol, les 2 ayant la même résolution et la même étendu géographique.
Mais apparemment tu n'as que des rasters d'aérosols et des données de vent sans information géographique...comment fais tu le lien entre les 2 ?
Pour la boucle c'est bien sur dans le cas ou tu as plusieurs fichiers sinon ce n'est pas nécessaire.
Attention ton fichier csv contient plein de valeurs vides, besoin de nettoyage.
De plus ce n'est pas un vrai csv, puisque les valeurs sont séparées par des point virgules et non des virgules.
A+
Rodolphe
Hors ligne
#19 Wed 01 August 2012 12:04
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Ok effectivement j'ai des rasters aérosols (épaisseur d'aérosols) et un fichier vent pour chaque date indiquant des informations de paramètre de vent (nom de la station, direction du vent en degré, vitesse du vent en m/s, visibilité en km et pression atmosphérique en hpa) dans 2 stations en Mauritanie. Mais je compte considérer une seule station qui est plus proche de ma zone d'étude (en mer).
Je crois bien que le fichier csv peut avoir comme caractère de séparation la virgule ou le point virgule à mon avis. C'est vrai que dans mon fichier j'ai la colonne de valeurs de pression atmosphérique (ALT) vide. J'avais pas encore calculer les moyennes des valuers de pressions.
Peut être que l'idéal serait de créer un raster pour mon fichier vent par interpolation des paramètres vents de la (ou les deux) station(s) sur ma zone d'étude pour obtenir un raster vent. Ainsi on serait peut être dans l'idée que tu avais.
Ou bien faut-il voir un autre logiciel (QGIS/GRASS) et abandonner la piste R.
J'attends vos réponses.
Merci
Hors ligne
#20 Wed 01 August 2012 12:14
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Dans ton premier message, tu parles de suivre le déplacement du pixel chargé en aérosol en fonction du vent.
Comment détermines-tu quel pixel est chargé en aérosol au temps 1 ?
Comment détermines-tu la position de ton pixel au temps 2 ?
Merci de m'éclairer sur ces questions pour voir comment t'aider.
Rodolphe
Hors ligne
#21 Wed 01 August 2012 12:58
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Je précise d'abord que ma zone d'étude se trouve en mer au large des côtes mauritaniennes. Et l'une des stations (Nouadhibou) de mesure des paramètres vent est très proche de ma zone d'étude.
Pour répondre à tes questions:
Je compte choisir un pixel à proximité de la station de mesure, il est situé au milieu de la 1ere colonne à droite sur mon raster. Mais je peux aussi choisir n'importe quel pixel situé sur cette colonne.
Le pixel suivant sera choisi en fonction de l'angle indiquant la direction du vent (en degré) dans mon fichier csv.
D'autre part, une autre approche que j'ai pour mon étude, c'est de considérer les valeurs de paramètre de vent initial fournie heure par heure dans la journée par les stations. Ainsi je pourrai calculer les différences d'épaisseurs au cours de la journée (sur une journée) sur le même raster aérosol (données journalières) en fonction de la variabilité des paramètres du vent dans la journée. On se retrouve avec un seul raster et faire la différence de valeur des pixels sur le même raster. Et faire de même pour les autres rasters. Je pense que cette opérations serait plus facile à réaliser avec R et même possible sur QGIS/GRASS avec les fonctions de zonation. C'est une autre approche que j'ai pour cette problématique très délicate à traiter.
Merci
Hors ligne
#22 Wed 01 August 2012 13:44
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Par la première colonne à droite, tu veux dire la dernière colonne en alllant de la gauche vers la droite je suppose.
Dans ce cas, si ton raster fait 500pixelsx500pixels, ton point de départ au milieu de la dernière colonne au temps 1 sera donc :
Code:
p <- c(500,250,1)
Il faut ensuite pour chaque ligne de ton fichier csv (chaque ligne représentant un pas de temps différent) que tu détermines la position de ton pixel en fonction de la direction du vent pour créer ton index spatio temporel.
Pour cela je créerai un tableau de 3 colonnes: angle,x,y contenant les différentes valeur d'angle possible et leur conséquence sur le x et y de ton pixel (colonnes et lignes respectivement, 1,1 étant le premier pixel en haut à gauche).
Supposons que le nord soit 0, l'est 90...ça donnerai un truc du genre :
angle,x,y
0,0,1
45,-1,1
90,-1,0
...
soit sous R :
Code:
vent2pix <- data.frame(angle=c(0,45,90),x=c(0,-1,-1),y=c(1,1,0))
Ensuite pour chacune des lignes de ton csv tu appliques ce tableau et ça te donne la nouvelle position de ton pixel que tu stockes comme indiqué plus haut dans mon poste #13.
Code:
# Par exemple si la direction de ton vent est 45 dir<-45 # récupérer l'index de la ligne correspondante dans mon tableau vent2pix idx<-which(vent2pix$angle==dir) # calculer la nouvelle position de mon pixel au temps t+1 p<-c(p[1]+vent2pix$x[idx],p[2]+vent2pix$x[idx],p[3]+1)
Voilà un peu de grain a moudre.
A+
Rodolphe
Dernière modification par freesnowpetrel (Wed 01 August 2012 13:46)
Hors ligne
#23 Wed 01 August 2012 20:09
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Merci Rodolphe.
Je vois que j'ai vraiment du grain à moudre. Mais la méthode me parait vraiment logique et dans le sens de ce que je voudrais faire.
Cependant j'ai un peu du mal à comprendre la méthode de calcul des valeurs de x et y suivant l'angle. Je vois bien que tu a considéré le nord à 0 et l'est à 90, donc dans le sens des aiguilles d'une montre, comme c'est bien indiqué dans l'étude des vents avec le diagramme de la rose des vents (ce que j'envisageais bien aussi). J'estime que tu es parti du point de départ considéré (500,250) comme dans ton exemple.
Pour l'angle 0, le pixel se déplace vers le nord, donc la colonne reste invariable (x=0) et le pixel se déplace d'une ligne (1), ce qui donne tes valeurs: 0 et 1.
Pour faire plus facile allons directement à l'angle 90: le pixel se déplace vers l'est, donc sur la même ligne (0) et change de colonne (mais sort du raster) et on trouve -1 (est-ce le prince quand le pixel sort du raster il faut donner la valeur -1): -1, 0
Pour l'angle 45, j'ai pas trop bien compris, seulement que le pixel sort du raster et se déplace en ligne et colonne, et tu as les valeurs -1 et 1.
J'essaye de trouver une astuce pour bien comprendre la méthode, donc je ne sais si c'est bien comme ça. Parce que j'ai des angle de plus de 90° donc il faudrait bien que je comprenne la méthode.
Merci de m'aiguiller sur cette partie.
Bien à toi
Hors ligne
#24 Thu 02 August 2012 08:06
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Quelques explications (si je comprend bien):
- si l'angle est 0, le vent vient du nord, donc le pixel/nuage se déplace vers le sud/le bas, donc vu que les coordonnées x et y sont en colonnes et lignes en partant du haut à gauche, ça fait x+0 et y+1.
- si l'angle est 90, le vent vient de l'est, donc le pixel/nuage se déplace vers l'ouest/la gauche, donc x-1 et y+0.
- si l'angle est 45, le vent vient du nord-est, donc le pixel/nuage se déplace vers le sud-ouest/bas-gauche, donc x-1 et y+1.
Ai-je bon ?
Pour savoir si ton pixel sort du raster ou pas il faut ajouter un test conditionnel genre si x>1 ou x<500 ou y>1 ou y>500 alors j'enregistre ma nouvelle valeur de p et je continue
Code:
#nb de pas de temps te=7 #creation du tableau des valeurs de vents vent2pix <- data.frame(angle=c(0,45,90),x=c(0,-1,-1),y=c(1,1,0)) #import de ton csv dans une table fonction read.csv() vent<-read.csv(...) #position du pixel de depart p <- c(500,250,1) #initalisation de l'index spatial spaidx<-p #boucle sur le nb de pas de temps for (t in 1:te) { #récupérer l'angle du vent au pas de temps t=ligne de ta table issue de ton csv angle <- vent$DRCT[t] # récupérer l'index de la ligne correspondante dans mon tableau vent2pix idx<-which(vent2pix$angle==angle) # calculer la nouvelle position de mon pixel au temps t p<-c(p[1]+vent2pix$x[idx],p[2]+vent2pix$x[idx],p[3]+1) #verifier que mon pixel est toujours dans mon raster if (p[1]>1 or p[1]<500 or p[2]>1 or p[2]<500) then{ #stocker la nouvelle position de mon pixel p dans mon index spatial spaidx<-rbind(spaidx,p) } }
Dans le code ci-dessus, la boucle continue de s'éxécuter si le pixel sort du raster, dans l'hypothèse où il y reviendrait avant la fin du temps te, toutefois la position du pixel hors raster n'est pas retenue dans l'index spatial.
Bon tu as maintenant une bonne partie du code et je pense toute la logique, alors a toi de jouer.
A+
Rodolphe
Dernière modification par freesnowpetrel (Thu 02 August 2012 08:07)
Hors ligne
#25 Thu 02 August 2012 09:31
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Je te remercie Rodolphe.
Juste une petite précision:
Selon la dénomination en météorologie, le vent du nord souffle du nord vers le sud, donc l'angle serait de 180° normalement. Et le vent du sud souffle du sud vers le nord et l'angle serait de 0°. C'est le point de départ du vent qui est considéré. Mais je t'avoue que j'ai très bien compris tes explications et ça m'est un grand apport dans mon étude. Donc je me mets au travail pour le code.
Merci encore une fois
A bientôt
Hors ligne
#26 Thu 02 August 2012 10:01
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Si je peux permettre, je crois savoir qu'il y a plusieurs référentiels/origine dans la détermination du vent dans le monde de l'océanographie.
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
#27 Thu 02 August 2012 11:22
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Certainement oui Yves, mais moi la doc que j'ai encore rencontré indique toujours la dénomination du vent par rapport à son origine. Ce ne sont juste que des conventions.
Cordialement
Hors ligne
#28 Thu 02 August 2012 19:09
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Salut Rodolphe, je reviens encore t'embêter.
J'ai un problème dans l'exécution de ma boucle. Je pense qu'il faut le lancer en entier (globalement) sur Tinn-R pour qu'il s'éxécute dans la console R. J'ai un message d'erreur suivant qui apparait:
source(.trPaths[4])
Erreur dans source(.trPaths[4]) :
C:\Documents and Settings\Etudiant\Application Data\Tinn-R\tmp\file.r:11:16: symbole inattendu(e)
10: p<-c(p[1]+vent2pix$x[idx],p[2]+vent2pix$x[idx],p[3]+1)
11: if (p[1]>1 or
^
Code:
#nombre de pas de temps: séries allant du 26 fevrier au 6 avril 2004 te=40 #Création du tableau des vents: il faut créer un tableau de 3 colonnes: angle, x, y, contenant les différentes valeurs possibles d'angles et leur conséquence sur le x et y des pixels vent2pix <- data.frame(angle=c(0,10,20,90,100,250,260,290,310,320,360),x=c(0,1,1,1,1,-1,-1,-1,-1,-1,0),y=c(-1,-1,-1,0,1,1,1,-1,-1,-1,-1)) #Import de mon csv dans une table vent<-read.csv("E:/ProjetSILAT_golfe/vents/Nouadhibou/vents_nouadhibou.csv", header=TRUE) #position du pixel de depart au quart de la dernière colonne à droite p <- c(500,125,1) #initalisation de l'index spatial spaidx<-p #boucle sur le nb de pas de temps for (t in 1:41) { #récupérer l'angle du vent au pas de temps t=ligne de ta table issue de ton csv angle <- vent$DRCT[t] # récupérer l'index de la ligne correspondante dans mon tableau vent2pix idx<-which(vent2pix$angle==angle) # calculer la nouvelle position de mon pixel au temps t p<-c(p[1]+vent2pix$x[idx],p[2]+vent2pix$x[idx],p[3]+1) #verifier que mon pixel est toujours dans mon raster if (p[1]>1 or p[1]<500 or p[2]>1 or p[2]<500) then{ #stocker la nouvelle position de mon pixel p dans mon index spatial spaidx<-rbind(spaidx,p) } }
Apparemment ce sont les deux dernières lignes de mon code qui posent problème.
Pour les angles, j'ai considérer tous les angles prises par ma séries (es-ce comme ça?) pour pouvoir être indexé sur mon tableau. Ou bien il faut juste prendre que les trois angles 0, 45, 90 (mais j'ai essayé ça revient à la même erreur).
Aussi j'ai bien configurer Tinn-R sur R en installant les packages svSocket et Tinn-R et en vérifiant l'existence de mon fichier Tinn-R dans :
Code:
##=============================================================== ## Tinn-R: necessary packages and functions ## Tinn-R: >= 2.2.0.2 with TinnR package >= 1.0.3 ##=============================================================== ## Set the URL of the preferred repository, below some examples: options(repos='http://software.rc.fas.harvard.edu/mirrors/R/') # USA #options(repos='http://cran.ma.imperial.ac.uk/') # UK #options(repos='http://brieger.esalq.usp.br/CRAN/') # Brazil library(utils) ## Check necessary packages necessary <- c('TinnR', 'svSocket') installed <- necessary %in% installed.packages()[, 'Package'] if (length(necessary[!installed]) >=1) install.packages(necessary[!installed]) ## Load packages library(TinnR) library(svSocket) ## Uncoment the two lines below if you want Tinn-R to always start R at start-up ## (Observation: check the path of Tinn-R.exe) #options(IDE='C:/Tinn-R/bin/Tinn-R.exe') #trStartIDE() ## Set options options(use.DDE=T) ## Start DDE trDDEInstall() .trPaths <- paste(paste(Sys.getenv('APPDATA'), '\\Tinn-R\\tmp\\', sep=''), c('', 'search.txt', 'objects.txt', 'file.r', 'selection.r', 'block.r', 'lines.r'), sep='')
Merci d'avance
Hors ligne
#29 Fri 03 August 2012 09:06
- freesnowpetrel
- Participant assidu
- Lieu: Pretoria, Afrique du Sud
- Date d'inscription: 1 Mar 2007
- Messages: 222
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Bonjour,
Pour le tableau vent2pix, oui il faut considérer toutes les valeurs possibles d'angle.
Pour l'erreur, c'est ma faute, mais en cherchant un peu tu aurais pu trouver...je me suis trompé d'opérateur logique, "or" n'existe pas dans le language R, il faut utiliser le symbole "|" à la place.
Code:
(p[1]>1 | p[1]<500 | p[2]>1 | p[2]<500)
C'est ça quand on fait en même temps du SQL, du PHP et du R, on se mélange parfois les pinceaux entre les différents langages...
A+
Rodolphe
Dernière modification par freesnowpetrel (Fri 03 August 2012 09:07)
Hors ligne
#30 Fri 03 August 2012 20:17
- celdia
- Participant occasionnel
- Date d'inscription: 19 Feb 2011
- Messages: 39
Re: QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles
Ok je comprend bien Rodolphe que c'est pas facile de s'y mettre sur tous ces langages à la fois.
Mais j'ai toujours un problème avec la dernière ligne de mon code. Est-ce que l'instruction "then" existe aussi dans R. Je l'ai pas trouvé dans mes recherches. Souvent l'instruction "if" est combiné avec "else" ou bien faire un break pour sortir de la boucle. Ce n'est t-il pas nécessaire. Car apparemment sur le code l'erreur se trouve à ce niveau. J'essaie de voir dans la doc, mais j'ai pas trouvé un cas semble au mien, car le "if" est souvent appliqué au t dans for.
Merci de m'aider à dénicher l'erreur sur le code ci dessous:
Code:
> te=40 > vent2pix <- data.frame(angle=c(0,10,20,90,100,250,260,290,310,320,360),x=c(0,1,1,1,1,-1,-1,-1,-1,-1,0),y=c(-1,-1,-1,0,1,1,1,-1,-1,-1,-1)) > vent<-read.csv("E:/ProjetSILAT_golfe/vents/Nouadhibou/vents_nouadhibou.csv", header=TRUE) > p <- c(500,125,1) > spaidx<-p > for (t in 1:40) + { + angle <- vent$DRCT[t] + + idx<-which(vent2pix$angle==angle) + + p<-c(p[1]+vent2pix$x[idx],p[2]+vent2pix$x[idx],p[3]+1) + + if (p[1]>1 | p[1]<500 | p[2]>1 | p[2]<500) then{ Erreur : '{' inattendu(e) dans : " if (p[1]>1 | p[1]<500 | p[2]>1 | p[2]<500) then{" > spaidx<-rbind(spaidx,p) > > } Erreur : '}' inattendu(e) dans " }" >
A+
Hors ligne
Pages: 1 2
- Sujet précédent - QGIS 1.7.3 et/ou Grass : Suivi du pixel sur des séries temporelles - Sujet suivant