Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

Foundry에서 래스터 데이터 사용

래스터는 미디어 집합으로 관리하거나 파일 기반 변환에서 직접 처리할 수 있습니다. 미디어 집합은 파일 참조를 파이프라인과 온톨로지에 연결하는 경로이고, 파일 기반 변환은 사용자 정의 전처리나 다른 파일 형식을 다루는 경로입니다.

형식과 처리 경로

지리참조 래스터 미디어 경로파일 기반 처리 예
TIFF / GeoTIFF, NITF, JPEG2000PNG, JPEG 및 사용자 정의 파일 처리

PNG와 JPEG는 일반 Image 미디어 집합에서도 지원합니다. 미디어 집합의 이미지 형식 지원과 지리참조 래스터를 지도에 표시하는 조건은 구분합니다.

미디어 집합과 온톨로지

  1. Data Connection 또는 로컬 파일 업로드로 지원 래스터 형식의 미디어 집합을 만듭니다. 미디어 가져오기의 경로를 사용합니다.
  2. Pipeline Builder 또는 코드 변환에서 미디어 참조를 선택하여 데이터와 연결합니다.
  3. Pipeline Builder의 객체 유형 출력 또는 Ontology Manager에서 객체 유형을 만듭니다.
  4. 해당 속성의 자료형을 Media reference로 설정합니다.
  5. 객체 유형의 Capabilities에 기반 미디어 집합을 선언합니다. 플랫폼이 참조 대상 항목을 찾는 데 필요한 구성입니다.

객체 유형을 Map 애플리케이션으로 가져와 래스터를 볼 수 있습니다. 지도에서는 67MB를 넘는 래스터 파일 표시를 지원하지 않습니다. 이는 파일 전처리 전체의 입력 크기 한도가 아니라 지도 표시 조건입니다.

온톨로지 설정은 미디어 참조와 객체 유형을 함께 확인합니다.

미디어 집합 변환의 입출력 선언

Python 미디어 변환에는 transforms-media 라이브러리가 필요합니다. 실제 변환 함수에는 transforms.api의 @transform을 사용하고, 입력과 출력은 transforms.mediasets의 다음 명세로 선언합니다.

역할선언 예시
images 입력MediaSetInput('/examples/images')
output_images 출력MediaSetOutput('/examples/output_images')

경로는 가상 예시입니다. 출력 미디어 집합을 먼저 만들고 실제 리소스 경로로 지정합니다. 이 선언은 리소스를 연결하는 명세이며, 이미지 크기 변경 같은 처리와 결과 쓰기는 변환 함수의 실제 연산으로 구성합니다. 미디어 변환에서 지원 연산과 사용 경로를 확인할 수 있습니다.

파일 기반 래스터 처리

Python에서는 Rasterio와 Pillow(PIL)를 사용할 수 있습니다. Rasterio는 GeoTIFF 같은 래스터를 읽어 밴드, 좌표 참조계와 픽셀 데이터를 처리하며, Pillow는 일반 이미지 처리에 사용합니다.

Foundry 파일 스트림을 Rasterio에서 열 때는 임시 파일로 복사하여 파일 경로를 전달할 수 있습니다. 다음 함수는 GeoTIFF 파일만 있는 입력 데이터셋을 차례로 열어 실제 처리 함수에 전달합니다. 입력을 모두 목록으로 모으지 않고 for 루프로 순회합니다.

handle_raster의 계약은 다음과 같습니다.

  • 입력은 데이터셋 안의 파일 경로와 열린 Rasterio DatasetReader입니다.
  • 해당 파일에 필요한 계산과 결과 기록을 수행합니다. 결과 출력이 필요하면 호출자가 실제 출력 리소스를 사용하는 처리 함수를 제공해야 합니다.
  • Rasterio 객체는 호출이 끝나면 닫히므로 이후 사용을 위해 보관하지 않습니다.
import shutil
import tempfile
from typing import Callable

import rasterio
from rasterio.io import DatasetReader


def read_geotiffs(
    input_dataset,
    handle_raster: Callable[[str, DatasetReader], None],
) -> None:
    filesystem = input_dataset.filesystem()
    for file_status in filesystem.ls():
        with tempfile.NamedTemporaryFile(suffix=".tif") as local_file:
            with filesystem.open(file_status.path, "rb") as source:
                shutil.copyfileobj(source, local_file)
            local_file.flush()
            with rasterio.open(local_file.name, driver="GTiff") as raster:
                handle_raster(file_status.path, raster)

이 함수는 파일을 열고 닫는 범위를 담당합니다. 분석, 재표본화나 출력 형식은 작업에 맞는 처리 함수의 입력 및 출력 계약으로 정합니다. 지리참조 영상을 재표본화할 때는 픽셀 크기 변경에 맞춰 공간 변환도 함께 다루어야 합니다. 세부 연산은 Rasterio와 Pillow의 API를 사용합니다.