답변:
TFW를 생성하는 가장 매끄러운 방법은 GDAL을 사용하여 Python 또는 Java로 스크립트를 작성하는 것입니다.이 코드는 소수의 코드 줄입니다.
구식 (ArcGis 9 이전) .prj 파일 생성은 GDAL 지원되지 않으며 읽기 전용입니다 ( 여기 참조 ). 새로운 스타일 (WKT 기반) 파일은 생성이 지원되지만 모든 경우를 다룰 수있는 것은 아닙니다. 그러나 어느 쪽이든, 변위 활동의 최고 사례에서 필자는 필요한 것을 수행하는 Python 스크립트를 작성했습니다. 오류 검사 또는 아무것도 없지만, 내가 처리 해야하는 뻣뻣한 디렉토리 인 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])
다음과 같이 명령 행에서 호출하십시오.
python gen_tfw.py <path_to_tiff_directory> [prj]
두 번째 매개 변수는 prj를 사용하여 WKT 스타일 prj 파일을 생성하거나 .TFW를 생성하는 다른 매개 변수 일 수 있습니다.
어떤 이유로 든 파이썬 스크립트를 사용할 수 없다면 다음을 사용할 수 있습니다.
gdal_translate -co "TFW=YES" in.tif out.tif
그러나 이미지 데이터도 복사되므로 원본을 삭제해야합니다. 그리고 물론, 어떤 맛의 .prj 파일도 생성하지 않습니다. 그러나 모든 강점이 동일한 투영에 있다고 가정하면 .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 파일은 각 이미지마다 서로 다르므로 이미지별로 지리 참조를 수행해야합니다 (모두 같은 위치에 있지 않은 경우). 이를 수행하기 위해 데스크탑 GIS에 액세스 할 수없는 경우 http://warper.geothings.net/이 도움 이 될 수 있습니다.
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
투영 파일에 내용을 쓰십시오 .