Перевод условного оператора ArcMap в Python Если затем - PullRequest
0 голосов
/ 14 февраля 2020

Я новичок в Python и пытаюсь перевести оператор Con, встроенный в ArcMap Raster Calculator, в оператор "IF / THEN" с помощью Jupyter Notebook. Сценарий постоянно растет по мере того, как я добавляю больше узлов в дерево классификации, которое он представляет, и становится менее управляемым. Я думаю, что использование скрипта Python будет лучшим способом упростить и значительно упростить процесс автоматизации и редактирования. Возможно, этот вопрос слишком широк и его нелегко объединить в один ответ, поэтому даже какое-то направление к хорошему ресурсу для обучения будет полезным. Тем не менее, до сих пор мне не очень повезло с поиском ответов, которые я ищу.

Итак, поехали! -

Я хотел бы выяснить (1) Каков наилучший пакет для чтения данных, которые я пытаюсь использовать? (Arcpy, Rasterio, Numpy, et c) (2) Как лучше всего структурировать аргумент? (Определить функцию, для L oop, If, If in)

Вот список используемых данных, типов и имен переменных:

Elevation, .tif, "CONED_MATerMos_MHW_mosaic_10.tif";
Relative sea level rise, ESRI GRID, "sweet_idw";
Land cover, ESRI GRID, tks_landcover;
Slope, ESRI GRID, "slope";
Retreat Rate, ESRI GRID, "retreat_rate";
Unvegetated/Vegetated Ratio, ESRI GRID, "UVVR"

Вот инструкция Con:

Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & (("tks_landcover" == 1)|("tks_landcover" == 2))), 30, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 3)),20, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 4) & ("slope" < 15)),30,Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 4) & ("slope" >= 15)),20, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 5)),40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & (("tks_landcover" == 6)|("tks_landcover" == 7))),40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 8) & ("retreat_rate" >= 1)), 50,Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 8) & ("retreat_rate" < 1)), 40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 9)),40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1) & ("tks_landcover" == 10)),50, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1) & ("tks_landcover" == 11)),40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 12)),40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 13) & ("CONED_MATerMos_MHW_mosaic_10.tif" < 0.85) & ("UVVR" <= 0.1)), 50, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 13) & ("CONED_MATerMos_MHW_mosaic_10.tif" < 0.85) & ("UVVR" > 0.1)), 60, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 13) & ("CONED_MATerMos_MHW_mosaic_10.tif" > 0.85) & ("UVVR" <= 0.1)), 40, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & ("tks_landcover" == 13) & ("CONED_MATerMos_MHW_mosaic_10.tif" > 0.85) & ("UVVR" > 0.1)), 50, Con(("CONED_MATerMos_MHW_mosaic_10.tif" & ("sweet_idw" >= 1)  & (("tks_landcover" == 14)|("tks_landcover" == 15))),0))))))))))))))))))

Вот что я начал, предполагая, что переменные уже определены:

def class_tree(DEM,RSLR,landcover,UVVR)
    if in DEM:
        if in RSLR:
            if in landcover:
                if Value <= 2:
                    30
                elif landcover == 3:
                    20

                #...

                else:
                    0
...