Réponses:
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.
generate_tfw
cela ne fonctionne pas correctement sur les rasters en rotation, qui sont heureusement moins courants. Cela peut être corrigé avec un peu de multiplication matricielle.
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.
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.
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 projectionString
votre fichier de projection.
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.