Ir para o conteúdo

Exercício 6 - Metadados via OGC API - Records

A OGC API - Records fornece uma API de Web com a capacidade de criar, modificar, e consultar metadados na Web:

A OGC API - Records utiliza a OGC API - Features como bloco de construção, permitindo assim implementação e integração simplificadas para clientes e utilizadores.

Suporte na pygeoapi

A pygeoapi suporta a especificação OGC API - Records, usando Elasticsearch e TinyDB rasterio como backends principais.

Note

Consulte a documentação oficial para mais informações sobre backends de catálogo/metadados suportados

Publicar registos de metadados na pygeoapi

Com a pygeoapi vamos configurar OGC API - Records usando qualquer fornecedor de dados suportado. Neste exercício vamos usar o backend de catálogo TinyDB. Vamos utilizar o catálogo de exemplo em workshop/exercises/data/tartu/metadata/catalogue.tinydb.

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:

 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
    example_catalogue:
        type: collection
        title: FOSS4G Europe Estonia national catalogue
        description: FOSS4G Europe Estonia national catalogue
        keywords:
            - estonia
            - catalogue
            - FOSS4G Europe
        links:
            - type: text/html
              rel: canonical
              title: information
              href: https://metadata.geoportaal.ee
              hreflang: en-US
        extents:
            spatial:
                bbox: [23.3397953631, 57.4745283067, 28.1316992531, 59.6110903998]
                crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84
        providers:
            - type: record
              name: TinyDBCatalogue
              data: /data/tartu/metadata/catalogue.tinydb
              id_field: externalId
              time_field: recordCreated
              title_field: title

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.

Formatos de metadados

Por defeito, a pygeoapi suporta e espera o modelo de records e os "queryables" da OGC API - Records. Para formatos de metadados adicionais, pode desenvolver o seu próprio plugin personalizado para a pygeoapi, ou converter os seus metadados para o modelo de records da OGC API - Records antes de os adicionar à pygeoapi.

Instalar a OWSLib

Se não tiver o Python instalado, considere executar este exercício num container Docker. Consulte o Capítulo de Configuração.

pip3 install owslib

pip3 install owslib

Exemplo de loader de ISO 19139 para TinyDBCatalogue

É possível carregar mais metadados de exemplo ISO19139 numa base de dados TinyDB com o seguinte script (raw):

cd workshop/exercises/data/tartu/metadata
curl -O https://raw.githubusercontent.com/geopython/pygeoapi/master/tests/load_tinydb_records.py
python3 load_tinydb_records.py xml catalogue.tinydb

cd workshop/exercises/data/tartu/metadata
curl https://raw.githubusercontent.com/geopython/pygeoapi/master/tests/load_tinydb_records.py
python3 load_tinydb_records.py xml catalogue.tinydb

Se não tiver o curl instalado, copie o URL acima para o seu navegador web e guarde localmente.

Se não tiver o Python instalado, pode usar o loader utilizando o container Docker da OWSLib. Consulte o Capítulo de Configuração.

Usar o container Docker da OWSLib para carregar metadados

cd workshop/exercises
docker run -it --rm --network=host --name owslib -v $(pwd)/data:/data python:3.10-slim /bin/bash
pip3 install owslib
apt-get update -y && apt-get install curl -y
curl -O https://raw.githubusercontent.com/geopython/pygeoapi/master/tests/load_tinydb_records.py
python3 load_tinydb_records.py /data/tartu/metadata/xml /data/tartu/metadata/catalogue.tinydb

cd workshop/exercises
docker run -it --rm --network=host --name owslib -v ${pwd}/data:/data python:3.10-slim /bin/bash
pip3 install owslib
apt-get update -y && apt-get install curl -y
curl -O https://raw.githubusercontent.com/geopython/pygeoapi/master/tests/load_tinydb_records.py
python3 load_tinydb_records.py /data/tartu/metadata/xml /data/tartu/metadata/catalogue.tinydb

Navegue para http://localhost:5000/collections/example_catalogue para avaliar se os novos metadados foram publicados na coleção.

Tip

O pygeometa é um pacote Python para gerar metadados para conjuntos de dados geoespaciais. AOpygeometa permite gerir metadados em ficheiros YAML simples "metadata control files (MCF)", e suporta importação, exportação, bem como transformações para muitos formatos de metadados geoespaciais. Metadados da OGC API - Records podem ser produzidos usando o pygeometa, quer a partir de ficheiros MCF ou por transformação de outros formatos.

Instale e execute o pygeometa como abaixo para ter uma ideia dos vários comandos e funcionalidades (além disso, consulte o tutorial).

pip3 install pygeometa
pygeometa --help

pip3 install pygeometa
pygeometa --help

A pygeoapi como um proxy de CSW

Pode verificar a secção "pygeoapi como uma Ponte para Outros serviços" para aprender como publicar CSW como OGC API - Records.

Acesso de cliente

QGIS

O QGIS suporta a OGC API - Records através do plugin MetaSearch. O MetaSearch focava-se originalmente apenas em Catalogue Service for the Web (OGC:CSW), mas foi estendido para a OGC API - Records. O MetaSearch é um plugin padrão no QGIS e não requer instalação adicional.

Consultar a OGC API - Records a partir do QGIS

Siga estes passos para se conectar a um serviço e consultar conjuntos de dados:

  • Localize o plugin MetaSearch no menu Web ou na Barra de Ferramentas Ícone do MetaSearch. O painel de pesquisa principal aparecerá com a lista de catálogos padrão do MetaSearch já preenchida.

Catálogos pré-preenchidos

  • abra o separador Services, para encontrar o botão New para criar uma nova ligação
  • adicione uma ligação a https://demo.pygeoapi.io/master
  • clique em Service Info para obter informações sobre o serviço
  • volte ao separador Search
  • selecione a ligação que acabou de criar
  • escreva um termo de pesquisa e clique em search
  • repare que quando seleciona um resultado da pesquisa, uma pegada vermelha é desenhada no mapa, destacando a localização do conjunto de dados

Resultados da pesquisa

OWSLib

A OWSLib é uma biblioteca Python para interagir com OGC Web Services e suporta várias OGC APIs, incluindo a OGC API - Records.

Interagir com a OGC API - Records via OWSLib

Se não tiver o Python instalado, considere executar este exercício num contentor Docker. Consulte o Capítulo de Configuração.

pip3 install owslib

pip3 install owslib

Depois, inicie uma sessão de consola Python com python3 (pare a sessão escrevendo exit()).

>>> from owslib.ogcapi.records import Records
>>> SERVICE_URL = 'https://demo.pygeoapi.io/master/'
>>> w = Records(SERVICE_URL)
>>> w.url
'https://demo.pygeoapi.io/master'
>>> dutch_metacat = w.collection('dutch-metadata')
>>> dutch_metacat['id']
'dutch-metadata'
>>> dutch_metacat['title']
'Sample metadata records from Dutch Nationaal georegister'
>>> dutch_metacat['description']
'Sample metadata records from Dutch Nationaal georegister'
>>> dutch_metacat_query = w.collection_items('dutch-metadata', limit=1)
>>> dutch_metacat_query['numberMatched']
198
>>> dutch_metacat_query['numberReturned']
1
>>> dutch_metacat_query = w.collection_items('dutch-metadata', q='Wegpanorama')
>>> dutch_metacat_query['numberMatched']
2

>>> from owslib.ogcapi.records import Records
>>> SERVICE_URL = 'https://demo.pygeoapi.io/master/'
>>> w = Records(SERVICE_URL)
>>> w.url
'https://demo.pygeoapi.io/master'
>>> dutch_metacat = w.collection('dutch-metadata')
>>> dutch_metacat['id']
'dutch-metadata'
>>> dutch_metacat['title']
'Sample metadata records from Dutch Nationaal georegister'
>>> dutch_metacat['description']
'Sample metadata records from Dutch Nationaal georegister'
>>> dutch_metacat_query = w.collection_items('dutch-metadata', limit=1)
>>> dutch_metacat_query['numberMatched']
198
>>> dutch_metacat_query['numberReturned']
1
>>> dutch_metacat_query = w.collection_items('dutch-metadata', q='Wegpanorama')
>>> dutch_metacat_query['numberMatched']
2

Note

Consulte a documentação oficial da OWSLib para mais exemplos.

Resumo

Parabéns! Agora é capaz de publicar metadados na pygeoapi.