Créer des fichiers TFW et PRJ pour le dossier de fichiers GeoTIFF? [fermé]

16

J'ai un dossier qui contient un grand nombre de fichiers au format GeoTIFF.

J'ai besoin de générer des fichiers PRJ et TFW pour chacune de ces images.

Y a-t-il un moyen de le faire?

Joe
la source
en utilisant quel logiciel? Qu'est-ce qui est à votre disposition?
jbchurchill

Réponses:

16

La façon la plus simple de générer des TFW est d'écrire un script en Python ou Java en utilisant GDAL, qui serait une poignée de lignes de code.

La création de fichiers à l'ancienne (avant ArcGis 9) .prj n'est pas prise en charge GDAL , uniquement en lecture (voir ici ). Les fichiers de nouveau style (basés sur WKT) sont pris en charge pour la création, mais il n'est pas garanti qu'ils couvrent tous les cas. Mais de toute façon, dans un cas suprême d'activité de déplacement, j'ai écrit un script Python qui fait ce dont vous avez besoin. Il n'y a pas de vérification d'erreur ou quoi que ce soit, mais cela fonctionne pour le répertoire des tiffs que je devais remettre, YMMV.

# Written by MerseyViking (mersey dot viking at gmail dot com), 2011.
# Released into the public domain - May 8, 2011
# I accept no responsibility for any errors or loss of data, revenue, or life this script may cause. Use at your own risk.

import osgeo.gdal as gdal
import osgeo.osr as osr
import os
import glob
import sys

def generate_tfw(path, gen_prj):
    for infile in glob.glob(os.path.join(path, '*.tif')):
        src = gdal.Open(infile)
        xform = src.GetGeoTransform()

        if gen_prj == 'prj':
            src_srs = osr.SpatialReference()
            src_srs.ImportFromWkt(src.GetProjection())
            src_srs.MorphToESRI()
            src_wkt = src_srs.ExportToWkt()

            prj = open(os.path.splitext(infile)[0] + '.prj', 'wt')
            prj.write(src_wkt)
            prj.close()

        src = None
        edit1=xform[0]+xform[1]/2
        edit2=xform[3]+xform[5]/2

        tfw = open(os.path.splitext(infile)[0] + '.tfw', 'wt')
        tfw.write("%0.8f\n" % xform[1])
        tfw.write("%0.8f\n" % xform[2])
        tfw.write("%0.8f\n" % xform[4])
        tfw.write("%0.8f\n" % xform[5])
        tfw.write("%0.8f\n" % edit1)
        tfw.write("%0.8f\n" % edit2)
        tfw.close()

if __name__ == '__main__':
    generate_tfw(sys.argv[1], sys.argv[2])

Appelez-le à partir de la ligne de commande comme ceci:

python gen_tfw.py <path_to_tiff_directory> [prj]

Le deuxième paramètre peut être prj pour générer des fichiers prj de style WKT, ou n'importe quoi d'autre pour simplement générer des .TFW.

Si vous ne pouvez pas utiliser les scripts Python pour une raison quelconque, vous pouvez utiliser:

gdal_translate -co "TFW=YES" in.tif out.tif

Mais cela copiera également les données d'image, vous devrez donc supprimer l'original. Et bien sûr, il ne générera pas de fichiers .prj de l'une ou l'autre saveur. Mais en supposant que tous vos tiffs sont dans la même projection, vous pouvez simplement créer un fichier .prj à la main et le dupliquer pour toutes les images source.

MerseyViking
la source
2
Notez que generate_tfwcela ne fonctionne pas correctement sur les rasters en rotation, qui sont heureusement moins courants. Cela peut être corrigé avec un peu de multiplication matricielle.
Mike T
Hé mec, j'essaie d'utiliser l'outil, mais je ne sais pas comment faire, exactement. Pouvez-vous expliquer plus en détail comment l'utiliser? J'ai juste besoin de générer le tfw pour les TIF, dans les dossiers et sous-dossiers. S'il ne peut pas fonctionner sur des sous-dossiers, c'est très bien. Je peux l'exécuter plusieurs fois. Merci
raphael
Dans le menu ouvert de QGIS "Raster", choisissez "Conversion" puis choisissez "Traduire - Convertir le format". Une fenêtre apparaît - dans la ligne supérieure, choisissez votre géotiff et sous Paramètres avancés, appuyez sur + signe pour ajouter une commande. Sous Nom, saisissez le mot tfw, sous Valeur, saisissez oui. Spécifiez la destination de sortie, le nom du fichier et le tour est joué ... votre fichier géotiff est converti en partie tiff et tfw. Vous pouvez maintenant modifier le tiff dans l'éditeur d'image de votre choix et le faire géolocaliser tant que vous ne modifiez pas le nombre de pixels sur les axes x ou y
user29347
19

L' utilitaire listgeo fourni avec libgeotiff est un bel utilitaire de ligne de commande qui peut extraire le fichier TWF des fichiers GeoTIFF.

Par exemple, j'ai un répertoire de GeoTIFFs et j'ai installé libgeotiff dans le cadre d'OSGeo4w. Vous pouvez exécuter le shell OSGeo4w et procédez comme suit:

$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.

Ce serait bien si le même utilitaire pouvait également extraire le fichier PRJ.

Mike T
la source
"Ce serait bien si le même utilitaire pouvait également extraire le fichier PRJ." -> Mais ce n'est pas le cas.
astrojuanlu
0

Pas vraiment - si vous connaissez la projection des fichiers, vous pouvez rechercher le contenu du fichier prj sur http://spatialreference.org puis utiliser un script shell pour copier un modèle dans chaque fichier .prj pour chaque image.

Leur géoréférencement devra être effectué image par image car le fichier .tfw sera différent pour chaque image (sauf si elles sont toutes au même endroit). http://warper.geothings.net/ peut être la voie à suivre si vous n'avez pas accès à un SIG de bureau pour le faire.

Ian Turton
la source
2
Sauf que les fichiers GeoTIFF ont souvent à la fois un fichier de projection et un fichier world incorporé dans les métadonnées .. donc toutes ces informations sont connues.
Mike T
1
dans ce cas, pourquoi l'écririez-vous dans des fichiers séparés?
Ian Turton
1
Vraisemblablement, le logiciel que Joe utilise ne comprend pas les GeoTIFF avec des métadonnées intégrées.
MerseyViking
oui avait le même problème que les métadonnées devaient être extraites pour être .tfw pour que l'application web gis 'connaisse' les emplacements de chaque tuile - utilisez son propre script pour les extraire (excel - macro à l'époque.)
Mapperz
0

En utilisant Geotools en Java, vous pouvez utiliser ce code:

// read geotiff file (using org.geotools.gce.geotiff.GeoTiffReader)
GeoTiffReader reader = new GeoTiffReader(geotiff);
// get transformation
AffineTransform transformation = reader.getMetadata().getModelTransformation();
// create org.geotools.data.WorldFileWriter (world file is created automatically!)
WorldFileWriter worldFileWriter = new WorldFileWriter(myWorldFile, transformation);

Si vous souhaitez obtenir la projection, vous pouvez utiliser ce code:

// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();

Écrivez simplement le contenu de projectionStringvotre fichier de projection.

Lars
la source
0

Si l'on veut éditer davantage le tiff dans l'application de retouche photo et conserver sa géolocalisation, l'exportation de la couche raster avec la création tfw et l'image rendue activée est le moyen le plus simple, IMO. Pour des options légèrement différentes, il existe un moyen de passer par le menu Raster / Conversion / Traduire.

entrez la description de l'image ici

user29347
la source