Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

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?

share|improve this question
    
Do you have much experience in Python? Without having a serious play myself, you could try looking at the netcdf file using the netcdf4-python library to explore the data. Potentially you could even save the layers as NumPy arrays, and then import them into ArcGIS from there. –  om_henners Nov 14 '11 at 2:21
    
I think that using numpy arrays may not be such a bad idea as then I can run it without using a licence. Thanks for the pointer to netcdf4-python, I will need it when I remove the hardwired code it has for testing so it will come in handy. –  EnE_ Nov 14 '11 at 5:07
    
I think it will be easier if use gdal_translate to do this! –  user12739 Nov 13 '12 at 17:06

1 Answer 1

up vote 3 down vote accepted

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.

share|improve this answer
    
Thank you so much for this code @EnE_ - it has been the most useful I have found for batch converting netCDF! –  ccn May 1 '13 at 20:02

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.