Suite

Accédez à des bandes individuelles et utilisez-les en algèbre cartographique


J'ai une liste de rasters multibandes, composée de : Rouge=Bande 1, NIR=Bande 2, SWIR1=Bande 3 et SWIR2=Bande 4. Ce que je veux, c'est accéder uniquement aux bandes rouge et NIR et l'enregistrer dans un nouveau fichier. Ensuite, je les utiliserai dans mes calculs d'algèbre cartographique ci-dessous.

(Notez que l'accès et l'enregistrement de la partie des bandes rouge et NIR sont toujours manquants dans mon code)

import arcpy from arcpy import env from arcpy.sa import * env.overwriteOutput = True #Définit l'espace de travail actuel, en supposant que toutes les bandes rouges et proches sont déjà #extraites et enregistrées en tant que bandes individuelles env.workspace = (r"C:	hesis hansenwipfilesfirst and last v1.0") #Liste des rasters (en supposant que les rasters ici sont déjà des bandes uniques) 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"] pour la plage en (0,4) : ndvi = Raster(NIRbandList[f])-Raster(RedbandList [f])/ Raster(NIRbandList[f])+Raster(RedbandList[f]) ndviFloat = float(ndvi) ouputName = ndviFloat ndviFloat.save(ouputName) print "Terminer !"

Je n'ai pas testé le code s'il fonctionne, bien qu'aucune erreur n'ait été trouvée après avoir exécuté le "Module de test".


Vous pouvez accéder à des bandes individuelles en joignant le nom de bande au chemin raster - c'est-à-direchemin/vers/raster/nom_bande.

Souvent en utilisantchemin/vers/raster/Band_[numéro de bande]fonctionne (c'est-à-direos.path.join(chemin raster, 'Band_1'), mais pas toujours. J'utilise pas mal les images Landsat 8 et ArcGIS nomme les bandes 'CoastalAerosol', 'Blue', 'Green', 'Red', etc...

Si vous ne savez pas quels sont les noms de bandes, vous pouvez consulter l'onglet Propriétés du raster -> Métadonnées clés -> Index des bandes source (notez que vous utilisez ArcCatalog ou la fenêtre Catalogue dans ArcMap pour vérifier les propriétés, ne le faites pas à partir de la table des matières d'ArcMap ).

Alternativement, vous pouvez obtenir les noms de bande dans le code en définissant l'espace de travail actuel sur le raster multibande, puis en appelantarcpy.ListRasters()pour obtenir une liste des noms de groupe.

Par exemple:

import os import arcview, arcpy from arcpy.sa import Raster, Float arcpy.CheckOutExtension('spatial') ls8ms = r'P:	emp	est.tif' #Certaines données multispectrales landsat 8 #Définir l'espace de travail sur un raster multibande, puis répertorier rasters pour obtenir les noms de bande #Il doit y avoir un moyen plus évident de le faire… arcpy.env.workspace = ls8ms bands = [Raster(os.path.join(ls8ms, b)) for b in arcpy.ListRasters()] # Placez l'espace de travail dans un endroit raisonnable arcpy.env.workspace = r'P:	emp' # Effectuez le calcul. # Notez que les numéros de bande sont indexés à 0. # Landsat 8 - Bande 5 (NIR) = bandes[4], Bande 4 (Rouge) = bandes[3] # Landsat 7 - Bande 4 (NIR) = bandes[3], Bande 3 (Rouge) = bandes[2] # Pour vos données - Band 2 (NIR) = bands[1], Band 1 (Red) = bands[0] ndvi = (Float(bands[4]) - bands[3]) / (Float(bands[4]) ) + bandes[3]) #Landsat 8 # ndvi = (Flotter(bandes[1]) - bandes[0]) / (Flotter(bandes[1]) + bandes[0]) #Vos données ndvi.save(r 'P:	emp	estndvi.tif') arcpy.CheckInExtension('spatial')

Vous pouvez résumer cela dans une petite fonction :

def get_bands(path_to_raster): """ Obtenir une liste de canaux en tant qu'objets raster à partir d'un raster multicanal """ oldws = arcpy.env.workspace #Enregistrer l'espace de travail précédent #Obtenir des objets raster à partir des noms de canaux arcpy.env.workspace = path_to_raster bands = [Raster(os.path.join(path_to_raster, b)) pour b dans arcpy.ListRasters()] #Restaurer l'espace de travail précédent arcpy.env.workspace = oldws return bands

Vous pouvez accéder à un canal individuel à partir d'un raster multicanal à l'aide de l'outil Créer une couche raster. Cela créerait un raster "en mémoire" avec lequel vous pouvez traiter, ce n'est pas un nouveau jeu de données.


Voir la vidéo: la carte topographique (Octobre 2021).