Sunday, 26 February 2017

Batch converting netCDF to Raster using ArcPy?



I'm having trouble using the Dimension Values (Optional) argument in arcpy.MakeNetCDFRasterLayer_md.


Whatever I seem to do the output raster is always the first layer which is the default value.


Below is my attempt to export all layers to raster in the time dimension.


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()

for dimension in nc_Dim:


top = nc_FP.getDimensionSize(dimension)

for 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 + nowFile + ".img", "", "", "", "NONE", "NONE", "")

print dimension_values, i

The print method at the end will show the dates as they should be and the index i is also moving alon so there is no reason to think that there are other problems with the code other than the Dimension Value being incorrect and reverting to the default.


Does anyone have any idea how to get the subsequent layers to export?


Is there any code online that has a specific example of this using the Dimension Value argument other than empty quotes?



Answer



Okay, so this was a little tricky as there seemed to be a few different ways of using what is descibed as a Value Table on the ESRI Help Page:


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



There are also a few uses of brackets that could be tricky if you are not really sure of the syntax so hopefully if you can just use the example below it will work.


So what you really want is answers so here it is with a fix


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()

for dimension in nc_Dim:

top = nc_FP.getDimensionSize(dimension)


for i in range(0, top):

if dimension == "time":

dimension_values = nc_FP.getDimensionValue(dimension, i)
nowFile = str(dimension_values)

#THIS IS THE NEW CODE HERE
dv1 = ["time", dimension_value]

dimension_values = [dv1]
#END NEW 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, i

So that's it essentially. There is no need to create an instance of 'Value Table' type e.g.


vtab = arcpy.ValueTable(2)


as is seemed to be implied by the fact the argument was labelled 'Value Table'.


There is no need to use all of the brackets that they show in the examples whether curly, round or otherwise. Follow the above and it should work.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...