티스토리 뷰

반응형

다음 그림처럼 asc file을 일괄적으로 tif 파일로 변환하는 python coding을 설명하고자 한다.

 

python 버전이 3.8.12인 아나콘다 가상환경 geo38로 코딩을 진행한다. 

 

asc 파일을 있는 왼쪽폴더와 변환된 tif 파일 폴더

1. 관련된 파이썬 패키지를 불러온다

import os
from osgeo import gdal

import pandas as pd
import numpy as np
import glob

 

2. 입력폴더와 출력폴더를 선언한다.

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

3. asc 파일을 tif파일로 변환하는 함수를 작성한다.

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

4. 폴더 안에 있는 모든 asc파일을 tif 파일로 변환하는 과정을 반복 수행한다.

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

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

5. 전체 코드는 다음과 같다.

import os
from osgeo import gdal

import pandas as pd
import numpy as np
import glob

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

# 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_skorea.tif"

ascTotiff(in_asc, out_tif)


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

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