Respuestas:
La forma más ingeniosa de generar TFW es escribir un script en Python o Java usando GDAL, que sería un puñado de líneas de código.
La creación de archivos .prj de estilo antiguo (anteriores a ArcGis 9) no son compatibles con GDAL , solo lectura (ver aquí ). Los archivos de nuevo estilo (basados en WKT) son compatibles con la creación, pero no se garantiza que cubran todos los casos. Pero de cualquier manera, en un caso supremo de actividad de desplazamiento, he escrito un script de Python que hace lo que necesita. No hay verificación de errores ni nada, pero funciona para el directorio de tiffs que tuve que entregar, 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])
Llámalo desde la línea de comando así:
python gen_tfw.py <path_to_tiff_directory> [prj]
El segundo parámetro puede ser prj para generar archivos prj de estilo WKT, o cualquier otra cosa para generar .TFWs.
Si no puede usar scripts de Python por alguna razón, puede usar:
gdal_translate -co "TFW=YES" in.tif out.tif
Pero eso también copiará los datos de la imagen, por lo que tendrá que eliminar el original. Y, por supuesto, no generará archivos .prj de ningún sabor. Pero suponiendo que todos sus tiffs estén en la misma proyección, puede crear a mano un archivo .prj y duplicarlo para todas las imágenes de origen.
generate_tfw
no funciona correctamente en rásteres rotados, que afortunadamente son menos comunes. Esto se puede solucionar con un poco de multiplicación de matrices.
La utilidad listgeo que viene con libgeotiff es una buena utilidad de línea de comandos que puede extraer el archivo TWF de los archivos GeoTIFF.
Por ejemplo, tengo un directorio de GeoTIFFs y tengo libgeotiff instalado como parte de OSGeo4w. Puede ejecutar el shell OSGeo4w y hacer esto:
$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.
Sería bueno si la misma utilidad también pudiera extraer el archivo PRJ también.
No realmente: si conoce la proyección de los archivos, puede buscar el contenido del archivo prj en http://spatialreference.org y luego usar un script de shell para copiar una plantilla en cada archivo .prj para cada imagen.
La georreferenciación deberá realizarse por imagen, ya que el archivo .tfw será diferente para cada imagen (a menos que estén en el mismo lugar). http://warper.geothings.net/ puede ser el camino a seguir si no tiene acceso a un SIG de escritorio para hacerlo.
Usando Geotools en Java puedes usar este código:
// 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 desea obtener la proyección, puede usar este código:
// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();
Simplemente escriba el contenido de projectionString
su archivo de proyección.
Si uno quiere editar más tiff en la aplicación de retoque fotográfico y conservar su geolocalización, la OMI es la exportación de la capa ráster con la creación de tfw y la imagen renderizada habilitada. Para opciones ligeramente diferentes, hay una manera a través del menú Ráster / Conversión / Traducir.