Czy przeprowadzasz wielokrotne obliczenia rastrowe QGIS z danymi z zewnętrznego pliku CSV?


20

Muszę wykonać wiele obliczeń na zestawie rastrów na podstawie wartości w pliku metadanych CSV.

Korzystam z graficznego modelera QGIS i mogę wywoływać określone pole w pliku CSV z danymi wejściowymi Tablei Table Field.

Ponieważ mam wiele rastrów, a każdy raster ma odpowiednią wartość w CSV, jak mogę wywołać określony wiersz? (podobny na przykład do wyszukiwania).

Nie chcę dodawać skryptu, jeśli nie muszę tego robić ze względu na łatwość użycia.


1
Prawdopodobnie łatwiej byłoby do tego podejść, konwertując rastry na pliki punktowe. Stamtąd łatwiej byłoby wykonać niezbędne powiązania między tymi dwoma plikami. webhelp.esri.com/arcgisdesktop/9.3/…
Jamie2483

3
Stwórz listę (pseudokod) swojego zadania. Dzięki temu dowiesz się, czy musisz wykonać skrypt, aby wykonać swoją pracę. Iteracje lub procedury warunkowe wskazują na konieczność uciekania się do skryptów. Zrobione ze skryptami struktury są twoi przyjaciele.
ragnvald

Odpowiedzi:


2

Naprawdę stary post, ale myślę, że możliwym rozwiązaniem jest, niestety w twoim przypadku, użycie skryptu w twoim modelerze, który:

  • Pobiera nazwy wszystkich załadowanych warstw rastrowych.
  • Iteruj po metadanych, które zawierają kolumnę z nazwami rastrowymi.
  • Dopasowuje załadowane nazwy rastrowe do nazw w metadanych.
  • Jeśli zostaną znalezione jakiekolwiek dopasowania, wyodrębniona zostanie odpowiednia wartość rastra.

  1. Możesz utworzyć skrypt z:

    Processing Toolbox > Scripts > Tools > Create new script
    

    Następnie użyj czegoś takiego:

    ##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. Następnie dodaj skrypt do swojego modelera (zrobiłem prosty przykład z dwoma danymi wejściowymi):

    Modeler

    Jeśli uruchomię ten model przy użyciu powyższego skryptu, drukuje on po prostu wartość wyjściową z metadanych, która odpowiada nazwie rastra:

    Wynik


  1. W zależności od tego, w jaki sposób skonstruowany jest Twój model i być może dostrajając skrypt, możesz wykonać wiele obliczeń rastrowych.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.