44
44
from pygeoapi .provider .base import (ProviderConnectionError ,
45
45
ProviderQueryError )
46
46
47
- from pygeoapi .provider .rasterio_ import ( RasterioProvider )
47
+ from pygeoapi .provider .rasterio_ import RasterioProvider
48
48
49
49
LOGGER = logging .getLogger (__name__ )
50
50
@@ -101,33 +101,30 @@ def get_fields(self):
101
101
:returns: CIS JSON object of rangetype metadata
102
102
"""
103
103
104
- # parameter = _get_parameter_metadata(
105
- # self._data.profile['driver'], self._data.tags(i))
106
-
107
- var_dict = {'TMEAN' : {'units' : '[C]' ,
108
- 'name' : 'Mean temperature [C]' ,
109
- 'id' : 'tmean' },
110
- 'TMAX' : {'units' : '[C]' ,
111
- 'name' : 'Maximum temperature [C]' ,
112
- 'id' : 'tmax' },
113
- 'TMIN' : {'units' : '[C]' ,
114
- 'name' : 'Minimum temperature [C]' ,
115
- 'id' : 'tmin' },
116
- 'PCP' : {'units' : '[%]' ,
117
- 'name' : 'Total precipitation [%]' ,
118
- 'id' : 'pcp' },
119
- }
104
+ self .var_dict = {'TMEAN' : {'units' : '[C]' ,
105
+ 'name' : 'Mean temperature [C]' ,
106
+ 'id' : 'tmean' },
107
+ 'TMAX' : {'units' : '[C]' ,
108
+ 'name' : 'Maximum temperature [C]' ,
109
+ 'id' : 'tmax' },
110
+ 'TMIN' : {'units' : '[C]' ,
111
+ 'name' : 'Minimum temperature [C]' ,
112
+ 'id' : 'tmin' },
113
+ 'PCP' : {'units' : '[%]' ,
114
+ 'name' : 'Total precipitation [%]' ,
115
+ 'id' : 'pcp' },
116
+ }
120
117
121
118
if 'trend' in self .data :
122
119
var_key = ['TMEAN' , 'PCP' ]
123
120
else :
124
- var_key = var_dict .keys ()
121
+ var_key = self . var_dict .keys ()
125
122
126
123
for var in var_key :
127
124
self .data = self .data .replace ('TMEAN*' , f'{ var } *' )
128
125
with rasterio .open (self .data ) as _data :
129
126
130
- units = var_dict [var ]['units' ]
127
+ units = self . var_dict [var ]['units' ]
131
128
dtype = self ._data .dtypes [0 ]
132
129
nodataval = self ._data .nodatavals [0 ]
133
130
dtype2 = dtype
@@ -136,8 +133,8 @@ def get_fields(self):
136
133
dtype2 = 'number'
137
134
elif dtype .startswith ('int' ):
138
135
dtype2 = 'integer'
139
- self ._fields [var_dict [var ]['id' ]] = {
140
- 'title' : var_dict [var ]['name' ],
136
+ self ._fields [self . var_dict [var ]['id' ]] = {
137
+ 'title' : self . var_dict [var ]['name' ],
141
138
'type' : dtype2 ,
142
139
"x-ogc-unit" : units ,
143
140
'_meta' : {
@@ -170,16 +167,6 @@ def query(self, properties=['TMEAN'], subsets={}, bbox=[],
170
167
}
171
168
shapes = []
172
169
173
- x = self ._coverage_properties ['x_axis_label' ]
174
- y = self ._coverage_properties ['y_axis_label' ]
175
-
176
- if all ([x in subsets ,
177
- y in subsets ,
178
- len (bbox ) > 0 ]):
179
- msg = 'bbox and subsetting by coordinates are exclusive'
180
- LOGGER .warning (msg )
181
- raise ProviderQueryError (msg )
182
-
183
170
if len (bbox ) > 0 :
184
171
minx , miny , maxx , maxy = bbox
185
172
@@ -227,13 +214,12 @@ def query(self, properties=['TMEAN'], subsets={}, bbox=[],
227
214
]]
228
215
}]
229
216
230
- if properties [0 ].upper () != 'TMEAN' :
231
- var = properties [0 ].upper ()
232
- try :
233
- self .data = self .get_file_list (var )[- 1 ]
234
- except IndexError as err :
235
- LOGGER .error (err )
236
- raise ProviderQueryError (err )
217
+ var = properties [0 ].upper ()
218
+ try :
219
+ self .data = self .get_file_list (var )[- 1 ]
220
+ except IndexError as err :
221
+ LOGGER .error (err )
222
+ raise ProviderQueryError (err )
237
223
238
224
if 'season' in subsets :
239
225
seasonal = subsets ['season' ]
@@ -341,7 +327,7 @@ def query(self, properties=['TMEAN'], subsets={}, bbox=[],
341
327
miny2 ,
342
328
maxx2 ,
343
329
maxy2 ]
344
- return self .gen_covjson (out_meta , out_image )
330
+ return self .gen_covjson (out_meta , out_image , var )
345
331
else :
346
332
if date_file_list :
347
333
LOGGER .debug ('Serializing data in memory' )
@@ -400,16 +386,16 @@ def _get_coverage_properties(self):
400
386
if 'monthly' not in self .data :
401
387
begin = search ('_{:d}.tif' , begin_file )[0 ]
402
388
end = search ('_{:d}.tif' , end_file )[0 ]
403
- period = 'year '
389
+ period = 'P1Y '
404
390
else :
405
391
begin = search ('_{:d}-{:d}.tif' , begin_file )
406
392
begin = f'{ begin [0 ]} -{ begin [1 ]:02} '
407
393
408
394
end = search ('_{:d}-{:d}.tif' , end_file )
409
395
end = f'{ end [0 ]} -{ end [1 ]:02} '
410
- period = 'month '
396
+ period = 'P1M '
411
397
412
- properties ['restime' ] = { 'value' : 1 , ' period' : period }
398
+ properties ['restime' ] = period
413
399
properties ['time_range' ] = [begin , end ]
414
400
415
401
properties ['uad' ] = self .get_coverage_domainset ()
@@ -443,3 +429,27 @@ def get_file_list(self, variable, datetime_=None):
443
429
return query_file
444
430
else :
445
431
return file_path_
432
+
433
+ def gen_covjson (self , metadata , data , var ):
434
+ """
435
+ Helper function to normalize coverage properties
436
+
437
+ :returns: `dict` of coverage properties
438
+ """
439
+
440
+ cj = super ().gen_covjson (metadata , data )
441
+
442
+ pm = self .var_dict [var ]
443
+ parameter = {}
444
+
445
+ parameter [pm ['id' ]] = {
446
+ 'type' : 'Parameter' ,
447
+ 'description' : pm ['name' ],
448
+ 'unit' : {
449
+ 'symbol' : pm ['units' ]
450
+ }
451
+ }
452
+
453
+ cj ['parameters' ] = parameter
454
+
455
+ return cj
0 commit comments