티스토리 뷰

반응형

1. GIS 파일형태 중 하나인  asc 파일을 tif 파일 형태로 저장

 - 이를 위해서는 관련된 gdal 패키지를 불러온다.

 - 다음으로 입력파일과 출력파일 이름을 이용해서 ascTotiff()함수를 실행하면 된다.

 - 여기서 입력파일은 alt_110_skorea.asc이고 출력되는 파일이름은 alt_110_skorea.tif 이다.

# 패키지 불러오기
from osgeo import gdal

# asc 파일을 geoTiff 파일로 저장하기
def ascTotiff(in_asc, out_tif=None):
    in_asc = in_asc
    out_tif = out_tif

    print(in_asc)
    os.makedirs(output_folder, exist_ok=True)

    if out_tif is None:
        out_tif = output_folder + in_asc.split('/')[-1].split(".")[0] + ".tif"

    drv = gdal.GetDriverByName("GTiff")
    ds_in = gdal.Open(in_asc)
    print(ds_in)

    proj = ds_in.GetProjection()

    ds_out = drv.CreateCopy(out_tif, ds_in)

    # srs = osr.SpatialReference()
    # srs.ImportFromEPSG(4326)
    # ds_out.SetProjection(srs.ExportToWkt())

    ds_out.SetProjection(proj)

    ds_in = None
    ds_out = None


in_asc = "./data/layers/alt_110_skorea.asc"
out_tif = "./data/outputs/alt_110_skorea1.tif"

ascTotiff(in_asc, out_tif)

 

2. 여러개 asc 파일을 처리하는 방식

- 다음 그림처럼 C:\python_work\maxent_auto\data\layers 폴더안에 asc 파일이 여러개 있을 때 처리하는 방식을 설명한다.

asc파일들이 있는 폴더

 

- 우선 입력폴더와 출력폴더를 명시하고 

base_folder = "./data/layers/"
output_folder = "./data/tif_outputs/"

- 폴더안에 있는 asc파일들을 리스트 형태로 만든다.

asc_list = [asc_file for asc_file in os.listdir(
    base_folder) if asc_file[-4:] == ".asc"]

- asc 파일을 tif파일로 변환하기 위한 ascTotiff()함수를 작성한다. 

- out_tif 매개변수 가 없으면 입력파일에서 출력이름을 생성한다. 

# asc 파일을 geoTiff 파일로 저장하기
def ascTotiff(in_asc, out_tif=None):
    in_asc = in_asc
    out_tif = out_tif

    print(in_asc)
    os.makedirs(output_folder, exist_ok=True)

    if out_tif is None:
        out_tif = output_folder + in_asc.split('/')[-1].split(".")[0] + ".tif"

    drv = gdal.GetDriverByName("GTiff")
    ds_in = gdal.Open(in_asc)
    print(ds_in)

    proj = ds_in.GetProjection()

    ds_out = drv.CreateCopy(out_tif, ds_in)

    # srs = osr.SpatialReference()
    # srs.ImportFromEPSG(4326)
    # ds_out.SetProjection(srs.ExportToWkt())

    ds_out.SetProjection(proj)

    ds_in = None
    ds_out = None

- 다음으로 asc 파일 리스트를 가지고 for 루프문으로 위의 ascTotiff()함수를 반복 실행하면 된다.

for asc in asc_list:
    input_asc = base_folder + asc
    print(f"{input_asc} 변환 중 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
    ascTotiff(input_asc)

 

 

 

 

 

반응형
댓글