Jawaban:
Cara paling licin untuk menghasilkan TFW adalah dengan menulis skrip dalam Python atau Java menggunakan GDAL, yang akan menjadi beberapa baris kode.
Pembuatan file .prj gaya lama (pre ArcGis 9) tidak didukung GDAL , hanya membaca (lihat di sini ). File gaya baru (berdasarkan WKT) didukung untuk pembuatan, tetapi tidak dijamin mencakup semua kasus. Namun demikian, dalam kasus aktivitas pemindahan tertinggi, saya telah menulis skrip Python yang melakukan apa yang Anda butuhkan. Tidak ada pengecekan error atau apa pun, tetapi berfungsi untuk direktori tiffs yang harus saya berikan, 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])
Sebut saja dari baris perintah seperti ini:
python gen_tfw.py <path_to_tiff_directory> [prj]
Parameter kedua dapat prj untuk menghasilkan file prj gaya WKT, atau apa pun untuk hanya menghasilkan .TFWs.
Jika Anda tidak dapat menggunakan skrip Python untuk alasan apa pun, Anda dapat menggunakan:
gdal_translate -co "TFW=YES" in.tif out.tif
Tapi itu juga akan menyalin data gambar, jadi Anda harus menghapus yang asli. Dan tentu saja, itu tidak akan menghasilkan file .prj baik rasa. Tetapi dengan anggapan semua tiff Anda berada dalam proyeksi yang sama, Anda bisa membuat sendiri file .prj dan menduplikasinya untuk semua gambar sumber.
generate_tfw
tidak berfungsi dengan baik pada raster yang diputar, yang untungnya kurang umum. Ini dapat diperbaiki dengan sedikit perkalian matriks.
The listgeo utilitas yang datang dengan libgeotiff adalah utilitas baris perintah bagus yang dapat mengekstrak file TWF dari file GeoTIFF.
Sebagai contoh, saya memiliki direktori GeoTIFFs, dan saya memiliki libgeotiff diinstal sebagai bagian dari OSGeo4w. Anda dapat menjalankan shell OSGeo4w, dan lakukan ini:
$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.
Alangkah baiknya jika utilitas yang sama juga bisa mengekstrak file PRJ juga.
Tidak juga - jika Anda mengetahui proyeksi file maka Anda dapat mencari konten file prj di http://spatialreference.org dan kemudian menggunakan skrip shell untuk menyalin template ke setiap file .prj untuk setiap gambar.
Georeferensi mereka perlu dilakukan berdasarkan gambar sebagai file .tfw akan berbeda untuk setiap gambar (kecuali mereka semua dari tempat yang sama). http://warper.geothings.net/ mungkin cara untuk pergi jika Anda tidak memiliki akses ke GIS desktop untuk melakukan hal ini.
Menggunakan Geotools di Jawa Anda dapat menggunakan kode ini:
// 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);
Jika Anda ingin mendapatkan proyeksi, Anda dapat menggunakan kode ini:
// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();
Cukup tulis konten projectionString
ke file proyeksi Anda.
Jika seseorang ingin mengedit tiff lebih lanjut dalam aplikasi retouching foto dan mempertahankan geolokasi, Ekspor lapisan raster dengan kreasi tfw dan gambar yang di-render diaktifkan adalah cara termudah, IMO. Untuk opsi yang sedikit berbeda ada jalan melalui menu Raster / Conversion / Translate.