Daniele,

these dimensions are in effect a Z dimension. The data is sourced from 
GRIB2 but by the time it is ingested by ImageMosaic, it is equivalent to 
NetCDF (CDM API). Below I have included a small but self-consistent 
subset from the CDL generated with NetCDF-Java ToolsUI (current master 
4.6.6-SNAPSHOT with rotated pole GRIB2 support). There are multiple 
files that vary in time only, and ImageMosaic aggregates them into a 
time series. I have included two variables as they appear in one file 
(granule):

Temperature_surface(time=1, rlat=834, rlon=953) works fine and I can use 
ImageMosaic to obtain a correct WCS time series. Panoply animations here:
https://github.com/bencaradocdavies/geoserver/wiki/RAP-Native-Grid-ImageMosaic

u-component_of_wind_sigma(time=1, sigma=50, rlat=834, rlon=953) appears 
to work but the output contains no sigma dimension. If I add a sigma 
dimension in indexer.xml, the ImageMosaic refuses to load. Without a 
sigma dimension in indexer.xml, the request appears to work, takes 50 
times longer (as expected), but the output file contains no sigma 
dimension or coordinate variable and is the wrong size (same as 
Temperature_surface).

In a nutshell: should elevation variables that are *internal* to each 
granule be indexed? Is this supported? If so, is indexer configuration 
required? Why would the granule index need to know?

The indexer domain I tried unsuccessfully was this (no entry in the 
granule schema, ImageMosaic would not load):

<domain name="sigma">
<attributes>
<attribute>sigma</attribute>
</attributes>
</domain>

All the examples that I have seen with an elevation or custom dimension 
have been where this dimension has a single value for each granule and 
varies across them. I have not seen an example with extra dimensions 
internal to each NetCDF file (granule).

Kind regards,
Ben.


netcdf forecast {
   dimensions:
     rlat = 834;
     rlon = 953;
     time = 1;
     sigma = 50;
   variables:
     int RotatedLatLon32769_Projection;
       :grid_mapping_name = "rotated_latitude_longitude";
       :grid_north_pole_latitude = 36.0; // double
       :grid_north_pole_longitude = 74.0; // double
     float rlat(rlat=834);
       :standard_name = "grid_latitude";
       :units = "degrees";
     float rlon(rlon=953);
       :standard_name = "grid_longitude";
       :units = "degrees";
     double reftime;
       :units = "Hour since 2016-04-25T22:00:00Z";
       :standard_name = "forecast_reference_time";
       :long_name = "GRIB reference time";
       :calendar = "proleptic_gregorian";
     double time(time=1);
       :units = "Hour since 2016-04-25T22:00:00Z";
       :standard_name = "time";
       :long_name = "GRIB forecast or observation time";
       :calendar = "proleptic_gregorian";
     float sigma(sigma=50);
       :units = "sigma";
       :long_name = "Sigma level";
       :positive = "down";
       :Grib_level_type = 104; // int
     float Temperature_surface(time=1, rlat=834, rlon=953);
       :long_name = "Temperature @ Ground or water surface";
       :units = "K";
       :abbreviation = "TMP";
       :missing_value = NaNf; // float
       :grid_mapping = "RotatedLatLon32769_Projection";
       :coordinates = "reftime time rlat rlon ";
       :Grib_Variable_Id = "VAR_0-0-0_L1";
       :Grib2_Parameter = 0, 0, 0; // int
       :Grib2_Parameter_Discipline = "Meteorological products";
       :Grib2_Parameter_Category = "Temperature";
       :Grib2_Parameter_Name = "Temperature";
       :Grib2_Level_Type = "Ground or water surface";
       :Grib2_Generating_Process_Type = "Forecast";
     float u-component_of_wind_sigma(time=1, sigma=50, rlat=834, rlon=953);
       :long_name = "u-component of wind @ Sigma level";
       :units = "m/s";
       :abbreviation = "UGRD";
       :missing_value = NaNf; // float
       :grid_mapping = "RotatedLatLon32769_Projection";
       :coordinates = "reftime time sigma rlat rlon ";
       :Grib_Variable_Id = "VAR_0-2-2_L104";
       :Grib2_Parameter = 0, 2, 2; // int
       :Grib2_Parameter_Discipline = "Meteorological products";
       :Grib2_Parameter_Category = "Momentum";
       :Grib2_Parameter_Name = "u-component of wind";
       :Grib2_Level_Type = "Sigma level";
       :Grib2_Generating_Process_Type = "Forecast";
   // global attributes:
   :Originating_or_generating_Center = "The NOAA Forecast Systems 
Laboratory, Boulder, CO, United States";
   :Originating_or_generating_Subcenter = "0";
   :GRIB_table_version = "2,1";
   :Type_of_generating_process = "Forecast";
 
:Analysis_or_forecast_generating_process_identifier_defined_by_originating_centre
 
= "High-Resolution Rapid Refresh";
   :file_format = "GRIB-2";
   :Conventions = "CF-1.6";
   :history = "Read using CDM IOSP GribCollection v3";
   :featureType = "GRID";
}


On 30/05/16 19:40, Daniele Romagnoli wrote:
> I Ben.
> I'm not sure to have fully understood your problem/question.
> Can you give us an example of a ncdump output (a shorter form of the
> interesting part) for 2 involved files?
>
> As far as I remember, the current NetCDF low level readers only deal with
> inner dimension referencing to times and elevations/depths/heights/
> (everything is a Z).
>
> Please, let us know.
> Cheers,
> Daniele
>
>
>
>
> On Sat, May 28, 2016 at 6:45 AM, Ben Caradoc-Davies <b...@transient.nz>
> wrote:
>
>> I have several NetCDF files that comprise an ImageMosaic time series.
>> This works fine for variables with only spatial dimensions, and I can
>> get NetCDF output from WCS:
>>
>> foo(y, x)  --ImageMosaic-NetCDF-out-->  foo(t, y, x)
>>
>> However, when there is an extra dimension in the source NetCDF files
>> (same values in all files), it is silently dropped:
>>
>> bar(s, y, x)  --ImageMosaic-NetCDF-out-->  bar(t, y, x)
>>
>> Not, as I had hoped:
>>
>> bar(s, y, x)  --ImageMosaic-NetCDF-out-->  bar(t, s, y, x)
>>
>> The documentation describes mosaicking over a custom dimension which
>> varies between files and whose value is stored in the granule index. How
>> to I deliver a variable with a dimension that is internal to each source
>> NetCDF file? Is this supported? Is extra configuration is required?
>>
>> Kind regards,
>>
>> --
>> Ben Caradoc-Davies <b...@transient.nz>
>> Director
>> Transient Software Limited <http://transient.nz/>
>> New Zealand
>>
>>
>> ------------------------------------------------------------------------------
>> What NetFlow Analyzer can do for you? Monitors network bandwidth and
>> traffic
>> patterns at an interface-level. Reveals which users, apps, and protocols
>> are
>> consuming the most bandwidth. Provides multi-vendor support for NetFlow,
>> J-Flow, sFlow and other flows. Make informed decisions using capacity
>> planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
>> _______________________________________________
>> Geoserver-users mailing list
>> Geoserver-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/geoserver-users
>>
>
>
>

-- 
Ben Caradoc-Davies <b...@transient.nz>
Director
Transient Software Limited <http://transient.nz/>
New Zealand

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are 
consuming the most bandwidth. Provides multi-vendor support for NetFlow, 
J-Flow, sFlow and other flows. Make informed decisions using capacity 
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
Geoserver-users mailing list
Geoserver-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-users

Reply via email to