GeoTIFFファイルのフォルダー用のTFWおよびPRJファイルを作成しますか?[閉まっている]


16

GeoTIFF形式の多数のファイルを含むフォルダーがあります。

これらの各イメージに対してPRJファイルとTFWファイルの両方を生成する必要があります。

これを行う方法はありますか?


どのソフトウェアを使用していますか?何が利用できますか?
jbchurchill

回答:


16

TFWを生成する最も簡単な方法は、GDALを使用してPythonまたはJavaでスクリプトを書くことです。これは、ほんの数行のコードになります。

古いスタイル(ArcGis 9より前)の.prjファイルの作成はGDALでサポートされておらず、読み取りのみです(こちらを参照)。新しいスタイル(WKTに基づく)ファイルの作成がサポートされていますが、すべてのケースをカバーする保証はありません。しかし、いずれにしても、変位アクティビティの最高のケースでは、必要なことを行うPythonスクリプトを作成しました。エラーチェックなどはありませんが、YMMVというTiffsのディレクトリで機能します。

# 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])

次のようにコマンドラインから呼び出します。

python gen_tfw.py <path_to_tiff_directory> [prj]

2番目のパラメーターは、WKTスタイルのprjファイルを生成するprj、または.TFWを生成する他のパラメーターです。

何らかの理由でPythonスクリプトを使用できない場合は、次を使用できます。

gdal_translate -co "TFW=YES" in.tif out.tif

ただし、これにより画像データもコピーされるため、元のデータを削除する必要があります。そしてもちろん、どちらのフレーバーの.prjファイルも生成しません。ただし、すべてのTIFFが同じ投影法であると仮定すると、.prjファイルを手作業で作成して、すべてのソースイメージに複製することができます。


2
generate_tfw幸いなことにあまり一般的ではない回転したラスタでは適切に動作しないことに注意してください。これは、少しの行列乗算で修正できます。
マイクT

ちょっと男、私はツールを使用しようとしていますが、どうすればいいのかわかりません。使い方の詳細を教えていただけますか?TIFのtfwをフォルダーとサブフォルダーに生成する必要があります。サブフォルダーで実行できない場合は、問題ありません。数回実行できます。ありがとう
ラファエル

QGISのメニュー「ラスタ」を開き、「変換」を選択してから「変換-形式の変換」を選択します。ウィンドウが表示されます-上の行でジオティフを選択し、[詳細パラメーター]で+記号を押してコマンドを追加します。[名前]にword tfwと入力し、[値]にyesと入力します。出力先、ファイル名、出来上がりを指定してください...ジオティフファイルはプレーンなtiffとtfw部分に変換されます。これで、選択したイメージエディターでTIFFを編集でき、X軸またはY軸のピクセル数を変更しない限り、地理位置情報を取得できます
-user29347

19

listgeoの libgeotiffに付属しているユーティリティは、GeoTIFFのファイルからTWFファイルを抽出することができます素敵なコマンドラインユーティリティです。

たとえば、GeoTIFFのディレクトリがあり、OSGeo4wの一部としてlibgeotiffがインストールされています。OSGeo4wシェルを実行して、これを行うことができます。

$ listgeo -tfw BN24_GeoTif_1-01.tif
World file written to 'BN24_GeoTif_1-01.tfw'.

同じユーティリティでPRJファイルも抽出できると便利です。


「同じユーティリティでPRJファイルも抽出できればいいと思います。」->しかし、そうではありません。
アストロフアンル

0

そうではありません-ファイルの投影がわかっている場合は、http: //spatialreference.orgでprjファイルのコンテンツを検索し、シェルスクリプトを使用して、各画像の各.prjファイルにテンプレートをコピーできます。

.tfwファイルは画像ごとに異なるため(それらがすべて同じ場所でない限り)、画像ごとにジオリファレンスを行う必要があります。http://warper.geothings.net/は、これを行うためのデスクトップGISにアクセスできない場合の方法です。


2
GeoTIFFファイルには、多くの場合、メタデータに埋め込まれた投影とワールドファイルの両方が含まれているため、この情報はすべて既知です。
マイクT

1
その場合、なぜ別のファイルとして書き出すのですか?
イアンタートン

1
おそらく、Joeが使用しているソフトウェアは、メタデータが埋め込まれたGeoTIFFを理解していません。
MerseyViking

それを抽出するために使用する独自のスクリプト-はい、同じ問題のメタデータは各タイルの位置を「知る」へのGIS Webアプリケーションのための.tfwであることを抽出して必要だった(エクセル- 。一度マクロ)
Mapperz

0

JavaでGeotoolsを使用すると、次のコードを使用できます。

// 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);

プロジェクションを取得する場合は、次のコードを使用できます。

// get the projection string from CRS
CoordinateReferenceSystem crs = reader.getCoordinateReferenceSystem();
String projectionString = crs.toWKT();

の内容をprojectionString投影ファイルに書き込むだけです。


0

写真レタッチアプリでTIFFをさらに編集して位置情報を保持したい場合は、tfw作成およびレンダリングイメージを有効にしたラスターレイヤーのエクスポートが最も簡単な方法であるIMOです。わずかに異なるオプションについては、メニューラスター/変換/翻訳を使用する方法があります。

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.