Tạo tệp TFW và PRJ cho thư mục tệp GeoTIFF? [đóng cửa]


16

Tôi có một thư mục chứa một số lượng lớn tệp ở định dạng GeoTIFF.

Tôi cần tạo cả tệp PRJ và TFW cho mỗi hình ảnh này.

Có cách nào để làm việc này không?


sử dụng phần mềm gì? Những gì có sẵn cho bạn?
jbeclill

Câu trả lời:


16

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.


2
Lưu ý rằng generate_tfwkhô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.
Mike T

Này anh bạn, tôi đang cố gắng sử dụng công cụ này, nhưng tôi không biết làm thế nào, exaclty. Bạn có thể vui lòng giải thích chi tiết hơn làm thế nào để sử dụng nó? Tôi chỉ cần tạo tfw cho TIF, trong các thư mục và thư mục con. Nếu nó không thể chạy trên các thư mục con, điều đó tốt. Tôi có thể chạy nó nhiều lần. Cảm ơn
raphael

Trong menu mở của QGIS "Raster", chọn "Chuyển đổi" rồi chọn "Dịch - Chuyển đổi định dạng". Cửa sổ xuất hiện - ở dòng trên chọn địa lý của bạn và bên dưới Tham số nâng cao, nhấn + dấu để thêm lệnh. Trong Tên nhập từ tfw, bên dưới Giá trị nhập có. Chỉ định đích đầu ra, tên của tệp và voila ... tệp địa lý của bạn được chuyển đổi thành phần tiff và tfw đơn giản. Bây giờ bạn có thể chỉnh sửa tiff trong trình chỉnh sửa hình ảnh mà bạn chọn và đã định vị địa lý miễn là bạn không thay đổi số pixel theo trục x hoặc y
user29347

19

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.


"Thật tuyệt nếu cùng một tiện ích cũng có thể trích xuất tệp PRJ." -> Nhưng nó không.
astrojuanlu

0

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.


2
Ngoại trừ các tệp GeoTIFF thường có cả tệp chiếu và tệp thế giới được nhúng trong siêu dữ liệu .. vì vậy tất cả thông tin này đều được biết.
Mike T

1
trong trường hợp nào tại sao bạn lại viết nó ra thành các tệp riêng biệt?
Ian Turton

1
Có lẽ phần mềm Joe đang sử dụng không hiểu GeoTIFF với siêu dữ liệu nhúng.
MerseyViking

có cùng một siêu dữ liệu vấn đề cần được trích xuất để .tfw cho ứng dụng web gis để 'biết' vị trí của mỗi ô - sử dụng tập lệnh riêng để trích xuất nó (excel - macro tại thời điểm đó.)
Mapperz

0

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 projectionStringtập tin chiếu của bạn.


0

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.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.