|
| 1 | +--- |
| 2 | +title: Exercício 9 - pygeoapi como ponte para outros serviços |
| 3 | +--- |
| 4 | + |
| 5 | +# Exercício 9 - pygeoapi como ponte para outros serviços |
| 6 | + |
| 7 | +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). |
| 8 | + |
| 9 | +## Publicar WFS como OGC API - Features |
| 10 | + |
| 11 | +Um caso de uso importante para a pygeoapi é fornecer uma interface OGC API - Features sobre endpoints Web Feature Service (WFS) |
| 12 | +ou ESRI FeatureServer existentes. Neste cenário, diminui a barreira de acesso e aumenta a usabilidade de serviços existentes para |
| 13 | +uma audiência mais ampla. Vamos configurar uma API sobre um WFS existente (correndo nos servidores da cidade de Florença). |
| 14 | + |
| 15 | +!!! question "Atualizar a configuração da pygeoapi" |
| 16 | + |
| 17 | + Abra a configuração da pygeoapi num editor de texto. |
| 18 | + Encontre a linha `# START - EXERCISE 8 - WFS Proxy`. |
| 19 | + |
| 20 | + Adicione uma nova secção de conjunto de dados descomentando as linhas até `# END - EXERCISE 8 - WFS Proxy`: |
| 21 | + |
| 22 | + |
| 23 | + ``` {.yaml linenums="1"} |
| 24 | + suol_epicentri_storici: |
| 25 | + type: collection |
| 26 | + title: Epicentros dos principais sismos históricos |
| 27 | + description: Localização dos epicentros dos principais sismos históricos no território da Cidade Metropolitana de Florença classificados por ano e intensidade |
| 28 | + keywords: |
| 29 | + - sismos |
| 30 | + links: |
| 31 | + - type: text/xml |
| 32 | + rel: canonical |
| 33 | + title: Epicentros dos principais sismos históricos |
| 34 | + href: http://pubblicazioni.cittametropolitana.fi.it/geoserver/territorio/wfs?request=getCapabilities&service=WFS&version=2.0.0 |
| 35 | + hreflang: it |
| 36 | + extents: |
| 37 | + spatial: |
| 38 | + bbox: [10.94, 43.52, 11.65, 44.17] |
| 39 | + crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84 |
| 40 | + providers: |
| 41 | + - type: feature |
| 42 | + name: OGR |
| 43 | + data: |
| 44 | + source_type: WFS |
| 45 | + source: WFS:http://pubblicazioni.cittametropolitana.fi.it/geoserver/territorio/wfs? |
| 46 | + source_capabilities: |
| 47 | + paging: True |
| 48 | + source_options: |
| 49 | + OGR_WFS_LOAD_MULTIPLE_LAYER_DEFN: NO |
| 50 | + gdal_ogr_options: |
| 51 | + EMPTY_AS_NULL: NO |
| 52 | + GDAL_CACHEMAX: 64 |
| 53 | + CPL_DEBUG: NO |
| 54 | + id_field: cpti_id |
| 55 | + crs: |
| 56 | + - http://www.opengis.net/def/crs/OGC/1.3/CRS84 |
| 57 | + - http://www.opengis.net/def/crs/EPSG/0/4258 |
| 58 | + - http://www.opengis.net/def/crs/EPSG/0/3857 |
| 59 | + - http://www.opengis.net/def/crs/EPSG/0/3003 |
| 60 | + storage_crs: http://www.opengis.net/def/crs/EPSG/0/3003 |
| 61 | + title_field: d |
| 62 | + layer: territorio:suol_epicentri_storici |
| 63 | + ``` |
| 64 | + |
| 65 | +Guarde o ficheiro e reinicie o Docker Compose. Navegue para <http://localhost:5000/collections> |
| 66 | +para avaliar se o novo conjunto de dados foi publicado. |
| 67 | + |
| 68 | +Note estes importantes excertos de configuração sob `providers`: |
| 69 | + |
| 70 | +* Usamos o [Fornecedor OGR](https://docs.pygeoapi.io/en/latest/data-publishing/ogcapi-features.html#ogr) da pygeoapi. |
| 71 | +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). |
| 72 | +Podíamos ter usado o Fornecedor `OGR` em vez do Fornecedor `SQLiteGPKG` acima no exercício `osm_places-vec` acima. |
| 73 | + |
| 74 | +* `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') |
| 75 | +* `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. |
| 76 | + |
| 77 | +O suporte CRS permite efetivamente à pygeoapi *reprojetar* os dados do seu CRS de armazenamento (aqui EPSG:3003) |
| 78 | +de acordo com [OGC API - Features - Part 2: Coordinate Reference Systems by Reference](https://docs.opengeospatial.org/is/18-058r1/18-058r1.html). |
| 79 | +A secção Avançada desta workshop [elaborará o suporte CRS da pygeoapi](../advanced/crs.md). |
| 80 | + |
| 81 | + |
| 82 | +## Publicar WMS como OGC API - Maps |
| 83 | + |
| 84 | +Podemos usar o provider/fornecedor WMSFacade da pygeoapi para publicar interfaces OGC Web Map Service (WMS) como OGC API - Maps. |
| 85 | + |
| 86 | + Vamos configurar uma API sobre um WMS existente no Servidor de Demonstração MapServer: |
| 87 | + |
| 88 | + <https://demo.mapserver.org/cgi-bin/msautotest> |
| 89 | + |
| 90 | + |
| 91 | +!!! note |
| 92 | + |
| 93 | + Sinta-se à vontade para usar um WMS à sua escolha! |
| 94 | + |
| 95 | +!!! question "Atualizar a configuração da pygeoapi" |
| 96 | + |
| 97 | + Abra a configuração da pygeoapi num editor de texto. |
| 98 | + Encontre a linha `## START - EXERCISE 8 - WMS Proxy`. |
| 99 | + |
| 100 | + Adicione uma nova secção de conjunto de dados descomentando as linhas até `## END - EXERCISE 8 - WMS Proxy`: |
| 101 | + |
| 102 | + Certifique-se de manter a indentação YAML adequada. |
| 103 | + |
| 104 | + ``` {.yaml linenums="1"} |
| 105 | + wms-facade-demo: |
| 106 | + type: collection |
| 107 | + title: Demonstração WMS Facade |
| 108 | + description: Demonstração WMS Facade |
| 109 | + keywords: |
| 110 | + - WMS facade |
| 111 | + links: |
| 112 | + - type: text/html |
| 113 | + rel: canonical |
| 114 | + title: MapServer |
| 115 | + href: https://mapserver.org |
| 116 | + hreflang: en |
| 117 | + extents: |
| 118 | + spatial: |
| 119 | + bbox: [-180,-90,180,90] |
| 120 | + crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84 |
| 121 | + providers: |
| 122 | + - type: map |
| 123 | + name: WMSFacade |
| 124 | + data: https://demo.mapserver.org/cgi-bin/msautotest |
| 125 | + options: |
| 126 | + layer: world_latlong |
| 127 | + style: default |
| 128 | + format: |
| 129 | + name: png |
| 130 | + mimetype: image/png |
| 131 | + ``` |
| 132 | + |
| 133 | +Execute os seguintes pedidos no seu navegador web: |
| 134 | + |
| 135 | +- mapa padrão: <http://localhost:5000/collections/wms-facade-demo/map?f=png> |
| 136 | +- largura/altura específicas: <http://localhost:5000/collections/wms-facade-demo/map?f=png&width=800&height=600> |
| 137 | +- á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> |
| 138 | + |
| 139 | +{ width=80% } |
| 140 | + |
| 141 | +!!! tip |
| 142 | + |
| 143 | + Experimente com os seus próprios valores de bbox e largura/altura! |
| 144 | + |
| 145 | +## Publicar CSW como OGC API - Records |
| 146 | + |
| 147 | +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/). |
| 148 | + |
| 149 | +!!! question "Atualizar a configuração da pygeoapi" |
| 150 | + |
| 151 | + Abra a configuração da pygeoapi num editor de texto. |
| 152 | + Encontre a linha `# START - EXERCISE 8 - CSW Proxy`. |
| 153 | + |
| 154 | + Adicione uma nova secção de conjunto de dados descomentando as linhas até `# END - EXERCISE 8 - CSW Proxy`: |
| 155 | + |
| 156 | + ``` {.yaml linenums="1"} |
| 157 | + cite_demo: |
| 158 | + type: collection |
| 159 | + title: pycsw OGC CITE demo e Implementação de Referência |
| 160 | + 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) |
| 161 | + keywords: |
| 162 | + - ogc |
| 163 | + - cite |
| 164 | + - conformidade |
| 165 | + - interoperabilidade |
| 166 | + extents: |
| 167 | + spatial: |
| 168 | + bbox: [-180,-90,180,90] |
| 169 | + crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84 |
| 170 | + providers: |
| 171 | + - type: record |
| 172 | + name: CSWFacade |
| 173 | + data: https://demo.pycsw.org/cite/csw |
| 174 | + id_field: identifier |
| 175 | + time_field: datetime |
| 176 | + title_field: title |
| 177 | + ``` |
| 178 | + |
| 179 | +Pode explorar a coleção de catálogo com proxy usando estes endpoints: |
| 180 | + |
| 181 | +* página de metadados da coleção: <http://localhost:5000/collections/cite_demo> |
| 182 | +* lista de registos: <http://localhost:5000/collections/cite_demo/items> |
| 183 | +* registo: <http://localhost:5000/collections/cite_demo/items/urn:uuid:19887a8a-f6b0-4a63-ae56-7fba0e17801f> |
| 184 | + |
| 185 | +!!! tip |
| 186 | + |
| 187 | + Lembre-se de que pode usar o cliente QGIS sugerido [aqui](https://dive.pygeoapi.io/publishing/ogcapi-records/#client-access) para explorar esta API. |
| 188 | + |
| 189 | +## Publicar SensorThings API como OGC API - Features |
| 190 | + |
| 191 | +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. |
| 192 | + |
| 193 | +A ponte SensorThings da pygeoapi permite fazer proxy das entidades SensorThings (por exemplo: `Thing` , `Sensor`, `DataStream`, `ObservedProperty` ) em coleções de funcionalidades. |
| 194 | + |
| 195 | +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) |
| 196 | + |
| 197 | +!!! question "Atualizar a configuração da pygeoapi" |
| 198 | + |
| 199 | + Abra a configuração da pygeoapi num editor de texto. |
| 200 | + Encontre a linha `# START - EXERCISE 8 - SensorThings Proxy`. |
| 201 | + |
| 202 | + Adicione uma nova secção de conjunto de dados descomentando as linhas até `# END - EXERCISE 8 - SensorThings Proxy`: |
| 203 | + |
| 204 | + ``` {.yaml linenums="1"} |
| 205 | + toronto_bikes: |
| 206 | + type: collection |
| 207 | + title: Toronto Bikes SensorThings |
| 208 | + description: A localização geográfica com coordenadas para a estação de partilha de bicicletas de Toronto |
| 209 | + keywords: |
| 210 | + - sedimentos |
| 211 | + extents: |
| 212 | + spatial: |
| 213 | + bbox: [-180,-90,180,90] |
| 214 | + crs: http://www.opengis.net/def/crs/OGC/1.3/CRS84 |
| 215 | + providers: |
| 216 | + - type: feature |
| 217 | + name: SensorThings |
| 218 | + data: https://toronto-bike-snapshot.sensorup.com/v1.0/ |
| 219 | + entity: Things |
| 220 | + ``` |
0 commit comments