[ncl-talk] converting shapefile to netcdf

Dave Allured - NOAA Affiliate dave.allured at noaa.gov
Wed Nov 27 14:41:28 MST 2019


Oh I get it now.  I took a look at the netcdf output file from
ncl_convert2nc in your original zip file.  The utility simply preserved all
of the vector and structure information from the original shape file.  It
made no attempt to reorganize that information onto any kind of grid.

The looping code that you just wrote is the best and probably the only way
in NCL to generate this gridded file that you want.


On Wed, Nov 27, 2019 at 2:04 PM Dave Allured - NOAA Affiliate <
dave.allured at noaa.gov> wrote:

> I did not know that ncl_convert2nc was advertised to do that!  The actual
> information content in shapefiles is vastly different than gridded data
> files.  NCL support will need to explain this.
>
>
> On Wed, Nov 27, 2019 at 1:37 PM Amy Hendricks <ashendricks at alaska.edu>
> wrote:
>
>> Hi David,
>>
>> Yes, I found a loop was the only way to do this. Thank you for clearing
>> that up.  Why can't ncl_convert2nc work for this purpose?
>>
>> "ncl_convert2nc converts one or more GRIB1, GRIB2, HDF 4, HDF-EOS 2,
>> HDF-EOS 5, netCDF, and/or shapefile files to netCDF formatted files"
>>
>>   shp_file_name  = "tresh_ease23.shp"
>>   shape_var_name = "tresh"
>>
>> ;========================================================
>> ; Region 1
>> ;========================================================
>>
>>   areas_of_interest = 1
>>
>>   print("areas_of_interest = "+ areas_of_interest)
>>
>>   opt             = True
>>   opt at debug       = True
>>   opt at return_mask = True
>>   opt at minlat = minlat
>>   opt at maxlat = maxlat
>>   opt at shape_var = shape_var_name
>>   opt at shape_names = areas_of_interest
>>
>>   temp_mask = shapefile_mask_data(t2flip,shp_file_name,opt)
>>   copy_VarMeta(t2flip,temp_mask)
>>   printVarSummary(temp_mask)
>>
>>   tresh_mask = temp_mask
>>
>>   delete(temp_mask)
>>
>> ;========================================================
>> ; Region 2 - 25
>> ;========================================================
>>
>>   do k = 2, 25
>>     areas_of_interest = k
>>
>>     print("area of interest = "+k)
>>
>>     opt             = True
>>     opt at debug       = True
>>     opt at return_mask = True
>>     opt at minlat = minlat
>>     opt at maxlat = maxlat
>>     opt at shape_var = shape_var_name
>>     opt at shape_names = areas_of_interest
>>
>>     temp_mask = shapefile_mask_data(t2flip,shp_file_name,opt)
>>
>>     do i=1, 721
>>       do j=1, 1440
>>         if(temp_mask(i-1,j-1).eq.1)
>>         temp_mask(i-1,j-1) = areas_of_interest
>>         tresh_mask(i-1,j-1) = (/temp_mask(i-1,j-1)/)
>>         end if
>>       end do
>>     end do
>>
>>     delete(temp_mask)
>>
>>   end do
>>
>>
>> On Tue, Nov 26, 2019 at 10:26 PM Dave Allured - NOAA Affiliate <
>> dave.allured at noaa.gov> wrote:
>>
>>> Correction, the name of this example is shapefiles_14_mask, not just
>>> shapefiles_14.
>>>
>>>
>>> On Tue, Nov 26, 2019 at 8:57 PM Dave Allured - NOAA Affiliate <
>>> dave.allured at noaa.gov> wrote:
>>>
>>>> Example shapefiles_14 is close to what you want.  Please notice these
>>>> two lines.  Their function is to select a particular subset of all the
>>>> state outlines in the example shapefile, then apply a binary mask to the
>>>> base grid "tc_lev0" so that only grid points over the listed states are
>>>> retained.  All grid points outside this list of states are set to missing.
>>>> This demonstrates how to access a subset of a shape file, instead of all
>>>> regions together,
>>>>
>>>>    opt at shape_names = (/"Texas","New
>>>> Mexico","Colorado","Kansas","Oklahoma"/)
>>>>    tc_mask  = shapefile_mask_data(tc_lev0,shp_filename1,opt)
>>>>
>>>> For your application, use this masking function to select one region at
>>>> a time.  Start with a master grid with ERA5 coordinates, set to all zero or
>>>> missing values.  Loop over each region value or region number.  Call the
>>>> function shapefile_mask_data inside the loop, selecting the grid points for
>>>> only one region each time. Use the resulting binary mask to add the
>>>> current region number to the master grid.  When the loop is complete, write
>>>> the master grid with all region numbers to a Netcdf file.
>>>>
>>>>
>>>> On Tue, Nov 26, 2019 at 3:51 PM Amy Hendricks via ncl-talk <
>>>> ncl-talk at ucar.edu> wrote:
>>>>
>>>>> Hello NCL geniuses,
>>>>>
>>>>> I am trying to write a shapefile to netcdf. The shapefile consists of
>>>>> circumpolar Treshnikov regions, and I would like to create a netCDF file
>>>>> that has the region values like tresh(lon,lat) = [region# from shapefile]
>>>>> on the ERA5 grid. All the examples I'm finding are for creating binary
>>>>> masks, and the ncl_convert2nc does not seem to work, at least it doesn't
>>>>> return anything useable.
>>>>>
>>>>> Attached are the ERA5 netCDF file, Treshnikov shapefile, as well as
>>>>> the result of ncl_convert2nc.
>>>>>
>>>>> Thank you in advance,
>>>>>
>>>>> Amy
>>>>>
>>>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191127/9c307ef7/attachment.html>


More information about the ncl-talk mailing list