#1 Mon 24 March 2008 23:57
- Romain72
- Participant occasionnel
- Date d'inscription: 20 Mar 2008
- Messages: 10
Décaler un vecteur dans ENVI
Bonjour,
Je dispose d'un MNT au format EVF mais celui ci est décalé dans le système de projection. Apparemment, il s'agirait simplement d'une translation.
Cependant je n'arrive pas à trouver la commande sous ENVI qui me permet de réaliser cette translation. Je dispose d'un plan topo pour recaler le MNT et de points géodésiques qui sont visibles sur le MNT.
Merci de votre aide
Romain
Hors ligne
#2 Tue 25 March 2008 13:56
- pharos1
- Participant actif
- Date d'inscription: 28 Nov 2006
- Messages: 81
Re: Décaler un vecteur dans ENVI
Salut Romain,
bienque tu exiges ENVI comme outil, mais je te suggere l'ArcGIS, le dernier je pense que c'est le plus approprié dans ce cas là. il te souffira de donner les même proprio. du fichier base à ton MNT une fois que tu l'exporte dans le domaine de ArcGIS.
bonne chance
Hors ligne
#3 Wed 26 March 2008 11:05
- Cla1r3
- Juste Inscrit !
- Date d'inscription: 7 Sep 2007
- Messages: 7
Re: Décaler un vecteur dans ENVI
Bonjour Romain,
Je ne vois pas comment faire ça dans ENVI (à part peut être en modifiant les paramètres de projection du fichier .evf: False Easting/False Northing, mais ça risque de poser d'autres problemes par la suite)
Une autre solution serait de passer par la programmation IDL/ENVI batch pour modifier les coordonnées X,Y de ton fichier .evf:
Ci-dessous un code qui lit un fichier .evf de départ et ré-écrit les mêmes coordonnées translatées (par exemple de 10 sur les X) dans un autre fichier .evf. Il faudra modifier les chemins d'accès dans le code.
J'espère que ca pourra t'aider,
PRO decale_coord_evf
COMPILE_OPT STRICTARR
ENVI, /RESTORE_BASE_SAVE_FILES
ENVI_BATCH_INIT
;; Ouvrir le fichier EVF
evf_fname = 'C:\roads.evf'
evf_id = ENVI_EVF_OPEN(evf_fname)
;; Infos sur le fichier .evf d'origine
ENVI_EVF_INFO, evf_id, $
NUM_RECS=num_recs, $ ;nombre d'entites
DATA_TYPE=data_type, $ ;type de donnees
PROJECTION=projection, $ ;info carto
LAYER_NAME=layer_name ;nom de la couche vectorielle
;; Fichier EVF modifie (meme proj, meme nombre d'entites, meme type)
evf_out_fname = 'C:\roadsOut.evf'
evf_out_ptr = ENVI_EVF_DEFINE_INIT(evf_out_fname, $
PROJECTION=projection, DATA_TYPE=dt, LAYER_NAME=layer_name+'_modified')
;; Pour chaque entite, recuperer ses coordonnees, les modifier et les sauvegarder dans l'autre fichier .evf
print, "Nombre d'enregistrements: ",num_recs
FOR i=0,num_recs-1 DO BEGIN
record = envi_evf_read_record(evf_id, i)
record[0,*] += 10.0D ;par exemple, translater les X (attention a conserver le meme typage, dans mon evf, c'est de DOUBLE)
envi_evf_define_add_record, evf_out_ptr, record
ENDFOR
;; Fermer les fichiers EVF
ENVI_EVF_CLOSE, evf_id
evf_out_id = ENVI_EVF_DEFINE_CLOSE(evf_out_ptr, /RETURN_ID)
ENVI_EVF_CLOSE, evf_out_id
ENVI_BATCH_EXIT
END
Hors ligne
#4 Wed 26 March 2008 23:07
- Romain72
- Participant occasionnel
- Date d'inscription: 20 Mar 2008
- Messages: 10
Re: Décaler un vecteur dans ENVI
Merci beaucoup de votre réponse.
Je vais essayer dès maintenant d'utiliser le code que vous m'avez fourni pour translater mon vecteur.
Romain
Hors ligne