{"id":799071,"date":"2020-04-22T06:20:18","date_gmt":"2020-04-22T13:20:18","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=799071"},"modified":"2022-03-28T07:08:04","modified_gmt":"2022-03-28T14:08:04","slug":"creating-netcdf-files-for-analysis-and-visualization-in-arcgis","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis","title":{"rendered":"Creating NetCDF files for Analysis and Visualization in ArcGIS"},"author":9412,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771,23341,23851],"tags":[30111,32971,612611,34261,24341],"industry":[],"product":[421922,36841,36561],"class_list":["post-799071","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-analytics","category-data-management","tag-data-visualization","tag-evapotranspiration","tag-multidimensional","tag-netcdf","tag-python","product-arcgis","product-api-python","product-arcgis-pro"],"acf":{"short_description":"Use python to transform your data set into netCDF files. Use the ArcGIS platform to perform multidimensional analysis or create visualizations.","flexible_content":[{"acf_fc_layout":"content","content":"<p>NetCDF is a multidimensional scientific data format especially useful for the representation of complex spatial information (x, y) that also varies in depth (z) or time (t). NetCDFs are leveraged within the ArcGIS platform for superb multidimensional analysis or slick 3D visualizations.<br \/>\nMost of the time, we already have ready-to-use netCDF files, but we can also create netCDF files from any multidimensional data set. In this blog, we\u2019ll show you how to create a netCDF file on python from common formats such as: (1) point shapefile, (2) tiff raster, and (3) comma-separated files.<\/p>\n<h2>Before we begin<\/h2>\n<p>NetCDF is a powerful data format, but it requires some prior knowledge on how its structure works. You can review some basic concepts on <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/help\/data\/multidimensional\/what-is-netcdf-data.htm\">what is netCDF data<\/a>, <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/help\/data\/multidimensional\/fundamentals-of-netcdf-data-storage.htm\">fundamentals of netCDF data storage<\/a>, or <a href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-pro\/analytics\/accessing-multidimensional-scientific-data-using-python\/\">accessing multidimensional scientific data using python<\/a>. Additionally, in this blog we\u2019re following the<a href=\"http:\/\/cfconventions.org\/\"> Climate and Forecast (CF) convention<\/a> as a standard for the description of attributes, names of variables, and units. You can use the CF convention guidelines as a reference for the documentation of netCDF files.<\/p>\n<h2>Sample data<\/h2>\n<p>For this exercise, we\u2019ll use a <a href=\"https:\/\/arcgis.com\/home\/item.html?id=3cf6d14d398e4b86811a5a0f09515d45\">subset of monthly evapotranspiration<\/a> (ET) from <a href=\"https:\/\/www.hydroshare.org\/resource\/24792a48a6394dcba52da62fa324ae40\/\">ET-Amazon<\/a> for the state of Rond\u00f4nia in Brazil. This region has been subject to deforestation, observed as a decrease in ET. The ET-Amazon data set has reports ET (mm\/month) in a three-dimensional space: <strong>x<\/strong>, <strong>y<\/strong>, and <strong>t<\/strong>.<\/p>\n<p>After you downloaded the <a href=\"https:\/\/arcgis.com\/home\/item.html?id=3cf6d14d398e4b86811a5a0f09515d45\">ETAmazon_subset.zip<\/a> file, extract its contents into your local computer to the <strong>C:\\temp\\netcdf_blog<\/strong> directory.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":832801,"id":832801,"title":"NetCDF-directory","filename":"directory-1.png","filesize":18213,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\/directory-2","alt":"NetCDF directory","author":"9412","description":"","caption":"","name":"directory-2","status":"inherit","uploaded_to":799071,"date":"2020-04-22 16:09:34","modified":"2020-04-22 16:09:47","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":275,"height":424,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","medium-width":169,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","medium_large-width":275,"medium_large-height":424,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","large-width":275,"large-height":424,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","1536x1536-width":275,"1536x1536-height":424,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","2048x2048-width":275,"2048x2048-height":424,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","card_image-width":275,"card_image-height":424,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/directory-1.png","wide_image-width":275,"wide_image-height":424}},"image_position":"left-center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2>Load libraries and create empty netCDF file<\/h2>\n<p>In python, load the required libraries using the <strong>import <\/strong>statement. Assign the directory of the extracted data to the<strong> data_path<\/strong> variable. Use the <strong>netCDF4.Dataset<\/strong> function to create an empty netCDF file. Remember to use the the <strong>*.nc<\/strong> extension in the name of the file and the <strong>\u2018w\u2019 <\/strong>option to be able to write to the netCDF file.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #000096\">import<\/span> netCDF4\r\n<span style=\"color: #000096\">import<\/span> os\r\n<span style=\"color: #000096\">import<\/span> datetime <span style=\"color: #000096\">as<\/span> dt\r\n<span style=\"color: #000096\">import<\/span> numpy as np\r\n<span style=\"color: #000096\">import<\/span> arcpy\r\n<span style=\"color: #000096\">import<\/span> csv\r\n\r\n<span style=\"color: #808080\"># Data path<\/span>\r\ndata_path = <span style=\"color: #008000\">r'C:\\temp\\netcdf_blog'<\/span>\r\n\r\n<span style=\"color: #808080\"># Create NetCDF File<\/span>\r\noutput_nc = os.path.join(data_path, <span style=\"color: #008000\">'ETAmazon_20200406.nc'<\/span>)\r\nnc = netCDF4.Dataset(output_nc, <span style=\"color: #008000\">'w'<\/span>)<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Global attributes<\/h2>\n<p>Global attributes are key to describe the netCDF to other collaborators or users. Remember to review the CF convention for a complete list of required and suggested attributes.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Global attributes<\/span>\r\nnc.title = <span style=\"color: #008000\">'ET-Amazon'<\/span>\r\nnc.summary = (<span style=\"color: #008000\">'Actual monthly evapotranspiration in Rondonia, Brazil '\r\n              'for June 2005, 2009, and 2013'<\/span>)\r\nnc.keywords = <span style=\"color: #008000\">'Evapotranspiration, Amazon, Water cycle'<\/span>\r\nnc.license = (<span style=\"color: #008000\">'This work is licensed under a Creative Commons '\r\n              'Attribution 4.0 International License.'<\/span>)\r\nnc.references = (<span style=\"color: #008000\">'Paca, V.H., Espinoza-Davalos, G.E., Hessels, T.M., '\r\n                 'Moreira, D., Comair, G.F., Bastiaanssen, W. (2019). '\r\n                 'The Spatial Variability of Actual Evapotranspiration '\r\n                 'Across the Amazon River Basin Based on Remote Sensing '\r\n                 'Models Validated with Flux-Towers. Ecological Processes. '\r\n                 '8(1), 6. https:\/\/doi.org\/10.1186\/s13717-019-0158-8'<\/span>)\r\nnc.source = <span style=\"color: #008000\">'https:\/\/www.hydroshare.org\/resource\/24792a48a6394dcba52da62fa324ae40\/'<\/span>\r\nnc.Conventions = <span style=\"color: #008000\">'CF-1.6'<\/span>\r\nnc.institution = <span style=\"color: #008000\">'Esri'<\/span>\r\nnc.history = <span style=\"color: #008000\">'{0} creation of ET-Amazon netcdf file.'<\/span>.format(\r\n              dt.datetime.now().strftime(<span style=\"color: #008000\">\"%Y-%m-%d\"<\/span>)\r\n             )<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Create dimensions<\/h2>\n<p>Create three dimensions: one for longitude (x), one for latitude (y) and one for time (t). In the sample data, we have values for 176 rows (y), 244 columns (x), and 3 months (t).<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Create dimensions<\/span>\r\nlat_dim = nc.createDimension(<span style=\"color: #008000\">'latitude'<\/span>, <span style=\"color: #0000ff\">176<\/span>)\r\nlon_dim = nc.createDimension(<span style=\"color: #008000\">'longitude'<\/span>, <span style=\"color: #0000ff\">244<\/span>)\r\ntim_dim = nc.createDimension(<span style=\"color: #008000\">'time'<\/span>, <span style=\"color: #0000ff\">3<\/span>)<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Create variables<\/h2>\n<p>Create five variables: one variable per dimension (longitude, latitude, and time), one variable for the mapping grid (crs), and one variable for the evapotranspiration values (ET). Notice that each variable have associated dimensions to them. The longitude, latitude, and time variables have only their own dimension associated to each one of them. The mapping grid (crs) has zero dimensions, and ET has three dimensions (in order: time, latitude, and longitude) for a total of 176 x 244 x 3 = 128,832 data values.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Create variables<\/span>\r\nlat_var = nc.createVariable(<span style=\"color: #008000\">'latitude'<\/span>, np.float64, (<span style=\"color: #008000\">'latitude'<\/span>))\r\nlat_var.units = <span style=\"color: #008000\">'degrees_north'<\/span>\r\nlat_var.standard_name = <span style=\"color: #008000\">'latitude'<\/span>\r\nlat_var.axis = <span style=\"color: #008000\">'Y'<\/span>\r\n\r\nlon_var = nc.createVariable(<span style=\"color: #008000\">'longitude'<\/span>, np.float64, (<span style=\"color: #008000\">'longitude'<\/span>))\r\nlon_var.units = <span style=\"color: #008000\">'degrees_east'<\/span>\r\nlon_var.standard_name = <span style=\"color: #008000\">'longitude'<\/span>\r\nlon_var.axis = <span style=\"color: #008000\">'X'<\/span>\r\n\r\ntime_var = nc.createVariable(<span style=\"color: #008000\">'time'<\/span>, np.int32, (<span style=\"color: #008000\">'time'<\/span>))\r\ntime_var.standard_name = <span style=\"color: #008000\">'time'<\/span>\r\ntime_var.calendar = <span style=\"color: #008000\">'gregorian'<\/span>\r\ntime_var.time_step = <span style=\"color: #008000\">'Monthly'<\/span>\r\ntime_var.units = <span style=\"color: #008000\">'Seconds since 1970-01-01 00:00:00'<\/span>\r\ntime_var.axis = <span style=\"color: #008000\">'T'<\/span>\r\n\r\ncrs_var = nc.createVariable(<span style=\"color: #008000\">'crs'<\/span>, np.int8, ())\r\ncrs_var.standard_name = <span style=\"color: #008000\">'crs'<\/span>\r\ncrs_var.grid_mapping_name = <span style=\"color: #008000\">'latitude_longitude'<\/span>\r\ncrs_var.crs_wkt = (<span style=\"color: #008000\">\"GEOGCS['GCS_WGS_1984',DATUM['D_WGS_1984',\"\r\n                   \"SPHEROID['WGS_1984',6378137.0,298.257223563]],\"\r\n                   \"PRIMEM['Greenwich',0.0],\"\r\n                   \"UNIT['Degree',0.0174532925199433]]\"<\/span>)\r\n\r\net_var = nc.createVariable(<span style=\"color: #008000\">'ET'<\/span>, np.int16, (<span style=\"color: #008000\">'time'<\/span>, <span style=\"color: #008000\">'latitude'<\/span>, <span style=\"color: #008000\">'longitude'<\/span>),\r\n                           <span style=\"color: #6400bc\">fill_value<\/span>=<span style=\"color: #0000ff\">9999<\/span>)\r\net_var.units = <span style=\"color: #008000\">'mm\/month'<\/span>\r\net_var.long_name = <span style=\"color: #008000\">'Actual Evapotranspiration'<\/span>\r\net_var.short_name = <span style=\"color: #008000\">'ET'<\/span>\r\net_var.grid_mapping = <span style=\"color: #008000\">'crs'<\/span><\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Load values<\/h2>\n<p>Let\u2019s load the values for the variables of time, latitude, longitude, and evapotranspiration.<\/p>\n<h3>Time<\/h3>\n<p>Use the <strong>datetime<\/strong> library to calculate the seconds since epoch (01\/01\/1970). Store the values in a list and store them in the<strong> times_values<\/strong> variable.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Load values: time<\/span>\r\ndate_200506 = <span style=\"color: #000096\">int<\/span>((dt.datetime(<span style=\"color: #0000ff\">2005<\/span>,<span style=\"color: #0000ff\">6<\/span>,<span style=\"color: #0000ff\">1<\/span>) - dt.datetime(<span style=\"color: #0000ff\">1970<\/span>,<span style=\"color: #0000ff\">1<\/span>,<span style=\"color: #0000ff\">1<\/span>)).total_seconds())\r\ndate_200906 = <span style=\"color: #000096\">int<\/span>((dt.datetime(<span style=\"color: #0000ff\">2009<\/span>,<span style=\"color: #0000ff\">6<\/span>,<span style=\"color: #0000ff\">1<\/span>) - dt.datetime(<span style=\"color: #0000ff\">1970<\/span>,<span style=\"color: #0000ff\">1<\/span>,<span style=\"color: #0000ff\">1<\/span>)).total_seconds())\r\ndate_201306 = <span style=\"color: #000096\">int<\/span>((dt.datetime(<span style=\"color: #0000ff\">2013<\/span>,<span style=\"color: #0000ff\">6<\/span>,<span style=\"color: #0000ff\">1<\/span>) - dt.datetime(<span style=\"color: #0000ff\">1970<\/span>,<span style=\"color: #0000ff\">1<\/span>,<span style=\"color: #0000ff\">1<\/span>)).total_seconds())\r\ntime_values = [date_200506, date_200906, date_201306]\r\ntime_var[:] = time_values<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3>Latitude and Longitude<\/h3>\n<p>Create two lists using <strong>np.arange<\/strong> for the latitudes and longitudes of the center points of the grid cells. The grid cells are spaced <strong>0.0025<\/strong> degrees. Add or subtract half-cell size (i.e. 0.0025\/2) to the starting point to get the coordinates at the middle instead of the edge of the grid cells.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Load values: latitude and longitude<\/span>\r\nlat_values = np.arange(-<span style=\"color: #0000ff\">9.6491667<\/span> - <span style=\"color: #0000ff\">0.0025<\/span>\/<span style=\"color: #0000ff\">2<\/span>, -<span style=\"color: #0000ff\">10.0891667<\/span>, -<span style=\"color: #0000ff\">0.0025<\/span>)\r\nlon_values = np.arange(-<span style=\"color: #0000ff\">64.735<\/span> + <span style=\"color: #0000ff\">0.0025<\/span>\/<span style=\"color: #0000ff\">2<\/span>, -<span style=\"color: #0000ff\">64.125<\/span>, <span style=\"color: #0000ff\">0.0025<\/span>)\r\nlat_var[:] = lat_values\r\nlon_var[:] = lon_values<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h3>Evapotranspiration<\/h3>\n<p>Let\u2019s explore three different ways to load values into the ET variables: from a raster, a point shapefile, and a csv file. In short, we load the values using python libraries like arcpy, csv, or numpy and save them into the <strong>et_var<\/strong> variable array.<\/p>\n<h4>Load values from raster<\/h4>\n<p>Use the <strong>read<\/strong> method of the <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/arcpy\/classes\/raster-object.htm\">arcpy.Raster<\/a> object\u00a0to load the values of the <strong>ETAmazon_201306.tif<\/strong> raster. Store the array into time third position (index=2)<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Load ET values from raster<\/span>\r\nras_201306 = os.path.join(data_path, <span style=\"color: #008000\">'ETAmazon_201306.tif'<\/span>)\r\nraslyr_201306 = arcpy.Raster(ras_201306)\r\narray_201306 = raslyr_201306.read()\r\net_var[<span style=\"color: #0000ff\">2<\/span>, :, :] = array_201306[:, :, <span style=\"color: #0000ff\">0<\/span>]<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<p><strong>Note:<\/strong> As an alternative workflow, we could also use the <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/arcpy\/functions\/rastertonumpyarray-function.htm\">arcpy.RasterToNumPyArray<\/a>\u00a0function to load the values of the\u00a0ETAmazon_201306.tif\u00a0raster.<\/p>\n<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Load ET values from raster<\/span>\r\nras_201306 = os.path.join(data_path, <span style=\"color: #008000\">'ETAmazon_201306.tif'<\/span>)\r\narray_201306 = arcpy.RasterToNumPyArray(ras_201306)\r\net_var[<span style=\"color: #0000ff\">2<\/span>, :, :] = array_201306<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h4>Load values from point shapefile<\/h4>\n<p>Use a <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/arcpy\/data-access\/searchcursor-class.htm\">SearchCursor<\/a> to read the values for each point in the <strong>ETAmazon_200906.shp<\/strong> shapefile. Get the longitude and latitude indices (i, j) by identifying the closest longitude or latitude values, that is where the absolute difference is the lowest. Store the array into time second position (index=1).<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Load ET values from point shapefile<\/span>\r\nshp_200906 = os.path.join(data_path, <span style=\"color: #008000\">'ETAmazon_200906.shp'<\/span>)\r\n<span style=\"color: #000096\">with<\/span> arcpy.da.SearchCursor(shp_200906, [<span style=\"color: #008000\">'SHAPE@X'<\/span>, <span style=\"color: #008000\">'SHAPE@Y'<\/span>, <span style=\"color: #008000\">'ET'<\/span>]) <span style=\"color: #000096\">as<\/span> cursor:\r\n    <span style=\"color: #000096\">for<\/span> row <span style=\"color: #000096\">in<\/span> cursor:\r\n        i = (np.abs(lon_values - row[<span style=\"color: #0000ff\">0<\/span>])).argmin()\r\n        j = (np.abs(lat_values - row[<span style=\"color: #0000ff\">1<\/span>])).argmin()\r\n        et_var[<span style=\"color: #0000ff\">1<\/span>, j, i] = row[<span style=\"color: #0000ff\">2<\/span>]<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h4>Load values from csv file<\/h4>\n<p>Open the <strong>ETAmazon_200506.csv<\/strong> file and read the values as dictionaries, using the headers as keys. Similarly as with the point shapefile, identify the indices (m, n) of the closest latitude and longitude values. Store the array into time first position (index=0).<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\"><span style=\"color: #808080\"># Load ET values from csv<\/span>\r\nfile_200806 = os.path.join(data_path, <span style=\"color: #008000\">'ETAmazon_200506.csv'<\/span>)\r\n<span style=\"color: #000096\">with<\/span> open(file_200806, 'r') <span style=\"color: #000096\">as<\/span> f:\r\n    reader = csv.DictReader(f)\r\n    <span style=\"color: #000096\">for<\/span> line <span style=\"color: #000096\">in<\/span> reader:\r\n        m = (np.abs(lon_values - <span style=\"color: #000096\">float<\/span>(line[<span style=\"color: #008000\">'longitude'<\/span>]))).argmin()\r\n        n = (np.abs(lat_values - <span style=\"color: #000096\">float<\/span>(line[<span style=\"color: #008000\">'latitude'<\/span>]))).argmin()\r\n        et_var[<span style=\"color: #0000ff\">0<\/span>, n, m] = line[<span style=\"color: #008000\">'ET'<\/span>]<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Close netCDF file<\/h2>\n<p>Finally, close the <strong>nc<\/strong> file.<\/p>\n"},{"acf_fc_layout":"content","content":"<pre><code style=\"padding: 0.5em;color: #333;background: #f8f8f8\">nc.close()\r\n<\/code><\/pre>\n"},{"acf_fc_layout":"content","content":"<h2>Summary<\/h2>\n<p>NetCDF is a multidimensional data format that can be used extensively in the ArcGIS platform, from 3D visualizations to multidimensional analysis of complex data sets. It is easy to create netCDF files using python, from existing data formats such as rasters, point shapefiles, or csv files.\u00a0 NetCDF\u2019s are self-describing, meaning software packages can directly read the data and determine format.\u00a0 The structure contains the variable names and essential metadata such as units.\u00a0 These capabilities also lend the netCDF format to be used widely for scientific data archival. Government agencies such as NASA and NOAA use netCDF format to deliver data to end users.<\/p>\n<h2>More information?<\/h2>\n<p>Join <a href=\"https:\/\/community.esri.com\/\">GeoNet<\/a> and ask a question to our community of experts.<\/p>\n<h2>References<\/h2>\n<p>Paca, V., Espinoza-D\u00e1valos, G.E., Hessels, T.M. et al. The spatial variability of actual evapotranspiration across the Amazon River Basin based on remote sensing products validated with flux towers. Ecol Process 8, 6 (2019).\u00a0<a href=\"https:\/\/doi.org\/10.1186\/s13717-019-0158-8\">https:\/\/doi.org\/10.1186\/s13717-019-0158-8<\/a><\/p>\n"}],"authors":[{"ID":9412,"user_firstname":"Gonzalo","user_lastname":"Espinoza Davalos","nickname":"Gonzalo Espinoza","user_nicename":"gespinoza","display_name":"Gonzalo Espinoza","user_email":"gespinoza@esri.com","user_url":"http:\/\/www.gespinozadav.com","user_registered":"2019-04-04 19:02:26","user_description":"Gonzalo Espinoza specializes in hydrologic modeling, real time climate and hydro-informatic tools such as flood mapping and forecasting using National Water Model data. He masters the full geospatial tech stack required to develop scalable and operational services relying on large volumes of EO data in the fields of water and environment. Gonzalo holds a PhD in Civil Engineering from the University of Texas at Austin.\r\n\r\nFor questions about ArcGIS Living Atlas, contact environment@esri.com","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/12\/head_shot_gonzalo_2-1-465x465.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":6701,"user_firstname":"Keith","user_lastname":"VanGraafeiland","nickname":"Keith VanGraafeiland","user_nicename":"kvangraafeiland","display_name":"Keith VanGraafeiland","user_email":"KVanGraafeiland@esri.com","user_url":"https:\/\/oceans-esrioceans.hub.arcgis.com\/","user_registered":"2018-03-02 00:18:44","user_description":"Keith VanGraafeiland is a Senior Principal GIS Engineer at Esri and Ocean Content Lead for the ArcGIS Living Atlas of the World. With over 18 years of experience, Keith specializes in marine and environmental GIS, remote sensing, and advanced data science. Keith\u2019s work bridges oceanography and data science, using machine learning and analytics to turn complex data into actionable insights for the GIS community.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/02\/KeithVanGraafeiland-7-465x465.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/NetCDF_BlogCard.jpg","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/NetCDF_BlogBanner-e1726511576981.jpg"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Creating NetCDF files for Analysis and Visualization in ArcGIS<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating NetCDF files for Analysis and Visualization in ArcGIS\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-28T14:08:04+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\"},\"author\":{\"name\":\"Gonzalo Espinoza\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7c6c2ef442df4dd54243a2d837c870c2\"},\"headline\":\"Creating NetCDF files for Analysis and Visualization in ArcGIS\",\"datePublished\":\"2020-04-22T13:20:18+00:00\",\"dateModified\":\"2022-03-28T14:08:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\"},\"wordCount\":9,\"commentCount\":7,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"data visualization\",\"Evapotranspiration\",\"multidimensional\",\"netCDF\",\"python\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"Analytics\",\"Data Management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\",\"name\":\"Creating NetCDF files for Analysis and Visualization in ArcGIS\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2020-04-22T13:20:18+00:00\",\"dateModified\":\"2022-03-28T14:08:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Creating NetCDF files for Analysis and Visualization in ArcGIS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7c6c2ef442df4dd54243a2d837c870c2\",\"name\":\"Gonzalo Espinoza\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/12\/head_shot_gonzalo_2-1-465x465.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/12\/head_shot_gonzalo_2-1-465x465.jpg\",\"caption\":\"Gonzalo Espinoza\"},\"description\":\"Gonzalo Espinoza specializes in hydrologic modeling, real time climate and hydro-informatic tools such as flood mapping and forecasting using National Water Model data. He masters the full geospatial tech stack required to develop scalable and operational services relying on large volumes of EO data in the fields of water and environment. Gonzalo holds a PhD in Civil Engineering from the University of Texas at Austin. For questions about ArcGIS Living Atlas, contact environment@esri.com\",\"sameAs\":[\"http:\/\/www.gespinozadav.com\",\"www.linkedin.com\/in\/gonzalo-espinoza-davalos\",\"https:\/\/x.com\/gespindav\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/gespinoza\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating NetCDF files for Analysis and Visualization in ArcGIS","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis","og_locale":"en_US","og_type":"article","og_title":"Creating NetCDF files for Analysis and Visualization in ArcGIS","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2022-03-28T14:08:04+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis"},"author":{"name":"Gonzalo Espinoza","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7c6c2ef442df4dd54243a2d837c870c2"},"headline":"Creating NetCDF files for Analysis and Visualization in ArcGIS","datePublished":"2020-04-22T13:20:18+00:00","dateModified":"2022-03-28T14:08:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis"},"wordCount":9,"commentCount":7,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["data visualization","Evapotranspiration","multidimensional","netCDF","python"],"articleSection":["3D Visualization &amp; Analytics","Analytics","Data Management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis","name":"Creating NetCDF files for Analysis and Visualization in ArcGIS","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2020-04-22T13:20:18+00:00","dateModified":"2022-03-28T14:08:04+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Creating NetCDF files for Analysis and Visualization in ArcGIS"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/7c6c2ef442df4dd54243a2d837c870c2","name":"Gonzalo Espinoza","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/12\/head_shot_gonzalo_2-1-465x465.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/12\/head_shot_gonzalo_2-1-465x465.jpg","caption":"Gonzalo Espinoza"},"description":"Gonzalo Espinoza specializes in hydrologic modeling, real time climate and hydro-informatic tools such as flood mapping and forecasting using National Water Model data. He masters the full geospatial tech stack required to develop scalable and operational services relying on large volumes of EO data in the fields of water and environment. Gonzalo holds a PhD in Civil Engineering from the University of Texas at Austin. For questions about ArcGIS Living Atlas, contact environment@esri.com","sameAs":["http:\/\/www.gespinozadav.com","www.linkedin.com\/in\/gonzalo-espinoza-davalos","https:\/\/x.com\/gespindav"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/gespinoza"}]}},"text_date":"April 22, 2020","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis\/data-management\/creating-netcdf-files-for-analysis-and-visualization-in-arcgis","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2020\/04\/NetCDF_BlogBanner-e1726511576981.jpg","primary_product":"ArcGIS","tag_data":[{"term_id":30111,"name":"data visualization","slug":"data-visualization","term_group":0,"term_taxonomy_id":30111,"taxonomy":"post_tag","description":"","parent":0,"count":97,"filter":"raw"},{"term_id":32971,"name":"Evapotranspiration","slug":"evapotranspiration","term_group":0,"term_taxonomy_id":32971,"taxonomy":"post_tag","description":"","parent":0,"count":5,"filter":"raw"},{"term_id":612611,"name":"multidimensional","slug":"multidimensional","term_group":0,"term_taxonomy_id":612611,"taxonomy":"post_tag","description":"","parent":0,"count":16,"filter":"raw"},{"term_id":34261,"name":"netCDF","slug":"netcdf","term_group":0,"term_taxonomy_id":34261,"taxonomy":"post_tag","description":"","parent":0,"count":11,"filter":"raw"},{"term_id":24341,"name":"python","slug":"python","term_group":0,"term_taxonomy_id":24341,"taxonomy":"post_tag","description":"","parent":0,"count":171,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":686,"filter":"raw"},{"term_id":23341,"name":"Analytics","slug":"analytics","term_group":0,"term_taxonomy_id":23341,"taxonomy":"category","description":"","parent":0,"count":1325,"filter":"raw"},{"term_id":23851,"name":"Data Management","slug":"data-management","term_group":0,"term_taxonomy_id":23851,"taxonomy":"category","description":"","parent":0,"count":920,"filter":"raw"}],"product_data":[{"term_id":421922,"name":"ArcGIS","slug":"arcgis","term_group":0,"term_taxonomy_id":421922,"taxonomy":"product","description":"Reserved for articles that cover all of ArcGIS","parent":36981,"count":336,"filter":"raw"},{"term_id":36841,"name":"ArcGIS API for Python","slug":"api-python","term_group":0,"term_taxonomy_id":36841,"taxonomy":"product","description":"","parent":36601,"count":151,"filter":"raw"},{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2035,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=arcgis","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/799071","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/9412"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=799071"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/799071\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=799071"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=799071"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=799071"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=799071"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=799071"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}