Thực hiện trình tạo mô hình QGIS nhiều phép tính raster với dữ liệu từ CSV bên ngoài?


20

Tôi cần thực hiện nhiều phép tính trên một tập hợp các trình quét dựa trên các giá trị trong tệp siêu dữ liệu CSV.

Tôi đang sử dụng trình tạo mô hình đồ họa của QGIS và có thể gọi một trường cụ thể trong CSV bằng TableTable Fieldđầu vào.

Vì tôi có nhiều raster và mỗi raster có một giá trị tương ứng trong CSV, làm cách nào để gọi hàng cụ thể? (tương tự như một tra cứu chẳng hạn).

Tôi không muốn thêm một tập lệnh nếu tôi không phải để dễ sử dụng.


1
Có lẽ sẽ dễ dàng hơn để tiếp cận điều này bằng cách chuyển đổi các trình quét thành các tệp điểm. Từ đó sẽ dễ dàng hơn để tạo các liên kết cần thiết giữa hai tệp. webhelp.esri.com/arcgisdesktop/9.3/ Mạnh
Jamie2483

3
Tạo một danh sách (mã giả) của nhiệm vụ của bạn. Điều này sẽ cho bạn biết nếu bạn cần dùng đến một kịch bản để thực hiện công việc của mình. Lặp lại hoặc các thủ tục có điều kiện là các chỉ số của bạn phải sử dụng các tập lệnh. Thực hiện với các kịch bản cấu trúc là bạn bè của bạn.
ragnvald

Câu trả lời:


2

Bài viết thực sự cũ nhưng tôi đoán một giải pháp khả thi là, không may cho trường hợp của bạn, sử dụng một tập lệnh trong trình tạo mô hình của bạn:

  • Lấy tên tất cả các lớp raster được tải.
  • Lặp lại thông qua siêu dữ liệu có chứa một cột với tên raster.
  • Khớp các tên raster đã tải với các tên trong siêu dữ liệu.
  • Nếu tìm thấy bất kỳ kết quả khớp nào, giá trị tương ứng của raster sẽ được trích xuất.

  1. Bạn có thể tạo một tập lệnh từ:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Sau đó sử dụng một cái gì đó như sau:

    ##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. Sau đó thêm tập lệnh vào trình tạo mô hình của bạn (Tôi đã tạo một ví dụ đơn giản chỉ với hai đầu vào):

    Người tạo mẫu

    Nếu tôi chạy mô hình này bằng cách sử dụng tập lệnh ở trên, nó chỉ cần in giá trị đầu ra từ siêu dữ liệu tương ứng với tên của raster:

    Kết quả


  1. Tùy thuộc vào cách mô hình của bạn được xây dựng và có thể điều chỉnh tập lệnh, bạn có thể thực hiện nhiều phép tính raster của mình.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.