Re: [netcdf-java] Storm tracks as trajectories

Hi Ken,

What version of netCDF-Java are you using? It turns out that neither 2.2.22 nor 4.0 currently supports the Unidata Observation Convention for trajectories. I do have an unreleased implementation in 4.0 but it only supports single trajectories.

Let me take a closer look at it and see what it would take to handle multiple trajectories (and maybe drop the Z dimension requirement). If it is fairly quick, I can try to get it done in 4.0 soon. Not so sure about 2.2.22. Are you OK using 4.0 (which is still in alpha release)?

As for your CDL, I think all it needs is a way to recognize the vertical dimension. What I did in my test of your CDL was add an attribute to the "alt" variable named "positive" and give it the value of "up". This is how CF recognizes vertical coordinates (well, one of the ways). Once that is in there, it should be a valid CDM trajectory.

Ethan

Ken Knapp wrote:
Hi Ethan-
I have tried expanding to two dimensional arrays (and along with it, the wasted space I will encounter) and still have no luck. I have attached the new CDL for further help.

Again, is there a sample file having multiple trajectories?
Any ideas on "fixing" the CDL to work?
-Ken



netcdf one_file {
dimensions:
        storm = UNLIMITED ; // (2 currently)
        record = 40 ;
variables:
        short storm(storm) ;
        short numObs(storm) ;
        float time(storm, record) ;
                time:long_name = "Modified Julian Day" ;
                time:units = "days since 1858-11-17 00:00:00" ;
        float lat(storm, record) ;
                lat:long_name = "Storm center latitude" ;
                lat:units = "degrees_north" ;
        float lon(storm, record) ;
                lon:long_name = "Storm center longitude" ;
                lon:units = "degrees_east" ;
        short alt(storm, record) ;
                alt:long_name = "Altitude" ;
                alt:units = "m" ;
        short wind(storm, record) ;
                wind:long_name = "Maximum Sustained Wind (10 min)" ;
                wind:units = "knots" ;

// global attributes:
                :cdm_datatype = "Trajectory" ;
                :trajectoryDimension = "storm" ;
                :Conventions = "Unidata Observation Dataset v1.0" ;
data:

 storm = 0, 1 ;

 numObs = 34, 5 ;

 time =
53601.75, 53602, 53602.25, 53602.5, 53602.75, 53603, 53603.25, 53603.5, 53603.75, 53604, 53604.25, 53604.5, 53604.75, 53605, 53605.25, 53605.5, 53605.75, 53606, 53606.25, 53606.5, 53606.75, 53607, 53607.25, 53607.5, 53607.75, 53608, 53608.25, 53608.5, 53608.75, 53609, 53609.25, 53609.5,
    53609.75, 53610, _, _, _, _, _, _,
53604.5, 53604.75, 53605, 53605.25, 53605.5, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ;

 lat =
13.3, 13.5, 13.6, 13.8, 14, 14.3, 14.9, 15.7, 16.5, 17.2, 17.8, 18.3, 18.6, 18.9, 19.2, 19.6, 20, 20.4, 20.9, 21.4, 22, 22.7, 23.3, 23.9, 24.3, 24.7,
    25, 25.3, 25.6, 25.7, 25.7, 25.6, 25.5, 25.5, _, _, _, _, _, _,
19.4, 19.6, 19.7, 19.7, 19.7, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ;

 lon =
  -96.6, -98.2, -99.8, -101.3, -102.5, -103.7, -104.7, -105.6, -107.1,
-108.5, -110, -111.5, -112.3, -113.2, -114.1, -114.9, -115.6, -116.1, -116.7, -117.2, -117.7, -118.4, -119.1, -119.9, -120.7, -121.6, -122.6, -123.6, -124.6, -125.5, -126.5, -127.5, -128.5, -129.4, _, _, _, _, _, _, -94.5, -95, -95.7, -96.7, -97.7, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ;

 alt =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, _, _, _, _, _, _,
0, 0, 0, 0, 0, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ;

 wind =
22, 26, 35, 44, 48, 57, 62, 62, 66, 79, 79, 79, 75, 70, 66, 62, 62, 57, 57, 57, 48, 40, 35, 31, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, _, _, _, _,
    _, _,
26, 31, 40, 31, 22, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _,
    _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ ;
}



Ethan Davis said the following on 8/20/2008 11:16 AM:
Hi Ken, Don,

I agree as well that altitude should not be required ... it just hasn't made it off the ToDo list and onto the Done list.

Another problem for your sample file below is that none of the Trajectory implementations understand the contiguous list style of structures you are using [discribed in the obs dataset convention, http://www.unidata.ucar.edu/software/netcdf-java/formats/UnidataObsConvention.html]. I believe that only multidimensional arrays are handled by the current trajectory implementations.

Are you working with the 2.2.22 library or 4.0?

Ethan

Ken Knapp wrote:
Hi Don-
The following still does not work (but may be closer).
My two cents: Altitude should not be required for trajectory ... in this case, it would spuriously inflate the file size and likely confuse users.

Could ToolsUI be changed to say what causes a data type to fail (e.g., missing variable, dimension, etc)?

Thanks ... and still looking for the answer-
-Ken

p.s. Does someone have sample files for multiple trajectory files?

netcdf one_file {
dimensions:
        storm = 2 ;
        record = UNLIMITED ; // (39 currently)
variables:
        short storm(storm) ;
        int firstObs(storm) ;
        short numObs(storm) ;
        short trajectoryIndex(record) ;
        float time(record) ;
                time:long_name = "Modified Julian Day" ;
                time:units = "days since 1858-11-17 00:00:00" ;
        float lat(record) ;
                lat:long_name = "Storm center latitude" ;
                lat:units = "degrees_north" ;
        float lon(record) ;
                lon:long_name = "Storm center longitude" ;
                lon:units = "degrees_east" ;
        short alt(record) ;
                alt:long_name = "Altitude" ;
                alt:units = "m" ;
        short wind(record) ;
                wind:long_name = "Maximum Sustained Wind (10 min)" ;
                wind:units = "knots" ;

// global attributes:
                :cdm_datatype = "Trajectory" ;
                :trajectoryDimension = "storm" ;
                :Conventions = "Unidata Observation Dataset v1.0" ;
data:

 storm = 0, 1 ;

 firstObs = 0, 34 ;

 numObs = 34, 5 ;

trajectoryIndex = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 1,
    2, 3, 4 ;

 time = 53601.75, 53602, 53602.25, 53602.5, 53602.75, 53603, 53603.25,
53603.5, 53603.75, 53604, 53604.25, 53604.5, 53604.75, 53605, 53605.25, 53605.5, 53605.75, 53606, 53606.25, 53606.5, 53606.75, 53607, 53607.25, 53607.5, 53607.75, 53608, 53608.25, 53608.5, 53608.75, 53609, 53609.25, 53609.5, 53609.75, 53610, 53604.5, 53604.75, 53605, 53605.25, 53605.5 ;

lat = 13.3, 13.5, 13.6, 13.8, 14, 14.3, 14.9, 15.7, 16.5, 17.2, 17.8, 18.3, 18.6, 18.9, 19.2, 19.6, 20, 20.4, 20.9, 21.4, 22, 22.7, 23.3, 23.9, 24.3, 24.7, 25, 25.3, 25.6, 25.7, 25.7, 25.6, 25.5, 25.5, 19.4, 19.6, 19.7,
    19.7, 19.7 ;

lon = -96.6, -98.2, -99.8, -101.3, -102.5, -103.7, -104.7, -105.6, -107.1, -108.5, -110, -111.5, -112.3, -113.2, -114.1, -114.9, -115.6, -116.1, -116.7, -117.2, -117.7, -118.4, -119.1, -119.9, -120.7, -121.6, -122.6, -123.6, -124.6, -125.5, -126.5, -127.5, -128.5, -129.4, -94.5, -95,
    -95.7, -96.7, -97.7 ;

alt = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;

wind = 22, 26, 35, 44, 48, 57, 62, 62, 66, 79, 79, 79, 75, 70, 66, 62, 62, 57, 57, 57, 48, 40, 35, 31, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 26,
    31, 40, 31, 22 ;
}



Don Murray said the following on 8/20/2008 10:13 AM:
Hi Ken-

Most likely you need an altitude variable as well (can  just be 0).
The trajectory interface assumes there is always an altitude.  I've
argued against that, but I think that's what's missing.

Don

Ken Knapp wrote:
I'm working on writing tropical storm track data in netCDF.
I think they should be written as CDM trajectories, but am unsure how to have ToolsUI recognize them as trajectories. I've attached below the CDL for a simple set of two storms. What do I need to change to have ToolsUI recognize them as trajectories??

Thanks in advance-
-Ken

netcdf one_file {
dimensions:
        storm = 2 ;
        record = UNLIMITED ; // (39 currently)
variables:
        short storm(storm) ;
        int firstObs(storm) ;
        short numObs(storm) ;
        short trajectoryIndex(record) ;
        float time(record) ;
                time:long_name = "Modified Julian Day" ;
                time:units = "days since 1858-11-17 00:00:00" ;
        float lat(record) ;
                lat:long_name = "Storm center latitude" ;
                lat:units = "degrees_north" ;
        float lon(record) ;
                lon:long_name = "Storm center longitude" ;
                lon:units = "degrees_east" ;
        short wind(record) ;
                wind:long_name = "Minimum Central Pressure" ;
                wind:units = "mb" ;
        short pres(record) ;

// global attributes:
                :cdm_datatype = "Trajectory" ;
                :trajectoryDimension = "storm" ;
                :Conventions = "Unidata Observation Dataset v1.0" ;
data:

 storm = 0, 1 ;

 firstObs = 0, 34 ;

 numObs = 34, 5 ;

trajectoryIndex = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 1,
    2, 3, 4 ;

time = 53601.75, 53602, 53602.25, 53602.5, 53602.75, 53603, 53603.25, 53603.5, 53603.75, 53604, 53604.25, 53604.5, 53604.75, 53605, 53605.25, 53605.5, 53605.75, 53606, 53606.25, 53606.5, 53606.75, 53607, 53607.25, 53607.5, 53607.75, 53608, 53608.25, 53608.5, 53608.75, 53609, 53609.25, 53609.5, 53609.75, 53610, 53604.5, 53604.75, 53605, 53605.25, 53605.5 ;

lat = 13.3, 13.5, 13.6, 13.8, 14, 14.3, 14.9, 15.7, 16.5, 17.2, 17.8, 18.3, 18.6, 18.9, 19.2, 19.6, 20, 20.4, 20.9, 21.4, 22, 22.7, 23.3, 23.9, 24.3, 24.7, 25, 25.3, 25.6, 25.7, 25.7, 25.6, 25.5, 25.5, 19.4, 19.6, 19.7,
    19.7, 19.7 ;

lon = -96.6, -98.2, -99.8, -101.3, -102.5, -103.7, -104.7, -105.6, -107.1, -108.5, -110, -111.5, -112.3, -113.2, -114.1, -114.9, -115.6, -116.1, -116.7, -117.2, -117.7, -118.4, -119.1, -119.9, -120.7, -121.6, -122.6, -123.6, -124.6, -125.5, -126.5, -127.5, -128.5, -129.4, -94.5, -95,
    -95.7, -96.7, -97.7 ;

wind = 22, 26, 35, 44, 48, 57, 62, 62, 66, 79, 79, 79, 75, 70, 66, 62, 62, 57, 57, 57, 48, 40, 35, 31, 26, 22, 22, 22, 22, 22, 22, 22, 22, 22, 26,
    31, 40, 31, 22 ;

pres = 1007, 1006, 1002, 997, 994, 987, 983, 981, 979, 972, 970, 972, 974, 976, 981, 983, 985, 986, 987, 990, 994, 998, 1000, 1002, 1003, 1004, 1005, 1006, 1007, 1008, 1008, 1009, 1009, 1010, 1006, 1004, 1001, 1002,
    1005 ;
}



--
Ken Knapp
Remote Sensing and Applications Division
National Climatic Data Center
151 Patton Ave
Asheville, NC 28801
828-271-4339 (voice) 828-271-4328 (fax)
http://www.ncdc.noaa.gov/
http://www.ncdc.noaa.gov/oa/rsad/isccpb1/
------------------------------------------------------------------------

_______________________________________________
netcdf-java mailing list
netcdf-java@xxxxxxxxxxxxxxxx
For list information or to unsubscribe, visit: http://www.unidata.ucar.edu/mailing_lists/



--
Ethan R. Davis                                Telephone: (303) 497-8155
Software Engineer                             Fax:       (303) 497-8690
UCAR Unidata Program Center                   E-mail:    edavis@xxxxxxxx
P.O. Box 3000
Boulder, CO  80307-3000                       http://www.unidata.ucar.edu/
---------------------------------------------------------------------------



  • 2008 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-java archives: