回答:
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ファイルを手作業で作成して、すべてのソースイメージに複製することができます。
generate_tfw
幸いなことにあまり一般的ではない回転したラスタでは適切に動作しないことに注意してください。これは、少しの行列乗算で修正できます。
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ファイルも抽出できると便利です。
そうではありません-ファイルの投影がわかっている場合は、http: //spatialreference.orgでprjファイルのコンテンツを検索し、シェルスクリプトを使用して、各画像の各.prjファイルにテンプレートをコピーできます。
.tfwファイルは画像ごとに異なるため(それらがすべて同じ場所でない限り)、画像ごとにジオリファレンスを行う必要があります。http://warper.geothings.net/は、これを行うためのデスクトップGISにアクセスできない場合の方法です。
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
投影ファイルに書き込むだけです。