Suite

Conversion par lots de netCDF en raster à l'aide d'ArcPy ?


J'ai des difficultés à utiliser l'argument Valeurs de dimension (facultatif) dans arcpy.MakeNetCDFRasterLayer_md.

Quoi que je semble faire, le raster en sortie est toujours le premier calque qui est la valeur par défaut.

Vous trouverez ci-dessous ma tentative d'exporter toutes les couches vers un raster dans la dimension temporelle.

Code:

def extractAllNetCDF(): variable = "RRt_10m" x_dimension = "lon" y_dimension = "lat" band_dimension = "" dimension = "time" valueSelectionMethod = "BY_VALUE" outLoc = "E:/New Folder/" inNetCDF = "E:/ netCDFFiles/RRt.nc" nc_FP = arcpy.NetCDFFileProperties(inNetCDF) nc_Dim = nc_FP.getDimensions() pour la dimension dans nc_Dim : top = nc_FP.getDimensionSize(dimension) pour i in range(0, top): if dimension == "time ": dimension_values ​​= nc_FP.getDimensionValue(dimension, i) nowFile = str(dimension_values) arcpy.MakeNetCDFRasterLayer_md(inNetCDF, variable, x_dimension, y_dimension, nowFile, band_dimension, dimension_values, valueSelectionMethod) arcpy.CopyRaster_management(nowFile, " outLoc img", "", "", "", "AUCUN", "AUCUN", "") print dimension_values, i

La méthode d'impression à la fin affichera les dates telles qu'elles devraient être et l'index i se déplace également.

Quelqu'un a-t-il une idée de la façon d'exporter les couches suivantes?

Existe-t-il un code en ligne contenant un exemple spécifique utilisant l'argument Valeur de dimension autre que des guillemets vides ?


D'accord, c'était donc un peu délicat car il semblait y avoir plusieurs façons d'utiliser ce qui est décrit comme une table de valeurs sur la page d'aide ESRI :

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//004300000006000000.htm

Il existe également quelques utilisations de crochets qui pourraient être délicates si vous n'êtes pas vraiment sûr de la syntaxe, alors j'espère que si vous pouvez simplement utiliser l'exemple ci-dessous, cela fonctionnera.

Donc, ce que vous voulez vraiment, ce sont des réponses, alors voici avec un correctif

def extractAllNetCDF(): variable = "RRt_10m" x_dimension = "lon" y_dimension = "lat" band_dimension = "" dimension = "time" valueSelectionMethod = "BY_VALUE" outLoc = "E:/New Folder/" inNetCDF = "E:/ netCDFFiles/RRt.nc" nc_FP = arcpy.NetCDFFileProperties(inNetCDF) nc_Dim = nc_FP.getDimensions() pour la dimension dans nc_Dim : top = nc_FP.getDimensionSize(dimension) pour i in range(0, top): if dimension == "time ": dimension_values ​​= nc_FP.getDimensionValue(dimension, i) nowFile = str(dimension_values) #CECI EST LE NOUVEAU CODE ICI dv1 = ["time", dimension_value] dimension_values ​​= [dv1] #END NOUVEAU CODE arcpy.MakeNetCDFRasterLayer_md(inNetCDF, variable , x_dimension, y_dimension, nowFile, band_dimension, dimension_values, valueSelectionMethod) arcpy.CopyRaster_management(nowFile, outLoc + nowFile + ".img", "", "", "", "NONE", "NONE", "") print dimension_values , je

Voilà donc essentiellement. Il n'est pas nécessaire de créer une instance de type 'Table de valeurs', par ex.

vtab = arcpy.ValueTable(2)

comme cela semble être impliqué par le fait que l'argument a été étiqueté « table de valeur ».

Il n'est pas nécessaire d'utiliser tous les crochets qu'ils montrent dans les exemples, qu'ils soient bouclés, ronds ou autres. Suivez ce qui précède et cela devrait fonctionner.


Améliorer simplement l'efficacité de la réponse ci-dessus en tirant sur lesi dimension == "temps":hors de la boucle afin qu'il n'évalue pas inutilement encore et encore. A également extrait les barres obliques des noms de fichiers de sortie, pour corriger une erreur lors de l'exécution de MakeNetCDFRasterLayer_md.

def extractAllNetCDF(): variable = "precip" x_dimension = "lon" y_dimension = "lat" band_dimension = "" dimension = "time" valueSelectionMethod = "BY_VALUE" outLoc = r"C:UsersjkadminDownloadsShirina " inNetCDF = r"C:UsersjkadminDownloadsShirinprecip.mon.total.v7.nc" nc_FP = arcpy.NetCDFFileProperties(inNetCDF) nc_Dim = nc_FP.getDimensions() pour la dimension dans nc_Dim : si dimension == "time": top = nc_FP.getDimensionSize(dimension) for i in range(0, top): dimension_values ​​= nc_FP.getDimensionValue(dimension, i) nowFile = str(dimension_values) nowFile = nowFile.translate(None, '/') # Je n'avais besoin que des années 1950 si int(nowFile[-2]) > 4: dv1 = ["time", dimension_values] dimension_values ​​= [dv1] arcpy.MakeNetCDFRasterLayer_md(inNetCDF, variable, x_dimension, y_dimension, nowFile, band_dimension, dimension_values, valueSelectionMethod) print "success" outname = outLoc + nowFile arcpy.CopyRaster_management(nowFile, outname, "", "", "", "NONE", "NONE", "") else: print "before 195 0"


Voir la vidéo: How to open NetCDF.nc files in Qgis (Octobre 2021).