Membuat file TFW dan PRJ untuk folder file GeoTIFF? [Tutup]

16

Saya memiliki folder yang berisi banyak file dalam format GeoTIFF.

Saya perlu membuat file PRJ dan TFW untuk masing-masing gambar ini.

Apakah ada cara untuk melakukan ini?

Joe
sumber
menggunakan perangkat lunak apa? Apa yang tersedia untuk Anda?
jbchurchill

Jawaban:

16

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.

MerseyViking
sumber
2
Perhatikan bahwa generate_tfwtidak berfungsi dengan baik pada raster yang diputar, yang untungnya kurang umum. Ini dapat diperbaiki dengan sedikit perkalian matriks.
Mike T
Hai, saya mencoba menggunakan alat ini, tetapi saya tidak tahu bagaimana caranya, exaclty. Bisakah Anda membuat penjelasan lebih rinci bagaimana menggunakannya? Saya hanya perlu membuat tfw untuk TIF, dalam folder dan subfolder. Jika tidak bisa berjalan di subfolder, itu bagus. Saya bisa menjalankannya beberapa kali. Terima kasih
raphael
Di menu terbuka QGIS "Raster", pilih "Conversion" lalu pilih "Translate - Convert format". Jendela muncul - di baris atas pilih geotiff Anda dan di bawah Parameter lanjutan, tekan tanda + untuk menambahkan perintah. Di bawah Nama masukkan kata tfw, di bawah Nilai masukkan ya. Tentukan tujuan keluaran, nama file dan voila ... file geotiff Anda dikonversi menjadi bagian tiff dan tfw biasa. Sekarang Anda dapat mengedit tiff di editor gambar pilihan Anda dan memilikinya geolokasi selama Anda tidak mengubah jumlah piksel dalam sumbu x atau y
user29347
19

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.

Mike T
sumber
"Akan lebih baik jika utilitas yang sama juga bisa mengekstrak file PRJ juga." -> Tapi tidak.
astrojuanlu
0

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.

Ian Turton
sumber
2
Kecuali bahwa file GeoTIFF sering memiliki proyeksi dan file dunia yang tertanam dalam metadata .. sehingga semua informasi ini diketahui.
Mike T
1
dalam hal ini mengapa Anda menuliskannya sebagai file terpisah?
Ian Turton
1
Agaknya perangkat lunak yang digunakan Joe tidak memahami GeoTIFF dengan metadata tertanam.
MerseyViking
ya punya masalah yang sama metadata perlu diekstraksi menjadi .tfw untuk aplikasi web gis untuk 'mengetahui' lokasi setiap ubin - gunakan skrip sendiri untuk mengekstraknya (excel - makro pada saat itu.)
Mapperz
0

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 projectionStringke file proyeksi Anda.

Lars
sumber
0

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.

masukkan deskripsi gambar di sini

pengguna29347
sumber