Exercício 7 - Dados ambientais via OGC API - Environmental Data Retrieval¶
OGC API - Environmental Data Retrieval fornece uma Web API para aceder a dados ambientais usando padrões de consulta bem definidos:
A OGC API - Environmental Data Retrieval utiliza a OGC API - Features como bloco de construção, permitindo assim integração simplificada para clientes e utilizadores. A EDR pode ser considerada uma API de conveniência que não requer conhecimento aprofundado sobre o armazenamento/modelo de dados subjacente.
Suporte na pygeoapi¶
A pygeoapi suporta a especificação OGC API - Environmental Data Retrieval aproveitando tanto plugins de fornecedor de funcionalidades como de cobertura.
Note
Consulte a documentação oficial para mais informações sobre backends EDR suportados
Publicar dados ambientais na pygeoapi¶
Vamos publicar alguns dados ICOADS através do plugin EDR xarray. Os dados ICOADS do exemplo podem ser encontrados em workshop/exercises/data/coads_sst.nc:
Atualizar a configuração da pygeoapi
Abra o ficheiro de configuração da pygeoapi num editor de texto. Adicione uma nova secção de conjunto de dados da seguinte forma:
Guarde a configuração e reinicie o Docker Compose. Navegue para http://localhost:5000/collections para avaliar se o novo conjunto de dados foi publicado.
À primeira vista, a coleção icoads-sst aparece como uma coleção normal OGC API - Coverages. Olhe um pouco mais de perto para a descrição da coleção, e note
que há uma chave 'parameter_names' que descreve os nomes dos parâmetros EDR para as consultas da coleção.
Acesso do lado do cliente¶
QGIS¶
O QGIS dá suporte à OGC API - EDR através do plugin EDR. Pode instalar-lo directamente através do Hub de plugins do QGIS, indo a Plugins->Gerir e instalar Plugins no menu de topo.

Pode aceder ao plugin através de uma entrada no menu de plugins.

A primeira coisa a fazer é configurar o url do servidor. Use aqui o url da Landing Page: http://localhost:5000/
Também deveria comecar por definir a directoria onde gostaria de guardar os dados descarregados pelo plugin

A combo box será populada com todas as coleções disponiveis naquele servidor. Seleccione a coleção EDR: International Comprehensive Ocean-Atmosphere Data Set (ICOADS).
Pode ignorar os avisos mostrados aqui!

A combo box de query de dados será populada com os tipos de query de dados disponiveis para esta coleção, neste caso: posição e cubo. Pode seleccionar a query do tipo cubo e carregar no botão que permite definir a extensão espacial da query. Um novo diálogo irá abrir, mostrando as diferentes opções para definir a extensão espacial. Pode escolher Desenhar no canvas, para desenhar um rectângulo no extent da map view.

Pode fechar este dialogo e executar a query. O plugin irá descarregar todos os dados disponiveis que se encaixam nesta query e mostrar-los como um grupo de layers.

OWSLib - Avançado¶
OWSLib é uma biblioteca Python para interagir com Serviços Web OGC e suporta várias OGC APIs incluindo OGC API - Environmental Data Retrieval.
Interagir com OGC API - Environmental Data Retrieval via OWSLib
Se não tem Python instalado, considere executar este exercício num contentor Docker. Consulte o Capítulo de Configuração.
Depois, inicie uma sessão de consola Python com python3 (pare a sessão escrevendo exit()).
w = EnvironmentalDataRetrieval('https://demo.pygeoapi.io/master') w.url 'https://demo.pygeoapi.io/master' api = w.api() # documento OpenAPI collections = w.collections() len(collections['collections']) 13 icoads_sst = w.collection('icoads-sst') icoads_sst['parameter_names'].keys() dict_keys(['SST', 'AIRT', 'UWND', 'VWND']) data = w.query_data('icoads-sst', 'position', coords='POINT(174.7645 -36.8509)', parameter_names=['SST', 'AIRT']) data # dados CoverageJSON ```
>>> from owslib.ogcapi.edr import EnvironmentalDataRetrieval
>>> w = EnvironmentalDataRetrieval('https://demo.pygeoapi.io/master')
>>> w.url
'https://demo.pygeoapi.io/master'
>>> api = w.api() # documento OpenAPI
>>> collections = w.collections()
>>> len(collections['collections'])
13
>>> icoads_sst = w.collection('icoads-sst')
>>> icoads_sst['parameter_names'].keys()
dict_keys(['SST', 'AIRT', 'UWND', 'VWND'])
>>> data = w.query_data('icoads-sst', 'position', coords='POINT(174.7645 -36.8509)', parameter_names=['SST', 'AIRT'])
>>> data # dados CoverageJSON
Note
Consulte a documentação oficial da OWSLib para mais exemplos.
Resumo¶
Parabéns! Agora é capaz de publicar dados ambientais na pygeoapi.