Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
b904f6f
- updated event and workshop team
doublebyte1 Aug 3, 2025
1ba5ce5
- updated workshop team
doublebyte1 Aug 3, 2025
2929811
- updated workshop team
doublebyte1 Aug 3, 2025
6db7a96
- added portuguese translation
doublebyte1 Aug 3, 2025
2734d94
- added github action
doublebyte1 Aug 3, 2025
0f21a44
- fixed req path
doublebyte1 Aug 3, 2025
8d910ed
- fixed req path
doublebyte1 Aug 3, 2025
7f4fd9d
- added translation for nav bar
doublebyte1 Aug 3, 2025
160a362
- added pt translation for introduction
doublebyte1 Aug 3, 2025
a4b0eb0
- added pt translation of setup section
doublebyte1 Aug 3, 2025
d6b65b8
- enable workflow to run manually
doublebyte1 Aug 4, 2025
241069e
- added exercises 1 and 2 of data publishing section
doublebyte1 Aug 18, 2025
ffba9b6
- Updated site title in Portuguese
doublebyte1 Aug 18, 2025
c8c52a9
- added translations for coverages, maps, features, maps, tiles, stan…
doublebyte1 Aug 24, 2025
da357dd
feat: Complete PT translation of workshop docs (26 files). Add PT tr…
Aug 31, 2025
5e35334
- addd translation for OARec
Sep 10, 2025
e537c1b
- added translations for ogc api edr and ogc api processes
Sep 10, 2025
34b6b60
- added portuguese translations for records and conclusion
doublebyte1 Sep 15, 2025
4db031b
Merge branch 'lang-pt' of https://github.com/doublebyte1/diving-into-…
doublebyte1 Sep 15, 2025
d916999
- updated ogcapi image
Sep 24, 2025
fca87bf
- fixed typo
Sep 24, 2025
541c824
- updated metadata link of hyderabad
Sep 24, 2025
4ab6719
- updated room number
doublebyte1 Sep 29, 2025
175c10d
Rework pt translations for introduction and oafeat exercises
ricardogsilva Oct 3, 2025
04b865b
Rework pt translations for introduction and oafeat exercises
ricardogsilva Oct 4, 2025
7767425
Merge pull request #2 from ricardogsilva/ricardo-translations
doublebyte1 Oct 4, 2025
a42a1da
Merge branch 'lang-pt' into lang-pt
doublebyte1 Oct 6, 2025
65ca8e4
Merge pull request #1 from jorgejesus/lang-pt
doublebyte1 Oct 6, 2025
c4b9696
- removed test workflow
doublebyte1 Oct 6, 2025
34a339d
- Addressed mkdocs build --strict warnings
doublebyte1 Oct 6, 2025
53190b6
- renamed ogcapi image file
doublebyte1 Oct 6, 2025
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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
.DS_Store
workshop/exercises/data/tiles
workshop/content/site

.idea
.venv
29 changes: 29 additions & 0 deletions workshop/content/docs/advanced/administration.pt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
title: Administração
---

# Administração

## Visão geral

A pygeoapi fornece uma API de administração (consulte a [documentação](https://docs.pygeoapi.io/en/latest/admin-api.html) da pygeoapi para mais informações sobre como ativar, configurar e usar) em suporte à gestão da sua configuração. A API (não uma OGC API) é implementada como um serviço RESTful para ajudar a criar, atualizar, substituir ou eliminar vários elementos da configuração da pygeoapi. Uma UI simples apenas de leitura é implementada como parte da API de administração.

## Interface de utilizador

Por design, a pygeoapi não fornece uma verdadeira interface de utilizador para administrar a configuração. Dado que a API de administração existe, algumas opções podem ser consideradas para desenvolver uma UI de administração:

- autónoma
- aplicação simples sem conectividade à API de administração da pygeoapi
- construída a partir do [esquema](https://github.com/geopython/pygeoapi/blob/master/pygeoapi/schemas/config/pygeoapi-config-0.x.yml) de configuração da pygeoapi
- permite copiar uma configuração já existente da pygeoapi
- permite gerar configuração da pygeoapi para copiar/colar numa implementação da pygeoapi
- pode ser implementada em qualquer lugar (por exemplo, GitHub Pages)
- integrada
- aplicação conectada a uma implementação da pygeoapi
- construída a partir do [esquema](https://github.com/geopython/pygeoapi/blob/master/pygeoapi/schemas/config/pygeoapi-config-0.x.yml) de configuração da pygeoapi
- lê/escreve uma configuração da pygeoapi em tempo real através da API de administração da pygeoapi (controlo de acesso)
- implementada como parte de uma aplicação Docker Compose

!!! note

Tem a sua própria ideia para uma UI de administração da pygeoapi? Conecte-se com a [comunidade da pygeoapi](https://pygeoapi.io/community) para discutir a sua ideia!
220 changes: 220 additions & 0 deletions workshop/content/docs/advanced/bridges.pt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
---
title: Exercício 9 - pygeoapi como ponte para outros serviços
---

# Exercício 9 - pygeoapi como ponte para outros serviços

Nesta secção vamos explorar como a pygeoapi pode ser usada como um interface para re-publicar serviços web com distintas interfaces. Estas pontes podem ajudar [organizações a migrar de OWS para OGC API](https://ogcapi-workshop.ogc.org/transition-and-migration).

## Publicar WFS como OGC API - Features

Um caso de uso importante para a pygeoapi é fornecer uma interface OGC API - Features sobre endpoints Web Feature Service (WFS)
ou ESRI FeatureServer existentes. Neste cenário, diminui a barreira de acesso e aumenta a usabilidade de serviços existentes para
uma audiência mais ampla. Vamos configurar uma API sobre um WFS existente (correndo nos servidores da cidade de Florença).

!!! question "Atualizar a configuração da pygeoapi"

Abra a configuração da pygeoapi num editor de texto.
Encontre a linha `# START - EXERCISE 8 - WFS Proxy`.

Adicione uma nova secção de conjunto de dados descomentando as linhas até `# END - EXERCISE 8 - WFS Proxy`:


``` {.yaml linenums="1"}
suol_epicentri_storici:
type: collection
title: Epicentros dos principais sismos históricos
description: Localização dos epicentros dos principais sismos históricos no território da Cidade Metropolitana de Florença classificados por ano e intensidade
keywords:
- sismos
links:
- type: text/xml
rel: canonical
title: Epicentros dos principais sismos históricos
href: http://pubblicazioni.cittametropolitana.fi.it/geoserver/territorio/wfs?request=getCapabilities&service=WFS&version=2.0.0
hreflang: it
extents:
spatial:
bbox: [10.94, 43.52, 11.65, 44.17]
crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84
providers:
- type: feature
name: OGR
data:
source_type: WFS
source: WFS:http://pubblicazioni.cittametropolitana.fi.it/geoserver/territorio/wfs?
source_capabilities:
paging: True
source_options:
OGR_WFS_LOAD_MULTIPLE_LAYER_DEFN: NO
gdal_ogr_options:
EMPTY_AS_NULL: NO
GDAL_CACHEMAX: 64
CPL_DEBUG: NO
id_field: cpti_id
crs:
- http://www.opengis.net/def/crs/OGC/1.3/CRS84
- http://www.opengis.net/def/crs/EPSG/0/4258
- http://www.opengis.net/def/crs/EPSG/0/3857
- http://www.opengis.net/def/crs/EPSG/0/3003
storage_crs: http://www.opengis.net/def/crs/EPSG/0/3003
title_field: d
layer: territorio:suol_epicentri_storici
```

Guarde o ficheiro e reinicie o Docker Compose. Navegue para <http://localhost:5000/collections>
para avaliar se o novo conjunto de dados foi publicado.

Note estes importantes excertos de configuração sob `providers`:

* Usamos o [Fornecedor OGR](https://docs.pygeoapi.io/en/latest/data-publishing/ogcapi-features.html#ogr) da pygeoapi.
Este é o backend mais versátil da pygeoapi para suportar numerosos formatos. Usar a biblioteca GDAL/OGR (bindings Python) permite à pygeoapi conectar-se a [cerca de 80+ Formatos Vetoriais](https://gdal.org/drivers/vector).
Podíamos ter usado o Fornecedor `OGR` em vez do Fornecedor `SQLiteGPKG` acima no exercício `osm_places-vec` acima.

* `storage_crs` denota o CRS (Sistema de Referência de Coordenadas) no qual o conjunto de dados é armazenado (o padrão é CRS84, ou seja, 'longitude, latitude')
* `crs` é um array de CRSs que podem ser especificados para as Funcionalidades serem devolvidas (parâmetro `crs=`), ou para a sua bounding box (parâmetro `bbox-crs=`). O padrão também é CRS84.

O suporte CRS permite efetivamente à pygeoapi *reprojetar* os dados do seu CRS de armazenamento (aqui EPSG:3003)
de acordo com [OGC API - Features - Part 2: Coordinate Reference Systems by Reference](https://docs.opengeospatial.org/is/18-058r1/18-058r1.html).
A secção Avançada desta workshop [elaborará o suporte CRS da pygeoapi](../advanced/crs.md).


## Publicar WMS como OGC API - Maps

Podemos usar o provider/fornecedor WMSFacade da pygeoapi para publicar interfaces OGC Web Map Service (WMS) como OGC API - Maps.

Vamos configurar uma API sobre um WMS existente no Servidor de Demonstração MapServer:

<https://demo.mapserver.org/cgi-bin/msautotest>


!!! note

Sinta-se à vontade para usar um WMS à sua escolha!

!!! question "Atualizar a configuração da pygeoapi"

Abra a configuração da pygeoapi num editor de texto.
Encontre a linha `## START - EXERCISE 8 - WMS Proxy`.

Adicione uma nova secção de conjunto de dados descomentando as linhas até `## END - EXERCISE 8 - WMS Proxy`:

Certifique-se de manter a indentação YAML adequada.

``` {.yaml linenums="1"}
wms-facade-demo:
type: collection
title: Demonstração WMS Facade
description: Demonstração WMS Facade
keywords:
- WMS facade
links:
- type: text/html
rel: canonical
title: MapServer
href: https://mapserver.org
hreflang: en
extents:
spatial:
bbox: [-180,-90,180,90]
crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84
providers:
- type: map
name: WMSFacade
data: https://demo.mapserver.org/cgi-bin/msautotest
options:
layer: world_latlong
style: default
format:
name: png
mimetype: image/png
```

Execute os seguintes pedidos no seu navegador web:

- mapa padrão: <http://localhost:5000/collections/wms-facade-demo/map?f=png>
- largura/altura específicas: <http://localhost:5000/collections/wms-facade-demo/map?f=png&width=800&height=600>
- área de interesse específica (bbox do Canadá): <http://localhost:5000/collections/wms-facade-demo/map?f=png&width=800&height=600&bbox=-142,42,-52,84>

![](../assets/images/maps-response.png){ width=80% }

!!! tip

Experimente com os seus próprios valores de bbox e largura/altura!

## Publicar CSW como OGC API - Records

Nesta secção veremos como publicar Catalogue Service for the Web (CSW) como OGC API - Records. Para isso, usaremos o serviço CSW [pycsw OGC CITE demo](https://demo.pycsw.org/cite/).

!!! question "Atualizar a configuração da pygeoapi"

Abra a configuração da pygeoapi num editor de texto.
Encontre a linha `# START - EXERCISE 8 - CSW Proxy`.

Adicione uma nova secção de conjunto de dados descomentando as linhas até `# END - EXERCISE 8 - CSW Proxy`:

``` {.yaml linenums="1"}
cite_demo:
type: collection
title: pycsw OGC CITE demo e Implementação de Referência
description: pycsw é uma implementação de servidor OARec e OGC CSW escrita em Python. O pycsw implementa totalmente a OGC API - Records e a OpenGIS Catalogue Service Implementation Specification (Catalogue Service for the Web). O desenvolvimento inicial começou em 2010 (anunciado mais formalmente em 2011). O projeto é certificado OGC Compliant, e é uma Implementação de Referência OGC. Desde 2015, o pycsw é um Projeto OSGeo oficial. O pycsw permite a publicação e descoberta de metadados geoespaciais através de numerosas APIs (CSW 2/CSW 3, OpenSearch, OAI-PMH, SRU). Repositórios existentes de metadados geoespaciais também podem ser expostos, fornecendo um componente de metadados e catálogo baseado em normas de infraestruturas de dados espaciais. O pycsw é Open Source, lançado sob uma licença MIT, e executa em todas as principais plataformas (Windows, Linux, Mac OS X)
keywords:
- ogc
- cite
- conformidade
- interoperabilidade
extents:
spatial:
bbox: [-180,-90,180,90]
crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84
providers:
- type: record
name: CSWFacade
data: https://demo.pycsw.org/cite/csw
id_field: identifier
time_field: datetime
title_field: title
```

Pode explorar a coleção de catálogo com proxy usando estes endpoints:

* página de metadados da coleção: <http://localhost:5000/collections/cite_demo>
* lista de registos: <http://localhost:5000/collections/cite_demo/items>
* registo: <http://localhost:5000/collections/cite_demo/items/urn:uuid:19887a8a-f6b0-4a63-ae56-7fba0e17801f>

!!! tip

Lembre-se de que pode usar o cliente QGIS sugerido [aqui](https://dive.pygeoapi.io/publishing/ogcapi-records/#client-access) para explorar esta API.

## Publicar SensorThings API como OGC API - Features

A [norma OGC SensorThings API](https://ogcapi-workshop.ogc.org/api-deep-dive/sensorthings/) oferece interfaces RESTful para interconectar dispositivos IoT, dados, de forma aberta e unificada. Embora existam alguns clientes que suportam esta norma, há muito mais que suportam OGC API - Features.

A ponte SensorThings da pygeoapi permite fazer proxy das entidades SensorThings (por exemplo: `Thing` , `Sensor`, `DataStream`, `ObservedProperty` ) em coleções de funcionalidades.

Nesta secção veremos como Publicar um `Thing` da SensorThings API como uma coleção OGC API - Features, que pode então ser consumida por vários clientes, como [os listados aqui](../publishing/ogcapi-features.md#client-access)

!!! question "Atualizar a configuração da pygeoapi"

Abra a configuração da pygeoapi num editor de texto.
Encontre a linha `# START - EXERCISE 8 - SensorThings Proxy`.

Adicione uma nova secção de conjunto de dados descomentando as linhas até `# END - EXERCISE 8 - SensorThings Proxy`:

``` {.yaml linenums="1"}
toronto_bikes:
type: collection
title: Toronto Bikes SensorThings
description: A localização geográfica com coordenadas para a estação de partilha de bicicletas de Toronto
keywords:
- sedimentos
extents:
spatial:
bbox: [-180,-90,180,90]
crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84
providers:
- type: feature
name: SensorThings
data: https://toronto-bike-snapshot.sensorup.com/v1.0/
entity: Things
```
92 changes: 92 additions & 0 deletions workshop/content/docs/advanced/cloud.pt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
---
title: Implementação na cloud
---

# Implementação na cloud

A implementação em infraestruturas cloud e conceitos como Microsserviços e [Twelve-Factor](https://12factor.net) apresentam requisitos específicos para
como o software é projetado e implementado. A pygeoapi suporta estes conceitos, tendo uma pegada baixa em CPU e memória, e não persiste estado
do utilizador, sendo portanto capaz de escalar sem riscos.

## pygeoapi e Docker

Uma [imagem Docker](https://hub.docker.com/r/geopython/pygeoapi) está disponível para a pygeoapi. Pode executar a imagem localmente como:

=== "Linux/Mac"

<div class="termy">
```bash
docker run -p 5000:80 geopython/pygeoapi:latest
```
</div>

=== "Windows (PowerShell)"

<div class="termy">
```bash
docker run -p 5000:80 geopython/pygeoapi:latest
```
</div>

!!! question "Rever o Dockerfile da pygeoapi"

Note no [Dockerfile da pygeoapi](https://github.com/geopython/pygeoapi/Dockerfile) como o ficheiro open api é gerado como parte do script de arranque do Docker.

Numa configuração típica, substituir-se-ia o ficheiro de configuração padrão da pygeoapi na imagem por um personalizado e incluir a pasta de dados:

!!! example "usar configuração personalizada"

=== "Linux/Mac"

<div class="termy">
```bash
docker run -p 5000:80 \
-v $(pwd)/pygeoapi-config.yml:/pygeoapi/local.config.yml \
-v $(pwd)/geodata:/geodata https://hub.docker.com/r/geopython/pygeoapi:latest
```
</div>

=== "Windows (PowerShell)"

<div class="termy">
```bash
docker run -p 5000:80 -v ${pwd}/pygeoapi-config.yml:/pygeoapi/local.config.yml -v ${pwd}/geodata:/geodata https://hub.docker.com/r/geopython/pygeoapi:latest
```
</div>


Alternativamente, pode construir uma nova imagem Docker incluindo tanto a configuração como os dados para o serviço.

```
FROM geopython/pygeoapi:latest
COPY ./my.config.yml /pygeoapi/local.config.yml
```

Pode ter notado que o ficheiro de configuração da pygeoapi inclui uma referência ao endpoint no qual a pygeoapi é publicada. Esta configuração deve
corresponder ao endpoint público do serviço (domínio, caminho e porta).

Por defeito, a imagem Docker da pygeoapi executará a partir do caminho raiz `/`. Se precisar de executar a partir de um sub-caminho e ter todos os URLs internos corretos pode
definir a variável de ambiente `SCRIPT_NAME`.

=== "Linux/Mac"

<div class="termy">
```bash
docker run -p 5000:80 -e SCRIPT_NAME='/mypygeoapi' \
-v $(pwd)/my.config.yml:/pygeoapi/local.config.yml -it geopython/pygeoapi
# navegue para http://localhost:5000/mypygeoapi
```
</div>

=== "Windows (PowerShell)"

<div class="termy">
```bash
docker run -p 5000:80 -e SCRIPT_NAME='/mypygeoapi' -v ${pwd}/my.config.yml:/pygeoapi/local.config.yml -it geopython/pygeoapi
# navegue para http://localhost:5000/mypygeoapi
```
</div>

# Resumo

Parabéns! Agora pode implementar a pygeoapi como um serviço cloud native.
Loading