답변:
GDAL 2.1 이후 (자세한 정보는 여기 참조) GDAL 및 OGR 유틸리티를 라이브러리 함수로 사용할 수 있습니다. 예를 들어 :
from osgeo import gdal
ds = gdal.Open('input.tif')
ds = gdal.Translate('output.tif', ds, projWin = [-75.3, 5.5, -73.5, 3.7])
ds = None
gdal.Translate()
은 다음과 같습니다. gdal.org/python/osgeo.gdal-module.html#TranslateOptions
GDAL API 자습서를 참조하십시오 .
#Import gdal
from osgeo import gdal
#Open existing dataset
src_ds = gdal.Open( src_filename )
#Open output format driver, see gdal_translate --formats for list
format = "GTiff"
driver = gdal.GetDriverByName( format )
#Output to new format
dst_ds = driver.CreateCopy( dst_filename, src_ds, 0 )
#Properly close the datasets to flush to disk
dst_ds = None
src_ds = None
크기 조정, 하위 설정 등과 같은 더 많은 출력 제어를 원한다면 VRT 를 입력으로 사용하십시오 . 이것이 gdal_translate가 내부적으로 수행하는 방식입니다.
예, Python 내에서 GDAL 유틸리티를 호출 할 수 있습니다. 유틸리티가 자체적으로 exe인지 또는 python 코드인지에 따라 접근 방식에는 약간의 차이가 있습니다. 하위 프로세스 모듈 을 사용해야하는 경우 중 하나입니다 .
import subprocess
# constants
gdalTranslate = r'C:\Program Files\GDAL\gdal_translate.exe'
src = r"C:\somefolder\somefile.tif"
dst = r"C:\someotherfolder\myresul.tif"
cmd = "-ot float32 -outsize 25 25" # just for example!
# see note below
def youCanQuoteMe(item):
return "\"" + item + "\""
fullCmd = ' '.join([gdalTranslate, cmd, youCanQuoteMe(src), youCanQuoteMe(dst)])
subprocess.popen(fullCmd)
경로에 이스케이프 된 따옴표를 추가 한 것을 알 수 있습니다. Windows에서 경로, 특히 공백이 있거나 '\'문자 중 하나가 실수로 탈출 한 문자를 만드는 경로에 문제가 있었기 때문입니다. 그래서, 나는 단지 aspec의 올바른 경로를 그대로 유지합니다.
파이썬 유틸리티 중 하나를 사용하는 경우 하위 프로세스 명령 문자열의 시작 부분에있는 exe가 이제 "C : \ python32 \ python.exe"(또는 사용중인 버전)이고 두 번째 요소는 제외하고 동일한 작업을 수행하십시오. 사용하려는 파이썬 유틸리티.
분명히 하드 코딩 된 상수를 사용하지 않고 파일 시스템을 반복 할 수도 있지만 이것은 단지 예일뿐입니다.
편집-QGIS 플러그인 일반화 QGIS
는 시작시 여러 환경 변수를 작성 / 수정합니다. 따라서 위의 예에서 하드 코딩 된 경로 대신이를 사용하여 GDAL 라이브러리 / 유틸리티에 대한 일반화 된 경로 변수를 작성할 수 있습니다 (설정-> 옵션-> 시스템 참조).
os.system을 사용하여 다양한 gdal 명령 으로이 작업을 수행하며 명령 줄에서와 같이 함수를 호출하는 데 사용할 수 있습니다.
os.system("gdal_translate -of GTiff " + sourcefile + " " + destinationfile)
또한 강의 7에 설명되어 있습니다 : http://www.gis.usu.edu/~chrisg/python/2009/
gdal.Warp()
하는 데 필요한 PG:
데이터 소스를 얻기 위해 몇 시간 동안 씨름했다 . (알아요, 맞습니까? 실제로 몇 시간 동안 운동을 합니까? 공포! </ kidding>). 결국 작동하고있어 또는 보다 훨씬 빠릅니다 . 그것은 ~ 2 백만 컷 라인을하고 있기 때문에 오늘 밤까지 실제로 실제로 더 빠른지 모르겠지만 ... 정확하게 작동합니다. cutlineDSName
cutlineSQL
os.system()
subprocess.call()
다음은 Python에서 GDAL Translate를 사용하여 복합 다중 대역 TIF에서 개별 파일로 대역을 저장하려는 모든 사용자를위한 빠른 코드입니다.
import gdal
in_path = 'C:/GIS/Sample.tif' #input composite raster
out_path = 'C:/GIS/Output/' #output directory for individual bands as files
#Open existing raster ds
src_ds = gdal.Open(in_path)
for i in range(1,src_ds.RasterCount +1): #Save bands as individual files
out_ds = gdal.Translate(out_path + 'band' + str(i) + '.tiff', src_ds, format='GTiff', bandList=[i])
out_ds=None
이 (같은 Rasterio를 사용하여 예를 들어, 추가 처리를 위해 유용 할 수있다 여기에 ).