Suite

Comment générer des fichiers TFW pour une liste d'images ?

Comment générer des fichiers TFW pour une liste d'images ?


J'ai quelques images numériques qui ne sont pas géoréférencées. Par exemple.:

Img01.tif Img02.tif… Img99.tif

Par contre, j'ai un fichier texte, qui contient des informations de géoréférencement pour ces images. Par exemple, j'ai un fichierc: fwslist.txtqui contient les informations suivantes :

Img01.tfw 0,25 0 0 - 0,25 456258,125 4569852,125 Img02.tfw 0,25 0 0 - 0,25 456586,125 4570001,125 Img03.tfw 0,25 0 0 - 0,25 456952,125 4570300,125… Img99.tfw 0,25 0 0 - 0,25 458412,125 4575123,125

J'ai besoin de générer un fichier TFW pour chaque image du fichier texte. Par exemple. créer un fichier nomméC: fwsimg??.tfwcontenant les informations suivantes :

0.25 0 0 -0.25 456258,125 4569852,125

Quelqu'un connaît-il un outil capable de générer automatiquement ces fichiers TFW ?


Ce n'est pas du bon code, mais pour votre cas particulier, voici un python qui devrait vous éviter de les taper à la main :

f = open('list.txt', 'r') lines = f.readlines() pour la ligne dans les lignes : lineparts = line.split(") outfile = open(lineparts[0], 'w') pour i dans range(1, 4) : outfile.write(lineparts[i] + '
') outfile.write(lineparts[4] + lineparts[5] + '
') pour i dans range(6, 8): outfile.write(lineparts[i] + '
')

(le vrai code vérifierait l'intégrité, mais je suppose que vous pouvez vérifier les résultats)


AWK est peut-être l'outil le plus efficace pour une telle conversion de texte (bien que si vous êtes familier avec Perl vous pourriez le préférer, par habitude) : il a été conçu exactement pour ce genre de travail de reformatage rapide et ponctuel.

Voici le code AWK complet pour effectuer l'opération demandée sur l'entrée spécifiée :

COMMENCER {OFS="
"} {imprimer 2 $, 3 $, 4 $, 5 $ 6 $, 7 $, 8 $ > 1 $}

(L'absence de virgule entre$5et$6n'y a pas de faute d'impression : il concatène le signe moins-avec la valeur suivante0.25.)

Cela peut être tapé directement dans AWK, mais il est préférable de le mettre dans un fichier appelé, disons,tfw.awk. Il serait ensuite invoqué à partir d'une invite de ligne de commande comme

tfw liste.txt

ou alors

awk -f tfw.awk list.txt

(si l'environnement système n'a pas été configuré pour reconnaître les fichiers .awk comme exécutables).

Il s'exécutera instantanément, laissant les fichiers spécifiés (et les écrasant s'ils existent déjà).

Chaque système Unix est livré avec une copie d'AWK et il existe une version GNU gratuite pour Windows. Je viens de télécharger la distribution GNU et de l'exécuter sur un poste de travail Windows 64 ; ça fonctionne bien.