Vairāk

Piekļūstiet atsevišķām joslām un izmantojiet tās karšu algebrā

Piekļūstiet atsevišķām joslām un izmantojiet tās karšu algebrā


Man ir daudzjoslu raseru saraksts, kas sastāv no: Sarkans = 1. josla, NIR = 2. josla, SWIR1 = 3. josla un SWIR2 = 4. josla. Es vēlos piekļūt tikai sarkanajām un NIR joslām un saglabāt to jaunā failā. Pēc tam es izmantošu tos, izmantojot tālāk minētos kartes algebra aprēķinus.

(Ņemiet vērā, ka manam kodam joprojām trūkst piekļuves sarkano un NIR joslu daļai un to saglabāšanu)

importēt arcpy no arcpy import env no arcpy.sa import * env.overwriteOutput = True #Iestatīt pašreizējo darbvietu, pieņemot, ka visas sarkanās un nir joslas jau ir #izņemtas un saglabātas kā atsevišķas joslas env.workspace = (r "C:  thesis  hansenwipfiles  first and last v1.0 ") #Raster List (Pieņemot, ka krāpnieki šeit jau ir vienas joslas) RedbandList = [" red20N_120E.tif "," red10N_120E.tif "," red20N_110E.tif "," red10N_110E.tif " ] NIRbandList = ["NIR20N_120E.tif", "NIR10N_120E.tif", "NIR20N_110E.tif", "NIR10N_110E.tif"] diapazonam (0,4): ndvi = Raster (NIRbandList [f])-Raster (RedbandList [f])/ Raster (NIRbandList [f])+Raster (RedbandList [f]) ​​ndviFloat = float (ndvi) ouputName = ndviFloat ndviFloat.save (ouputName) print "Finish!"

Es neesmu pārbaudījis kodu, ja tas darbojas, lai gan pēc "Testa moduļa" palaišanas netika atrasta neviena kļūda.


Jūs varat piekļūt atsevišķām joslām, pievienojot grupas nosaukumu rastra ceļam - t.i.ceļš/uz/raster/band_name.

Bieži lietojotceļš/uz/raster/Band_ [joslas numurs]darbojas (t.ios.path.join (rasterpath, 'Band_1'), bet ne vienmēr. Es diezgan daudz izmantoju Landsat 8 attēlus, un ArcGIS nosauc grupas “CoastalAerosol”, “Blue”, “Green”, “Red” utt.

Ja jūs nezināt, kādi ir joslu nosaukumi, varat pārbaudīt rastra rekvizītus-> KeyMetadata cilni -> avota joslas indeksu (ņemiet vērā, lai izmantotu ArcCatalog vai ArcMap logu Catalog, lai pārbaudītu rekvizītus, nedariet to no ArcMap TOC ).

Alternatīvi, joslu nosaukumus var iegūt kodā, iestatot pašreizējo darbvietu uz daudzjoslu rasteru un pēc tam piezvanotarcpy.ListRasters ()lai iegūtu grupu nosaukumu sarakstu.

Piemēram:

importēt os importēt arcview, arcpy no arcpy.sa importēt rastrus, Float arcpy. rasters, lai iegūtu joslu nosaukumus Iestatiet darba vietu kaut kur saprātīgā. Arcpy.env.workspace = r'P:  temp ' # Veiciet aprēķinus. # Piezīme. Joslu numuri ir indeksēti. # Landsat 8 - 5. josla (NIR) = joslas [4], 4. josla (sarkana) = joslas [3] # Landsat 7 - 4. josla (NIR) = joslas [3], 3. josla (sarkana) = joslas [2] # Jūsu zināšanai - 2. josla (NIR) = joslas [1], 1. josla (sarkana) = joslas [0] ndvi = (Float (joslas [4]) - joslas [3]) / (Float (joslas [4]) ) + joslas [3]) #Landsat 8 #ndvi = (Float (joslas [1]) - joslas [0]) / (Float (joslas [1]) + joslas [0]) #Jūsu dati ndvi.save (r 'P:  temp  testndvi.tif') arcpy.CheckInExtension ('telpisks')

Jūs varētu to apkopot nelielā funkcijā:

def get_bands (path_to_raster): "" "Iegūstiet joslu sarakstu kā rastra objektus no daudzjoslu rastra" "" oldws = arcpy.env.workspace #Saglabāt iepriekšējo darbvietu #Iegūt rastra objektus no joslu nosaukumiem arcpy.env.workspace = path_to_raster bands = [Rastrs (os.path.join (path_to_raster, b)) b ar arcpy.ListRasters ()] #Atjaunot iepriekšējo darbvietu arcpy.env.workspace = oldws atgriešanās joslas

Jūs varat piekļūt atsevišķai joslai no vairāku joslu rastra, izmantojot rīku Make RasterLayer. Tādējādi tiktu izveidots rastra “atmiņā esošs” rastrs, kuru var apstrādāt, tā nav jauna datu kopa.