외부 CSV의 데이터를 사용하여 QGIS Modeler 다중 래스터 계산을 수행합니까?


20

CSV 메타 데이터 파일의 값을 기반으로 래스터 집합에 대해 여러 계산을 수행해야합니다.

QGIS 그래픽 모델러를 사용하고 있으며 TableTable Field입력을 사용하여 CSV의 특정 필드를 호출 할 수 있습니다 .

여러 래스터가 있고 각 래스터가 CSV에 해당 값을 가지고 있으므로 특정 행을 어떻게 호출합니까? (예를 들어 조회와 유사).

사용하기 쉽도록 스크립트를 추가하고 싶지 않습니다.


1
래스터를 포인트 파일로 변환하여 접근하는 것이 더 쉬울 것입니다. 거기에서 두 파일 사이에 필요한 연결을 만드는 것이 더 쉬울 것입니다. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483

3
작업 목록 (의사 코드)을 만드십시오. 작업을 수행하기 위해 스크립트를 사용해야 하는지를 알려줍니다. 반복 또는 조건부 절차는 스크립트를 사용해야한다는 것을 나타냅니다. 구조 스크립트로 완료하면 친구입니다.
ragnvald

답변:


2

정말 오래된 게시물이지만 가능한 해결책은 불행히도 귀하의 경우 모델러에서 다음과 같은 스크립트를 사용하는 것입니다.

  • 로드 된 모든 래스터 레이어의 이름을 검색합니다.
  • 래스터 이름을 가진 열이 포함 된 메타 데이터를 반복합니다.
  • 로드 된 래스터 이름을 메타 데이터의 이름과 일치시킵니다.
  • 일치하는 것이 있으면 래스터의 해당 값이 추출됩니다.

  1. 다음에서 스크립트를 작성할 수 있습니다.

    Processing Toolbox > Scripts > Tools > Create new script
    

    그런 다음 다음과 같은 것을 사용하십시오.

    ##Example=name
    ##Table=table
    ##Field=Field Table
    ##Output_value=output Number
    
    from qgis.core import QgsMapLayer, QgsMapLayerRegistry
    import csv
    
    raster_list = [layer.name() for layer in QgsMapLayerRegistry.instance().mapLayers().values() if layer.type() == QgsMapLayer.RasterLayer]
    with open(Table) as f:
        reader = csv.reader(f)
        for row in reader:
            for raster in raster_list:
                if raster in row[0]:
                    Output_value = row[1]
                    print Output_value
    

  1. 그런 다음 스크립트를 모델러에 추가하십시오 (단 두 개의 입력으로 간단한 예를 만들었습니다).

    모델러

    위의 스크립트를 사용하여이 모델을 실행하면 래스터 이름에 해당하는 메타 데이터에서 출력 값을 인쇄합니다.

    결과


  1. 모델이 어떻게 구성되어 있고 스크립트를 조정했는지에 따라 여러 래스터 계산을 수행 할 수 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.