Več

Pomnožite dva seznama rastrov iz dveh podmap

Pomnožite dva seznama rastrov iz dveh podmap


Imam dve podmapi, ki vsebuje rastre za vsako državo, vendar izražata različne spremenljivke. Poskušam najti način, kako ponoviti množenje vsakega rastra v mapo s parom druge podmape. Izgleda kot:.

AFG_13 AFG_25.tif_int za Afganistan AGO_13 AGO_25.tif_int za Angolo itd ...

kjer prvi stolpec predstavlja celotno populacijo, drugi pa je kot maska ​​(dejansko potrebujem samo piksel z vrednostmi 25, pretvorjenimi v vrednost pikslov 1)

Z drugimi besedami, pomnožiti moramAFG_13 * con (AFG_25.tif_int == 25,1)v Pythonu ... težavo sem že poskušal rešiti na različne načine, a vseeno nič ... nekaj nasvetov?


Za naslednje je potrebna licenca Spatial Analyst.

Raster objekt ArcPy ponuja precej intuitiven vmesnik za delo z rastri. Ko je enkrat ustvarjen rasterski objekt, lahko na njem izvajate matematične operacije na zelo podoben način kot operacije na vgrajenih predmetih python. Lastnosti in metode na krožniku Raster Object bi morale biti koristne tudi za prepoznavanje vaših rastrov glede na vaše "AFG"itd. poimenovanje.

Začel bi z izdelavo seznama rastrov v vsaki od svojih podmap, nato pa prelistal te sezname in ustvaril rastrske predmete za vse rastre. Nato samo za tiste rastre, ki vsebujejo na primer "AFG"v imenu bi jih izoliral in izvedel svoje matematične operacije. Končno bi rezultat rastra shranil v trajno datoteko na disku.

import arcpy from arcpy.sa import * import os country_code = 'AFG_' variable_code_one = '13' variable_code_two = '25' folder_one = 'C: / rasters / folder_one' folder_two = 'C: / rasters / folder_two' output_folder = 'C: / rasters / output 'folders_list = [folder_one, folder_two] raster_objects_list = [] # filtrirajte razpoložljive rastre po kodi države in ustvarite rastrske predmete za mapo v folders_list: arcpy.env.workspace = mapa za rastre v arcpy.ListRasters (' * '+ koda_ države, 'TIF'): raster.split ('.') [0] = arcpy.Raster (raster) raster_objects_list.append (raster.split ('.') [0]) # izvaja matematične operacije na rastrskih objektih (to verjetno ni najboljši način) # To predvideva, da je v naboru za raster v raster_objects_list na voljo samo 1 "_13" spremenljiv raster in samo 1 "_25" spremenljiv raster: če variable_code_one v raster.name: variable_one_raster = raster za raster v raster_objects_list: če spremenljiva_koda_dve v raster.name: variable_two_raster = raster output_raster = (variable_one_r aster * variable_two_raster) # ali katero koli drugo matematično operacijo output_raster.save (output_folder + os.sep + country_code + '_results')

Naj sreča s tem.