Câu trả lời:
Cách dễ nhất để tạo TFW là viết một tập lệnh bằng Python hoặc Java bằng GDAL, đây sẽ là một số dòng mã.
Tạo các tệp .prj kiểu cũ (trước ArcGis 9) không được hỗ trợ GDAL , chỉ đọc (xem tại đây ). Các tệp kiểu mới (dựa trên WKT) được hỗ trợ để tạo, nhưng không đảm bảo chúng bao gồm tất cả các trường hợp. Nhưng dù bằng cách nào, trong một trường hợp tối cao của hoạt động dịch chuyển, tôi đã viết một kịch bản Python thực hiện những gì bạn cần. Không có kiểm tra lỗi hay bất cứ điều gì, nhưng nó hoạt động cho thư mục của các tiff tôi phải trao, 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])
Gọi nó từ dòng lệnh như thế này:
python gen_tfw.py <path_to_tiff_directory> [prj]
Tham số thứ hai có thể là prj để tạo các tệp prj kiểu WKT hoặc bất cứ thứ gì khác để tạo .TFWs.
Nếu bạn không thể sử dụng tập lệnh Python vì bất kỳ lý do gì, bạn có thể sử dụng:
gdal_translate -co "TFW=YES" in.tif out.tif
Nhưng điều đó cũng sẽ sao chép dữ liệu hình ảnh, vì vậy bạn sẽ phải xóa bản gốc. Và tất nhiên, nó sẽ không tạo ra các tệp .prj có hương vị. Nhưng giả sử tất cả các tiff của bạn nằm trong cùng một phép chiếu, bạn có thể tự tạo thủ công một tệp .prj và sao chép nó cho tất cả các hình ảnh nguồn.
generate_tfw
không hoạt động đúng trên các raster xoay, điều may mắn là ít phổ biến hơn. Điều này có thể được cố định với một chút nhân ma trận.
Các listgeo tiện ích mà đi kèm với libgeotiff là một tiện ích dòng lệnh tốt đẹp mà có thể trích xuất các tập tin từ các tập tin TWF GeoTIFF.
Ví dụ: tôi có một thư mục GeoTIFF và tôi đã cài đặt libgeotiff như một phần của OSGeo4w. Bạn có thể chạy shell OSGeo4w và làm điều này:
$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.
Sẽ thật tuyệt nếu cùng một tiện ích cũng có thể trích xuất tệp PRJ.
Không thực sự - nếu bạn biết phép chiếu của các tệp thì bạn có thể tra cứu nội dung của tệp prj tại http://spatialreference.org và sau đó sử dụng tập lệnh shell để sao chép mẫu vào mỗi tệp .prj cho mỗi hình ảnh.
Hội nghị địa lý chúng sẽ cần phải được thực hiện trên cơ sở mỗi hình ảnh vì tệp .tfw sẽ khác nhau cho mỗi hình ảnh (trừ khi tất cả chúng đều ở cùng một vị trí). http://warper.geothings.net/ có thể là cách tốt nhất nếu bạn không có quyền truy cập vào máy tính để bàn để thực hiện việc này.
Sử dụng Geotools trong Java, bạn có thể sử dụng mã này:
// 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);
Nếu bạn muốn có được phép chiếu, bạn có thể sử dụng mã này:
// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();
Chỉ cần viết nội dung của projectionString
tập tin chiếu của bạn.
Nếu ai đó muốn chỉnh sửa thêm tiff trong ứng dụng chỉnh sửa ảnh và giữ lại vị trí địa lý của nó, Xuất lớp raster với tạo tfw và kích hoạt hình ảnh được kích hoạt là cách dễ nhất, IMO. Đối với các tùy chọn hơi khác nhau, có một cách thông qua menu Raster / Converter / Translate.