GeoTIFF 파일의 폴더에 대한 TFW 및 PRJ 파일을 작성합니까? [닫은]


16

GeoTIFF 형식의 파일이 많은 폴더가 있습니다.

이 이미지 각각에 대해 PRJ 및 TFW 파일을 모두 생성해야합니다.

이것을 할 수있는 방법이 있습니까?


어떤 소프트웨어를 사용합니까? 무엇을 이용할 수 있습니까?
jbchurchill

답변:


16

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 파일을 직접 제작하여 모든 소스 이미지에 복제 할 수 있습니다.


2
참고 generate_tfw다행히 덜 일반적인 회전 래스터에 제대로 작동하지 않습니다. 이것은 약간의 행렬 곱셈으로 고칠 수 있습니다.
Mike T

이봐, 나는 도구를 사용하려고 노력하고 있지만, 어떻게 해야할지 모르겠다. 사용법을 좀 더 자세히 설명해 주시겠습니까? 폴더와 하위 폴더에서 TIF에 대한 tfw를 생성하기 만하면됩니다. 하위 폴더에서 실행할 수 없다면 괜찮습니다. 여러 번 실행할 수 있습니다. 감사합니다
raphael

QGIS 오픈 메뉴 "래스터"에서 "변환"을 선택한 다음 "번역-형식 변환"을 선택하십시오. 창이 나타납니다-상단 라인에서 geotiff를 선택하고 고급 매개 변수에서 + 부호를 눌러 명령을 추가하십시오. 이름 아래에 단어 tfw를 입력하고 값 아래에 예를 입력하십시오. 출력 대상, 파일 이름 및 voila를 지정하십시오 ... geotiff 파일은 일반 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 파일도 추출 할 수 있다면 좋을 것입니다." -> 그러나 그렇지 않습니다.
astrojuanlu

0

실제로는 아닙니다-파일의 투영을 알고 있다면 http://spatialreference.org 에서 prj 파일의 내용을 찾은 다음 셸 스크립트를 사용하여 각 이미지의 .prj 파일에 템플릿을 복사 할 수 있습니다.

.tfw 파일은 각 이미지마다 서로 다르므로 이미지별로 지리 참조를 수행해야합니다 (모두 같은 위치에 있지 않은 경우). 이를 수행하기 위해 데스크탑 GIS에 액세스 할 수없는 경우 http://warper.geothings.net/이 도움 이 될 수 있습니다.


2
GeoTIFF 파일을 제외하고는 종종 메타 데이터에 포함 된 투영 및 월드 파일이 있습니다. 따라서이 모든 정보가 알려져 있습니다.
Mike T

1
어떤 경우에 왜 별도의 파일로 작성 하시겠습니까?
Ian Turton

1
아마도 Joe가 사용하는 소프트웨어는 메타 데이터가 내장 된 GeoTIFF를 이해하지 못합니다.
MerseyViking

그렇습니다. gis 웹 앱이 각 타일의 위치를 ​​'알기'위해서는 메타 데이터를 .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

사진 수정 응용 프로그램에서 더 세밀한 편집을 원하고 지리적 위치를 유지하려는 경우 tfw 생성 및 렌더링 된 이미지가 활성화 된 래스터 레이어 내보내기가 가장 쉬운 방법입니다. 약간 다른 옵션의 경우 메뉴 래스터 / 변환 / 번역을 통해 방법이 있습니다.

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.