Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 1 addition & 31 deletions pygeoapi/api/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,37 +400,7 @@ def gen_collection(api, request, dataset: str,
# TODO: translate
LOGGER.debug('Adding EDR links')
data['data_queries'] = {}
parameters = p.get_fields()
if parameters:
data['parameter_names'] = {}
for key, value in parameters.items():
p_label = value.get('title')
p_description = value.get('description')
data['parameter_names'][key] = {
'id': key,
'type': 'Parameter',
'observedProperty': {
'label': {
'en': p_label
}
},
'unit': {
'label': {
'en': value['title']
},
'symbol': {
'value': value['x-ogc-unit'],
'type': 'http://www.opengis.net/def/uom/UCUM/'
}
}
}

if p_description is not None:
data['parameter_names'][key]['observedProperty'].update({
'description': {
'en': p_description
}
})
data['parameter_names'] = p.get_parameters()

for qt in p.get_query_types():
data_query = {
Expand Down
51 changes: 51 additions & 0 deletions pygeoapi/provider/base_edr.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,57 @@ def get_query_types(self):

return self.query_types

def get_parameters(
self, parameters: set | list = [], as_list=False
) -> dict | list:
"""
Generate CoverageJSON parameters from provider field defintions

:param parameters: List of the subset of parameters include.
:param as_list: bool to return as a list of parameter definitions.
GeoJSON parameters are returned as an array
https://github.com/opengeospatial/ogcapi-environmental-data-retrieval/issues/633


:returns: A dictionary or list containing the parameter definition.
"""
if not parameters:
parameters = set(self.fields.keys())

out_params = {}
for name in set(parameters):
conf_ = self.fields[name]
p_label = conf_.get('title')
out_params[name] = {
'id': name,
'type': 'Parameter',
'name': p_label,
'observedProperty': {
'id': name,
'label': {'en': p_label}
},
'unit': {
'symbol': {
'value': conf_['x-ogc-unit'],
'type': 'http://www.opengis.net/def/uom/UCUM/'
}
}
}

# Add description if available
p_description = conf_.get('description')
if p_description is not None:
out_params[name]['observedProperty'].update({
'description': {
'en': p_description
}
})

if as_list:
return list(out_params.values())
else:
return out_params

def query(self, **kwargs):
"""
Extract data from collection collection
Expand Down
22 changes: 4 additions & 18 deletions pygeoapi/provider/xarray_.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
ProviderConnectionError,
ProviderNoDataError,
ProviderQueryError)
from pygeoapi.provider.base_edr import BaseEDRProvider
from pygeoapi.util import read_data

LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -378,24 +379,9 @@ def gen_covjson(self, metadata, data, fields):
})

LOGGER.debug('Adding parameters')
for key, value in selected_fields.items():
parameter = {
'type': 'Parameter',
'description': {
'en': value['title']
},
'unit': {
'symbol': value['x-ogc-unit']
},
'observedProperty': {
'id': key,
'label': {
'en': value['title']
}
}
}

cj['parameters'][key] = parameter
cj['parameters'] = BaseEDRProvider.get_parameters(
self, selected_fields
)

data = data.fillna(None)

Expand Down
1 change: 0 additions & 1 deletion tests/api/test_environmental_data_retrieval.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ def test_describe_collection_edr(config, api_):
assert sst['id'] == 'SST'
assert sst['type'] == 'Parameter'
assert sst['observedProperty']['label']['en'] == 'SEA SURFACE TEMPERATURE'
assert sst['unit']['label']['en'] == 'SEA SURFACE TEMPERATURE'
assert sst['unit']['symbol']['value'] == 'Deg C'


Expand Down
Loading