diff --git a/workshop/content/docs/advanced/bridges.md b/workshop/content/docs/advanced/bridges.md
index a8e5da7e..bcf4c340 100644
--- a/workshop/content/docs/advanced/bridges.md
+++ b/workshop/content/docs/advanced/bridges.md
@@ -1,8 +1,8 @@
---
-title: Exercise 8 - pygeoapi as a bridge to other services
+title: Exercise 9 - pygeoapi as a bridge to other services
---
-# Exercise 8 - pygeoapi as a bridge to other services
+# Exercise 9 - pygeoapi as a bridge to other services
In this section we explore how pygeoapi can be used as a facade, or a bridge, to re-publish web services with different interfaces. These bridges can help [organisations migrating from OWS to OGC API](https://ogcapi-workshop.ogc.org/transition-and-migration).
@@ -15,11 +15,9 @@ a wider audience. Let's set up an API on top of an existing WFS hosted by the ci
!!! question "Update the pygeoapi configuration"
Open the pygeoapi configuration in a text editor.
- Find the line:
- "# START - EXERCISE 8 - WFS Proxy"
+ Find the line `# START - EXERCISE 8 - WFS Proxy`.
- Add a new dataset section by uncommenting the lines up to
- "# END - EXERCISE 8 - WFS Proxy":
+ Add a new dataset section by uncommenting the lines up to `# END - EXERCISE 8 - WFS Proxy`:
``` {.yaml linenums="1"}
@@ -97,11 +95,9 @@ We can use the pygeoapi's WMSFacade provider to publish OGC Web Map Service (WMS
!!! question "Update the pygeoapi configuration"
Open the pygeoapi configuration in a text editor.
- Find the line:
- "## START - EXERCISE 8 - WMS Proxy"
+ Find the line `## START - EXERCISE 8 - WMS Proxy`.
- Add a new dataset section by uncommenting the lines up to
- "## END - EXERCISE 8 - WMS Proxy":
+ Add a new dataset section by uncommenting the lines up to `## END - EXERCISE 8 - WMS Proxy`:
Be sure to keep the proper YAML indentation.
@@ -153,11 +149,9 @@ In this section we'll have a look at how to publish Catalogue Service for the We
!!! question "Update the pygeoapi configuration"
Open the pygeoapi configuration in a text editor.
- Find the line:
- "# START - EXERCISE 8 - CSW Proxy"
+ Find the line `# START - EXERCISE 8 - CSW Proxy`.
- Add a new dataset section by uncommenting the lines up to
- "# END - EXERCISE 8 - CSW Proxy":
+ Add a new dataset section by uncommenting the lines up to `# END - EXERCISE 8 - CSW Proxy`:
``` {.yaml linenums="1"}
cite_demo:
@@ -203,11 +197,9 @@ In this section we'll have a look at how to Publish a SensorThings API `Thing` a
!!! question "Update the pygeoapi configuration"
Open the pygeoapi configuration in a text editor.
- Find the line:
- "# START - EXERCISE 8 - SensorThings Proxy"
+ Find the line `# START - EXERCISE 8 - SensorThings Proxy`.
- Add a new dataset section by uncommenting the lines up to
- "# END - EXERCISE 8 - SensorThings Proxy":
+ Add a new dataset section by uncommenting the lines up to `# END - EXERCISE 8 - SensorThings Proxy`:
``` {.yaml linenums="1"}
toronto_bikes:
diff --git a/workshop/content/docs/advanced/cloud.md b/workshop/content/docs/advanced/cloud.md
index 9bbd2e7e..0a3e8d4b 100644
--- a/workshop/content/docs/advanced/cloud.md
+++ b/workshop/content/docs/advanced/cloud.md
@@ -14,23 +14,36 @@ A [Docker image](https://hub.docker.com/r/geopython/pygeoapi) is available for p
```bash
-docker run -p 5000:80 https://hub.docker.com/r/geopython/pygeoapi:latest
+docker run -p 5000:80 geopython/pygeoapi:latest
```
-!!! question "Review the pygeoapi docker file"
+!!! question "Review the pygeoapi Dockerfile"
- Notice in the [pygeoapi docker file](https://github.com/geopython/pygeoapi/Dockerfile) how the open api file is generated as part of the docker startup script.
+ Notice in the [pygeoapi Dockerfile](https://github.com/geopython/pygeoapi/Dockerfile) how the open api file is generated as part of the Docker startup script.
-In a typical configuration one would override the default pygeoapi configuration file in the image with a customized one and include the data folder
+In a typical configuration one would override the default pygeoapi configuration file in the image with a customized one and include the data folder:
+
+!!! example "using custom configuration"
+
+ === "Linux/Mac"
+
+
+ ```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
+ ```
+
+
+ === "Windows"
+
+
+ ```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
+ ```
+
-
-```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
-```
-
Alternatively, you can build a fresh Docker image including both the configuration and data for the service.
@@ -42,7 +55,7 @@ COPY ./my.config.yml /pygeoapi/local.config.yml
You may have noticed that the pygeoapi configuration file includes a reference to the endpoint on which pygeoapi is published. This configuration should
match the public endpoint of the service (domain, path and port).
-By default the pygeoapi Docker Image will run from the `root` path `/`. If you need to run from a sub-path and have all internal URLs correct you can
+By default the pygeoapi Docker image will run from the `root` path `/`. If you need to run from a sub-path and have all internal URLs correct you can
set the `SCRIPT_NAME` environment variable.
diff --git a/workshop/content/docs/advanced/crs.md b/workshop/content/docs/advanced/crs.md
index 783b61fe..193e7f84 100644
--- a/workshop/content/docs/advanced/crs.md
+++ b/workshop/content/docs/advanced/crs.md
@@ -56,8 +56,7 @@ in CRSs like `http://www.opengis.net/def/crs/EPSG/0/4258` (ETRS89 latitude, long
!!! question "Add CRS to a pygeoapi configuration"
Open the pygeoapi configuration file in a text editor.
- Find the line:
- "# START - EXERCISE 2 - firenze-terrains"
+ Find the line `# START - EXERCISE 2 - firenze-terrain`
Update the dataset section with CRS support by replacing it with the snippet below:
diff --git a/workshop/content/docs/advanced/semantic-web-linked-data.md b/workshop/content/docs/advanced/semantic-web-linked-data.md
index ab08ee2f..cc35dc6d 100644
--- a/workshop/content/docs/advanced/semantic-web-linked-data.md
+++ b/workshop/content/docs/advanced/semantic-web-linked-data.md
@@ -37,7 +37,7 @@ some aspects of the Semantic Web so the data can be traversed by Semantic Web aw
However you can also use SPARQL to query graphs of linked web resources. The SPARQL client traverses links between
the resources to locate the requested triples. [Jena ARQ](https://jena.apache.org/documentation/query/) is a command
line SPARQL client which is able to run such queries. Jena is quite difficult to set up, although there is a
- [Docker Image](https://hub.docker.com/r/stain/jena) available. As an alternative we will use a web-based implementation
+ [Docker image](https://hub.docker.com/r/stain/jena) available. As an alternative we will use a web-based implementation
of the ARQ engine. Navigate to [https://demos.isl.ics.forth.gr/sparql-ld-endpoint](https://demos.isl.ics.forth.gr/sparql-ld-endpoint/)
and replace the query in the textbox with:
diff --git a/workshop/content/docs/index.md b/workshop/content/docs/index.md
index 0b6a82f0..ece5879d 100644
--- a/workshop/content/docs/index.md
+++ b/workshop/content/docs/index.md
@@ -40,6 +40,23 @@ Exercises are indicated as follows:
A section marked like this indicates that you can try out the exercise.
+!!! example "Example exercise with tabs"
+
+ A section marked like this indicates that you can try out the exercise and choose your environment (Linux/Mac or Windows).
+
+ === "Linux/Mac"
+
+ ```bash
+ docker run -p 5000:80 -v $(pwd)/default.config.yml:/pygeoapi/local.config.yml geopython/pygeoapi:latest
+ ```
+
+ === "Windows"
+
+ ```bash
+ docker run -p 5000:80 -v ${pwd}/default.config.yml:/pygeoapi/local.config.yml geopython/pygeoapi:latest
+ ```
+
+
Also you will notice tips and notes sections within the text:
!!! tip
diff --git a/workshop/content/docs/publishing/index.md b/workshop/content/docs/publishing/index.md
index b9a0684e..dbab0ea8 100644
--- a/workshop/content/docs/publishing/index.md
+++ b/workshop/content/docs/publishing/index.md
@@ -19,4 +19,4 @@ through the following exercises:
- [Exercise 6 - Metadata via OGC API - Records](ogcapi-records.md)
- [Exercise 7 - Environmental data via OGC API - Environmental Data Retrieval](ogcapi-edr.md)
- [Exercise 8 - Functions via OGC API - Processes](ogcapi-processes.md)
-- [Exercise 9 - Functions via OGC API - Processes](ogcapi-processes.md)
+- [Exercise 9 - pygeoapi as a bridge to other services](../advanced/bridges.md)
diff --git a/workshop/content/docs/publishing/ogcapi-coverages.md b/workshop/content/docs/publishing/ogcapi-coverages.md
index 8d6cb099..a595eea9 100644
--- a/workshop/content/docs/publishing/ogcapi-coverages.md
+++ b/workshop/content/docs/publishing/ogcapi-coverages.md
@@ -34,6 +34,8 @@ unzip 53.zip
```
+If you do not have curl installed, copy the URL above to your web browser and save locally.
+
You can now add `53_ED1_G.tif` to pygeoapi:
!!! question "Update the pygeoapi configuration"
diff --git a/workshop/content/docs/publishing/ogcapi-edr.md b/workshop/content/docs/publishing/ogcapi-edr.md
index a6089744..c48b5d9c 100644
--- a/workshop/content/docs/publishing/ogcapi-edr.md
+++ b/workshop/content/docs/publishing/ogcapi-edr.md
@@ -65,11 +65,22 @@ Let's try publishing some ICOADS data via the EDR xarray plugin. The sample ICOA
Save the configuration and restart Docker Compose. Navigate to to evaluate whether the new dataset has been published.
-At first glance, the `icoads-sst` collection appears as a normal OGC API - Coverages collection. Let's look a bit closer at the colleciton description:
+At first glance, the `icoads-sst` collection appears as a normal OGC API - Coverages collection. Let's look a bit closer at the collection description:
# Client access
-Currently there is no support for EDR in common tooling. The example below provides a generic workflow using the [Python requests library](https://requests.readthedocs.io):
+!!! question "Interact with OGC API - Environmental Data Retrieval via Python requests"
+
+ If you do not have Python installed, consider running this exercise in a Docker container. See the [Setup Chapter](../setup.md#using-docker-for-python-clients).
+
+
+ ```bash
+ pip3 install requests
+ ```
+
+
+
+Currently there is limited client support for EDR. The example below provides a generic workflow using the [Python requests library](https://requests.readthedocs.io):
```python
diff --git a/workshop/content/docs/publishing/ogcapi-features.md b/workshop/content/docs/publishing/ogcapi-features.md
index a7593a5d..8049c9bb 100644
--- a/workshop/content/docs/publishing/ogcapi-features.md
+++ b/workshop/content/docs/publishing/ogcapi-features.md
@@ -43,11 +43,9 @@ Let's add the file `workshop/exercises/data/osm_places_kosovo.gpkg`:
!!! question "Update the pygeoapi configuration"
Open the pygeoapi configuration file in a text editor.
- Find the line:
- "# START - EXERCISE 2 - osm_places"
+ Find the line `# START - EXERCISE 2 - osm_places`.
- Add a new dataset section by uncommenting the lines up to
- "# END - EXERCISE 2 - osm_places":
+ Add a new dataset section by uncommenting the lines up to `# END - EXERCISE 2 - osm_places`:
``` {.yaml linenums="1"}
osm_places-vec:
@@ -107,7 +105,7 @@ docker-compose up
```
-This configuration snippet, enables publishing greater_hyderabad_municipal_corporation_ward_boundaries.geojson as OGC API - Features:
+This configuration snippet, enables publishing the file `greater_hyderabad_municipal_corporation_ward_boundaries.geojson` as OGC API - Features:
``` {.yaml linenums="1"}
greater_hyderabad_municipal_corporation_ward_boundaries:
@@ -134,7 +132,7 @@ This configuration snippet, enables publishing greater_hyderabad_municipal_corpo
providers:
- type: feature
name: Elasticsearch
- #Note elastic_search is the docker container of ES the name is defined in the docker-compose.yml
+ # note: elastic_search is the Docker container name as defined in docker-compose.ym
data: http://elastic_search:9200/greater_hyderabad_municipal_corporation_ward_boundaries
id_field: objectid
```
@@ -194,7 +192,7 @@ QGIS is one of the first GIS Desktop clients which added support for OGC API - F
!!! tip
- Install and activate the `QGIS Network Logger` extension. It will display HTTP traffic within QGIS and is a valuable tool in debugging failing connections.
+ Activate the `Debugging/Development Tools Panel` (right click anywhere on the toolbar icons and select). It will display HTTP traffic within QGIS and is a valuable tool in debugging failing connections.
!!! note
@@ -241,7 +239,7 @@ QGIS is one of the first GIS Desktop clients which added support for OGC API - F
```
- Then start a Python console session with: `python` (stop the session by typing `exit()`).
+ Then start a Python console session with: `python3` (stop the session by typing `exit()`).
```python
diff --git a/workshop/content/docs/publishing/ogcapi-maps.md b/workshop/content/docs/publishing/ogcapi-maps.md
index 54bd5cbb..2f840368 100644
--- a/workshop/content/docs/publishing/ogcapi-maps.md
+++ b/workshop/content/docs/publishing/ogcapi-maps.md
@@ -19,7 +19,7 @@ In this section we'll be exposing a Geopackage file available at `workshop/exerc
!!! question "Interact with OGC API - Maps via MapScript"
- Open the pygeoapi configuration file in a text editor. Find the line: "# START - EXERCISE 5 - Maps".
+ Open the pygeoapi configuration file in a text editor. Find the line `# START - EXERCISE 5 - Maps`.
Uncomment section related to #airports.
diff --git a/workshop/content/docs/publishing/ogcapi-records.md b/workshop/content/docs/publishing/ogcapi-records.md
index ff334749..4346623a 100644
--- a/workshop/content/docs/publishing/ogcapi-records.md
+++ b/workshop/content/docs/publishing/ogcapi-records.md
@@ -78,8 +78,7 @@ develop your own custom pygeoapi plugin, or convert your metadata to OGC API - R
### Sample ISO 19139 to TinyDBCatalogue loader
-It is possible to load more example ISO19139 metadata in a TinyDB database with [the following script](https://github.com/geopython/pygeoapi/blob/master/tests/load_tinydb_records.py) ([raw](https://raw.githubusercontent.com/geopython/pygeoapi/master/tests/load_tinydb_records.py))
-
+It is possible to load more example ISO19139 metadata in a TinyDB database with [the following script](https://github.com/geopython/pygeoapi/blob/master/tests/load_tinydb_records.py) ([raw](https://raw.githubusercontent.com/geopython/pygeoapi/master/tests/load_tinydb_records.py)):
```bash
@@ -89,6 +88,56 @@ python3 load_tinydb_records.py xml catalogue.tinydb
```
+If you do not have curl installed, copy the URL above to your web browser and save locally.
+
+If you do not have Python installed, you can the loader by using the OWSLib Docker container. See the [Setup Chapter](../setup.md#using-docker-for-python-clients).
+
+!!! example "Using the OWSLib Docker container to load metadata"
+
+=== "Linux/Mac"
+
+ ```bash
+ 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/records/xml /data/records/catalogue.tinydb
+ ```
+
+
+=== "Windows"
+
+ ```bash
+ 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/records/xml /data/records/catalogue.tinydb
+ ```
+
+
+Navigate to
to evaluate whether the new metadata has been published
+to the collection.
+
+!!! tip pygeometa
+
+ [pygeometa](https://geopython.github.io/pygeometa) is a Python package to generate metadata for geospatial
+ datasets. pygeometa allows for managing metadata in simple YAML "metadata control files (MCF), and supports
+ import, export as well as transformations for many geospatial metadata formats. OGC API - Records metadata
+ can be produced using pygeometa, either from MCF files or transforming from other formats.
+
+ Install and run pygeometa per below to get an idea of the various commands and functionality (as well,
+ consult the [tutorial](https://geopython.github.io/pygeometa/tutorial)).
+
+
+ ```bash
+ pip3 install pygeometa
+ pygeometa --help
+ ```
+
+
## pygeoapi as a CSW proxy
You can check the "pygeoapi as a Bridge to Other Services" section to learn how to [publish CSW as OGC API - Records](../../advanced/bridges/#publishing-csw-as-ogc-api-records).
@@ -129,7 +178,7 @@ QGIS supports OGC API - Records via the [MetaSearch plugin](https://docs.qgis.or
```
- Then start a Python console session with: `python` (stop the session by typing `exit()`).
+ Then start a Python console session with: `python3` (stop the session by typing `exit()`).
```python
diff --git a/workshop/content/docs/publishing/ogcapi-tiles.md b/workshop/content/docs/publishing/ogcapi-tiles.md
index b2934900..99b0255b 100644
--- a/workshop/content/docs/publishing/ogcapi-tiles.md
+++ b/workshop/content/docs/publishing/ogcapi-tiles.md
@@ -38,26 +38,39 @@ include, but are not limited to:
* [QGIS](https://www.qgistutorials.com/en/docs/creating_basemaps_with_qtiles.html)
* [tippecanoe](https://github.com/mapbox/tippecanoe)
-For this exercise, you will publish a vector dataset of the [greater hyderabad municipal corporation ward boundaries](https://livingatlas-dcdev.opendata.arcgis.com/datasets/a090c89d52f1498f96a82e97b8bfb83e_0/about), from the location below:
+For this exercise, you will publish a vector dataset of the [greater Hyderabad municipal corporation ward boundaries](https://livingatlas-dcdev.opendata.arcgis.com/datasets/a090c89d52f1498f96a82e97b8bfb83e_0/about), from the location below:
* data: `workshop/exercises/data/greater_hyderabad_municipal_corporation_ward_Boundaries.geojson`
Let's generate the tiles as the first step using tippecanoe:
-
-```bash
-cd workshop/exercises
-docker run -it --rm -v ${PWD}/data:/data emotionalcities/tippecanoe \
-tippecanoe --output-to-directory=/data/tiles/ --force --maximum-zoom=16 --drop-densest-as-needed --extend-zooms-if-still-dropping --no-tile-compression /data/greater_hyderabad_municipal_corporation_ward_Boundaries.geojson
-```
-
+!!! example "Using tippecanoe to generate vector tiles"
+
+ === "Linux/Mac"
+
+
+ ```bash
+ cd workshop/exercises
+ docker run -it --rm -v $(pwd)/data:/data emotionalcities/tippecanoe \
+ tippecanoe --output-to-directory=/data/tiles/ --force --maximum-zoom=16 --drop-densest-as-needed --extend-zooms-if-still-dropping --no-tile-compression /data/greater_hyderabad_municipal_corporation_ward_Boundaries.geojson
+ ```
+
+
+ === "Windows"
+
+
+ ```bash
+ cd workshop/exercises
+ docker run -it --rm -v ${pwd}/data:/data emotionalcities/tippecanoe tippecanoe --output-to-directory=/data/tiles/ --force --maximum-zoom=16 --drop-densest-as-needed --extend-zooms-if-still-dropping --no-tile-compression /data/greater_hyderabad_municipal_corporation_ward_Boundaries.geojson
+ ```
+
!!! question "Update the pygeoapi configuration"
Open the pygeoapi configuration in a text editor. Add a new dataset section as follows:
``` {.yaml linenums="1"}
- Hyderabad:
+ hyderabad:
type: collection
title: Greater Hyderabad Municipal Corporation ward boundaries
description: The city ward boundaries represent the administrative and electoral boundary areas of the city. It plays a great role in planning of the city, for each council of the municipal corporation.
@@ -102,8 +115,8 @@ Save the file and restart Docker Compose. Navigate to
-- tile metadata in
+- tile links in
+- tile metadata in
![TileSet](../assets/images/vtiles-hyderabad.png)
@@ -156,7 +169,7 @@ This configuration, enables publishing greater_hyderabad_municipal_corporation_w
providers:
- type: feature
name: Elasticsearch
- #Note elastic_search is the docker container of ES the name is defined in the docker-compose.yml
+ # note: elastic_search is the Docker container name as defined in docker-compose.yml
data: http://elastic_search:9200/greater_hyderabad_municipal_corporation_ward_boundaries
id_field: objectid
- type: tile
@@ -185,10 +198,10 @@ QGIS supports OGC API Vector Tiles via the [Vector Tiles Layer](https://docs.qgi
Before entering QGIS, access your pygeoapi installation page on the browser and follow these steps.
- - access the collection page of the tiles dataset:
- - navigate to the tiles page by clicking on `tiles`:
- - click in `Tiles metadata in tilejson format`: `http://localhost:5000/collections/Cycle/Hyderabad/WorldCRS84Quad/metadata>
- - note the URL in `tiles`: `http://localhost:5000/collections/Hyderabad/tiles/WorldCRS84Quad/{tileMatrix}/{tileRow}/{tileCol}?f=mvt` and of the values of minZoom and maxZoom
+ - access the collection page of the tiles dataset:
+ - navigate to the tiles page by clicking on `tiles`:
+ - click in `Tiles metadata in tilejson format`:
+ - note the URL in `tiles`: `http://localhost:5000/collections/hyderabad/tiles/WorldCRS84Quad/{tileMatrix}/{tileRow}/{tileCol}?f=mvt` and of the values of minZoom and maxZoom
Follow these steps to connect to a service and access vector tiles:
@@ -259,7 +272,7 @@ QGIS supports OGC API Vector Tiles via the [Vector Tiles Layer](https://docs.qgi
interactive: true,
vectorTileLayerStyles: vectorTileStyling,
};
- var pbfURL='http://localhost:5000/collections/Hyderabad/tiles/WorldCRS84Quad/{z}/{x}/{y}?f=mvt';
+ var pbfURL='http://localhost:5000/collections/hyderabad/tiles/WorldCRS84Quad/{z}/{x}/{y}?f=mvt';
var pbfLayer=L.vectorGrid.protobuf(pbfURL,mapVectorTileOptions).on('click',function(e) {
console.log(e.layer);
L.DomEvent.stop(e);
@@ -274,7 +287,7 @@ QGIS supports OGC API Vector Tiles via the [Vector Tiles Layer](https://docs.qgi
!!! tip
Try adding a [different pygeoapi vector tiles layer](https://demo.pygeoapi.io/master/collections/lakes/tiles/WorldCRS84Quad/metadata) by updating the code in `workshop/exercises/html/vector-tiles.html`.
- If you want to render the tiles from the [elasticSearch example](#publish-vector-tiles-from-elasticsearch), you can check out the code from [this](https://github.com/doublebyte1/vtiles-example/blob/ogcapi-ws/demo-oat.htm) repository:
+ If you want to render the tiles from the [Elasticsearch example](#publish-vector-tiles-from-elasticsearch), you can check out the code from [this](https://github.com/doublebyte1/vtiles-example/blob/ogcapi-ws/demo-oat.htm) repository:
```bash
git clone -b ogcapi-ws https://github.com/doublebyte1/vtiles-example.git
@@ -283,6 +296,11 @@ QGIS supports OGC API Vector Tiles via the [Vector Tiles Layer](https://docs.qgi
![](../assets/images/leaflet-hyderabad2.png){ width=100% }
+!!! tip
+
+ See the [official LeafletJS documentation](https://leafletjs.com/reference.html)
+
+
### OpenLayers
[OpenLayers](https://openlayers.org) is a popular JavaScript library to add interactive maps to websites. OpenLayers natively supports OGC API - Tiles.
diff --git a/workshop/content/docs/setup.md b/workshop/content/docs/setup.md
index 9498ac23..09f4fc56 100644
--- a/workshop/content/docs/setup.md
+++ b/workshop/content/docs/setup.md
@@ -90,7 +90,7 @@ Some notes:
* On Windows we recommend using the [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl) (WSL) as it also provides a powerful (Bash) command line and has optimal integration with Docker
* On Mac, if you are using [Homebrew](https://brew.sh), consider (as the author has) using the [brew Docker formula](https://formulae.brew.sh/formula/Docker)
* On MacOS Monterey, there is an issue with the port 5000 that is already used and therefore conflicting to the default one used by pygeoapi. If you are facing with this error `OSError: [Errno 48] Address already in use` then you need to can disable the *Airplay Receiver* from `System Preference->Sharing` of your MacOS (detailed description in this blog [post](https://progressstory.com/tech/port-5000-already-in-use-macos-monterey-issue/)).
-* On Linux, you can choose the relevant installer for your platform. You can also use Virtualbox with a Ubuntu Image or use a cloud VM
+* On Linux, you can choose the relevant installer for your platform. You can also use Virtualbox with a Ubuntu image or use a cloud VM
* Docker Desktop includes a graphical user interface with some interesting options. You can see logs and information about running containers, open their service in a browser or even open a terminal inside the container
If all goes well, you should be able to run Docker from the command line as follows: [^2]
@@ -151,7 +151,7 @@ data is a one-liner.
That's all! Open your browser and navigate to
, the pygeoapi page will display.
-As part of the initial `docker run`, Docker will download the pygeoapi Docker Image from [Docker hub](https://hub.Docker.com/r/geopython/pygeoapi).
+As part of the initial `docker run`, Docker will download the pygeoapi Docker image from [Docker hub](https://hub.Docker.com/r/geopython/pygeoapi).
This may take some time, as the Docker image includes all dependencies (such as GDAL, etc.). Be patient! This is a one-time download for the entire workshop, or
you may want to do this beforehand.
@@ -159,7 +159,7 @@ Some notes:
* Docker runs a pygeoapi container on your local system on port 5000, which is mapped to port 80 inside the container
* the pygeoapi Docker container runs with the [default configuration](https://github.com/geopython/pygeoapi/blob/master/docker/default.config.yml) and data from the GitHub repo
-* both configuration and data (from GitHub repo) is embedded in the Docker Image - we will override these later
+* both configuration and data (from GitHub repo) is embedded in the Docker image - we will override these later
* the `--rm` option removes the Docker Container (but not the image), after execution
* type `CTRL-C` to stop the container and return to the terminal
@@ -175,11 +175,9 @@ within the container by a local file which you can edit in your favourite text e
Download pygeoapi's default Docker configuration from [default.config.yml](https://raw.githubusercontent.com/geopython/pygeoapi/master/docker/default.config.yml) to the current folder (or navigate to the folder where you downloaded the file), for example with:
-
- ```bash
- curl -O https://raw.githubusercontent.com/geopython/pygeoapi/master/docker/default.config.yml
- ```
-
+ !!! note
+
+ If you do not have curl installed, copy the URL above to your web browser and save locally.
Open the file in your favourite text editor and change the title and description of the API:
@@ -190,15 +188,28 @@ within the container by a local file which you can edit in your favourite text e
description: pygeoapi provides an API to geospatial data
```
- Now run the container with the overridden config file:
+ Now run the container with the overridden config file (on Linux/Mac):
-
- ```bash
- docker run -p 5000:80 \
- -v $(pwd)/default.config.yml:/pygeoapi/local.config.yml \
- geopython/pygeoapi:latest
- ```
-
+
+ !!! example "Running pygeoapi with a custom configuration"
+
+ === "Linux/Mac"
+
+
+ ```bash
+ docker run -p 5000:80 \
+ -v $(pwd)/default.config.yml:/pygeoapi/local.config.yml \
+ geopython/pygeoapi:latest
+ ```
+
+
+ === "Windows"
+
+
+ ```bash
+ docker run -p 5000:80 -v ${pwd}/default.config.yml:/pygeoapi/local.config.yml geopython/pygeoapi:latest
+ ```
+
At this point, navigate to to verify the new title and description.
@@ -206,7 +217,7 @@ within the container by a local file which you can edit in your favourite text e
By using a Docker volume mount (`-v` option), Docker attaches or 'mounts' a
directory or single file from your host/local system into the Docker Container.
-In the above snippet, `$(pwd)` indicates the working folder from which you start the Docker container.
+In the above snippet, `$(pwd)` or `${pwd}` indicates the working folder from which you start the Docker container.
## Adding data and setting the configuration file
@@ -218,15 +229,27 @@ Within the data directory you can store vector data, raster files or sets of ima
Below is an example where the configuration is explictly set to `pygeoapi-config.yml` via an environment variable (`-e`) and uses a Docker mount to mount the local `data` folder as `/pygeoapi/mydata`:
-
-```bash
-docker run -p 5000:80 \
--v $(pwd)/data:/pygeoapi/mydata \
--v $(pwd)/default.config.yml:/pygeoapi/pygeoapi-config.yml \
--e PYGEOAPI_CONFIG=/pygeoapi/pygeoapi-config.yml \
-geopython/pygeoapi:latest
-```
-
+!!! question "Running pygeoapi with custom configuration"
+
+ === "Linux/Mac"
+
+
+ ```bash
+ docker run -p 5000:80 \
+ -v $(pwd)/data:/pygeoapi/mydata \
+ -v $(pwd)/default.config.yml:/pygeoapi/pygeoapi-config.yml \
+ -e PYGEOAPI_CONFIG=/pygeoapi/pygeoapi-config.yml \
+ geopython/pygeoapi:latest
+ ```
+
+
+ === "Windows"
+
+
+ ```bash
+ docker run -p 5000:80 -v ${pwd}/data:/pygeoapi/mydata -v ${pwd}/default.config.yml:/pygeoapi/pygeoapi-config.yml -e PYGEOAPI_CONFIG=/pygeoapi/pygeoapi-config.yml geopython/pygeoapi:latest
+ ```
+
In the next sections we will review additional examples of mounts to the data folder. More Docker deployment examples can be found in the [pygeoapi GitHub repository](https://github.com/geopython/pygeoapi/tree/master/docker/examples).
@@ -242,10 +265,9 @@ The magic line is:
`docker run -it --rm --network=host --name owslib python:3.10-slim /bin/bash`
-This will pull a small (125MB) official Python Docker Image. When the Container is started you are directed into
+This will pull a small (125MB) official Python Docker image. When the Container is started you are directed into
a `Bash` session/prompt. The argument `--network=host` allows you to directly interact with services on your
-host system, thus with `pygeoapi`, without setting up a Docker network. From there you can start `python3`, install `OWSLib` and
-maybe even other tools like `curl` and `wget`.
+host system, thus with `pygeoapi`, without setting up a Docker network. From there you can start `python3`, install `OWSLib` and maybe even other tools like `curl` and `wget`.
Below is a complete example, assuming pygeoapi runs on your `localhost` at port 5000:
diff --git a/workshop/content/mkdocs.yml b/workshop/content/mkdocs.yml
index 6dd7fea6..9555acf0 100644
--- a/workshop/content/mkdocs.yml
+++ b/workshop/content/mkdocs.yml
@@ -54,6 +54,8 @@ markdown_extensions:
- admonition # adds the note, question, tip boxes, eg: !!! tip "my tip"
- pymdownx.details # advanced collapsible panels
- pymdownx.superfences # advanced features; such as line number, flow chart, python shell
+ - pymdownx.tabbed:
+ alternate_style: true
- footnotes # notes bottom of page
- attr_list # used to size images
- md_in_html # used to size images
diff --git a/workshop/exercises/data/records/catalogue.tinydb b/workshop/exercises/data/records/catalogue.tinydb
index 250c968b..97a0d7e7 100644
--- a/workshop/exercises/data/records/catalogue.tinydb
+++ b/workshop/exercises/data/records/catalogue.tinydb
@@ -1 +1 @@
-{"_default": {"1": {"id": "cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82", "conformsTo": ["http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"], "type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[10.7, 43.43], [10.7, 44.25], [11.76, 44.25], [11.76, 43.43], [10.7, 43.43]]]}, "properties": {"recordCreated": "2021-11-25", "recordUpdated": "2022-08-07T19:12:37Z", "type": "dataset", "title": "Carsharing (anno 2012) - Citt\u00e0 Metropolitana di Firenze", "description": "Posizionamento puntuale delle attivit\u00e0 di carsharing della Citt\u00e0 Metropolitana di Firenze", "providers": [{"contactInfo": {"address": {"main": {"deliveryPoint": "Via Cavour 9", "city": "Firenze", "postalCode": "50129", "country": "Italia"}}, "email": "sit@cittametropolitana.fi.it"}, "name": "Direzione SIT e reti informative", "roles": [{"name": "pointOfContact"}]}], "externalIds": [{"scheme": "default", "value": "cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82"}], "themes": [{"concepts": ["Carsharing", "Mobilit\u00e0", "Viabilit\u00e0"]}, {"concepts": [], "scheme": "http://www.eionet.europa.eu/gemet/inspire_themes"}, {"concepts": ["Trasporti"], "scheme": null}, {"concepts": [], "scheme": "http://inspire.ec.europa.eu/metadata-codelist/SpatialScope"}, {"concepts": [], "scheme": "https://registry.geodati.gov.it/rndt-all1"}, {"concepts": ["opendata", "EU"]}], "extent": {"spatial": {"bbox": [[10.7, 43.43, 11.76, 44.25]], "crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"}, "temporal": {"interval": [null, null], "trs": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"}}, "_metadata-anytext": "cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82 Citt\u00e0 Metropolitana di Firenze Direzione SIT e reti informative Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it Linee Guida RNDT 2.0 Carsharing (anno 2012) - Citt\u00e0 Metropolitana di Firenze cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82_resource Direzione SIT e reti informative Citt\u00e0 Metropolitana di Firenze 055 2760199 Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82_resource Posizionamento puntuale delle attivit\u00e0 di carsharing della Citt\u00e0 Metropolitana di Firenze (da compilare) Direzione SIT e reti informative Citt\u00e0 Metropolitana di Firenze 055 2760199 Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it Carsharing Mobilit\u00e0 Viabilit\u00e0 Trasporti theme.data-theme-skos.rdf opendata EU Dato pubblico http://publications.europa.eu/resource/authority/licence/CC_BY_4_0 ESRI Shapefile 1.0 WMS OGC Web Map Service (ver. 1.3) Carsharing.zip infomob_poi_carsharing Fare riferimento alle specifiche indicate (da compilare)"}, "links": [{"href": "http://dati.cittametropolitana.fi.it/geonetwork/srv/api/records/cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82/attachments/Carsharing.zip", "rel": "item", "title": "Carsharing.zip"}, {"href": "http://pubblicazioni.cittametropolitana.fi.it/geoserver/trasporti/infomob_poi_carsharing/wms?request=getCapabilities&service=WMS&version=1.3.0", "rel": "item", "title": "infomob_poi_carsharing"}]}, "2": {"id": "c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1", "conformsTo": ["http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"], "type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[11.145, 43.718], [11.145, 43.84], [11.348, 43.84], [11.348, 43.718], [11.145, 43.718]]]}, "properties": {"recordCreated": "2022-06-10", "recordUpdated": "2022-08-07T19:12:37Z", "type": "dataset", "title": "Wifi", "description": "Il dataset mostra la georeferenziazione puntuale su mappa dei luoghi nel Comune di Firenze in cui \u00e8 disponibile un servizio gratuito di connessione ad internet in modalit\u00e0 senza fili (Wifi).", "providers": [{"contactInfo": {"address": {"main": {}}, "phone": "+39 055 328 3858", "email": "sit@comune.fi.it"}, "name": null, "roles": [{"name": "pointOfContact"}]}], "externalIds": [{"scheme": "default", "value": "c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1"}], "themes": [{"concepts": ["EU"]}, {"concepts": ["wifi"]}, {"concepts": ["connessione internet"]}, {"concepts": ["reti"]}, {"concepts": ["Servizi di pubblica utilit\u00e0 e servizi amministrativi"], "scheme": null}, {"concepts": ["open data"]}], "extent": {"spatial": {"bbox": [[11.145, 43.718, 11.348, 43.84]], "crs": "http://www.opengis.net/def/crs/OGC/1.3/CRS84"}, "temporal": {"interval": ["2022-06-10", "2022-06-10"], "trs": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"}}, "_metadata-anytext": "c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1 c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1 Comune di Firenze +39 055 328 3858 sit@comune.fi.it DM-Regole Tecniche RNDT 10 novembre 2011 3003 http://www.epsg-registry.org/ Wifi c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71 Comune di Firenze +39 055 328 3858 sit@comune.fi.it Comune di Firenze +39 055 328 3858 sit@comune.fi.it c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71 Il dataset mostra la georeferenziazione puntuale su mappa dei luoghi nel Comune di Firenze in cui \u00e8 disponibile un servizio gratuito di connessione ad internet in modalit\u00e0 senza fili (Wifi). Comune di Firenze +39 055 328 3858 sit@comune.fi.it EU wifi connessione internet reti Servizi di pubblica utilit\u00e0 e servizi amministrativi GEMET - INSPIRE themes, version 1.0 open data Creative Commons Attribuzione 4.0 Internazionale (CC-BY 4.0) wms Standard url Standard OGC:WMS catastoreti:access_point_wifi REGOLAMENTO (UE) N. 1089/2010 DELLA COMMISSIONE del 23 novembre 2010 recante attuazione della direttiva 2007/2/CE del Parlamento europeo e del Consiglio per quanto riguarda l'interoperabilit\u00e0 dei set di dati territoriali e dei servizi di dati territoriali See the referenced specification Il SIT del comune di Firenze \u00e8 attivo dagli anni 90 e promuove la georeferenziazione dei dati e la costruzione di archivi geografici. Il SIT attualmente fornisce l'infrastruttura tecnologica e le applicazioni. L'aggiornamento del dato \u00e8 a cura delle direzioni titolari del dato."}, "links": [{"href": "http://opendata.comune.fi.it/?q=metarepo/datasetinfo&id=fb5b7bac-bcb0-4326-9388-7e3f3d671d71", "rel": "item"}, {"href": "https://datigis.comune.fi.it/shp/wifi.zip", "rel": "item"}, {"href": "https://datigis.comune.fi.it/kml/wifi.kmz", "rel": "item"}, {"href": "http://tms.comune.fi.it/tiles/service/wms?request=GetCapabilities&service=WMS&tiled=TRUE&version=1.3.0", "rel": "item", "title": "catastoreti:access_point_wifi", "type": "OGC:WMS"}]}}}
\ No newline at end of file
+{"_default": {"1": {"id": "c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1", "conformsTo": ["http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"], "type": "Feature", "time": ["2022-06-10", "2022-06-10"], "geometry": {"type": "Polygon", "coordinates": [[[11.145, 43.718], [11.145, 43.84], [11.348, 43.84], [11.348, 43.718], [11.145, 43.718]]]}, "properties": {"created": "2022-06-10", "updated": "2023-12-15T11:24:47Z", "type": "dataset", "title": "Wifi", "description": "Il dataset mostra la georeferenziazione puntuale su mappa dei luoghi nel Comune di Firenze in cui \u00e8 disponibile un servizio gratuito di connessione ad internet in modalit\u00e0 senza fili (Wifi).", "providers": [{"contactInfo": {"address": {"office": {}}, "phone": {"office": "+39 055 328 3858"}, "email": {"office": "sit@comune.fi.it"}}, "name": null, "roles": [{"name": "pointOfContact"}]}], "externalIds": [{"scheme": "default", "value": "c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1"}], "themes": [{"concepts": [{"id": "EU"}]}, {"concepts": [{"id": "wifi"}]}, {"concepts": [{"id": "connessione internet"}]}, {"concepts": [{"id": "reti"}]}, {"concepts": [{"id": "Servizi di pubblica utilit\u00e0 e servizi amministrativi"}], "scheme": null}, {"concepts": [{"id": "open data"}]}], "_metadata-anytext": "c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1 c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71:1 Comune di Firenze +39 055 328 3858 sit@comune.fi.it DM-Regole Tecniche RNDT 10 novembre 2011 3003 http://www.epsg-registry.org/ Wifi c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71 Comune di Firenze +39 055 328 3858 sit@comune.fi.it Comune di Firenze +39 055 328 3858 sit@comune.fi.it c_d612:fb5b7bac-bcb0-4326-9388-7e3f3d671d71 Il dataset mostra la georeferenziazione puntuale su mappa dei luoghi nel Comune di Firenze in cui \u00e8 disponibile un servizio gratuito di connessione ad internet in modalit\u00e0 senza fili (Wifi). Comune di Firenze +39 055 328 3858 sit@comune.fi.it EU wifi connessione internet reti Servizi di pubblica utilit\u00e0 e servizi amministrativi GEMET - INSPIRE themes, version 1.0 open data Creative Commons Attribuzione 4.0 Internazionale (CC-BY 4.0) wms Standard url Standard Comune di Firenze +39 055 328 3858 sit@comune.fi.it OGC:WMS catastoreti:access_point_wifi REGOLAMENTO (UE) N. 1089/2010 DELLA COMMISSIONE del 23 novembre 2010 recante attuazione della direttiva 2007/2/CE del Parlamento europeo e del Consiglio per quanto riguarda l'interoperabilit\u00e0 dei set di dati territoriali e dei servizi di dati territoriali See the referenced specification Il SIT del comune di Firenze \u00e8 attivo dagli anni 90 e promuove la georeferenziazione dei dati e la costruzione di archivi geografici. Il SIT attualmente fornisce l'infrastruttura tecnologica e le applicazioni. L'aggiornamento del dato \u00e8 a cura delle direzioni titolari del dato."}, "links": [{"href": "http://opendata.comune.fi.it/?q=metarepo/datasetinfo&id=fb5b7bac-bcb0-4326-9388-7e3f3d671d71", "rel": "item"}, {"href": "https://datigis.comune.fi.it/shp/wifi.zip", "rel": "item"}, {"href": "https://datigis.comune.fi.it/kml/wifi.kmz", "rel": "item"}, {"href": "http://tms.comune.fi.it/tiles/service/wms?request=GetCapabilities&service=WMS&tiled=TRUE&version=1.3.0", "rel": "item", "title": "catastoreti:access_point_wifi", "type": "OGC:WMS"}]}, "2": {"id": "cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82", "conformsTo": ["http://www.opengis.net/spec/ogcapi-records-1/1.0/req/record-core"], "type": "Feature", "time": [null, null], "geometry": {"type": "Polygon", "coordinates": [[[10.7, 43.43], [10.7, 44.25], [11.76, 44.25], [11.76, 43.43], [10.7, 43.43]]]}, "properties": {"created": "2021-11-25", "updated": "2023-12-15T11:24:47Z", "type": "dataset", "title": "Carsharing (anno 2012) - Citt\u00e0 Metropolitana di Firenze", "description": "Posizionamento puntuale delle attivit\u00e0 di carsharing della Citt\u00e0 Metropolitana di Firenze", "providers": [{"contactInfo": {"address": {"office": {"deliveryPoint": "Via Cavour 9", "city": "Firenze", "postalCode": "50129", "country": "Italia"}}, "email": {"office": "sit@cittametropolitana.fi.it"}}, "name": "Direzione SIT e reti informative", "roles": [{"name": "pointOfContact"}]}], "externalIds": [{"scheme": "default", "value": "cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82"}], "themes": [{"concepts": [{"id": "Carsharing"}, {"id": "Mobilit\u00e0"}, {"id": "Viabilit\u00e0"}]}, {"concepts": [{"id": "Reti di trasporto"}], "scheme": "http://www.eionet.europa.eu/gemet/inspire_themes"}, {"concepts": [{"id": "Trasporti"}], "scheme": null}, {"concepts": [{"id": "Locale"}], "scheme": "http://inspire.ec.europa.eu/metadata-codelist/SpatialScope"}, {"concepts": [{"id": "Reti di trasporto"}], "scheme": "https://registry.geodati.gov.it/rndt-all1"}, {"concepts": [{"id": "opendata"}, {"id": "EU"}]}], "_metadata-anytext": "cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82 Citt\u00e0 Metropolitana di Firenze Direzione SIT e reti informative Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it Linee Guida RNDT 2.0 Carsharing (anno 2012) - Citt\u00e0 Metropolitana di Firenze cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82_resource Direzione SIT e reti informative Citt\u00e0 Metropolitana di Firenze 055 2760199 Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82_resource Posizionamento puntuale delle attivit\u00e0 di carsharing della Citt\u00e0 Metropolitana di Firenze (da compilare) Direzione SIT e reti informative Citt\u00e0 Metropolitana di Firenze 055 2760199 Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it Carsharing Mobilit\u00e0 Viabilit\u00e0 Trasporti theme.data-theme-skos.rdf opendata EU Dato pubblico http://publications.europa.eu/resource/authority/licence/CC_BY_4_0 ESRI Shapefile 1.0 WMS OGC Web Map Service (ver. 1.3) Citt\u00e0 Metropolitana di Firenze Direzione SIT e reti informative Via Cavour 9 Firenze 50129 Italia sit@cittametropolitana.fi.it Carsharing.zip infomob_poi_carsharing Fare riferimento alle specifiche indicate (da compilare)"}, "links": [{"href": "http://dati.cittametropolitana.fi.it/geonetwork/srv/api/records/cmfi:9c92966b-ae6b-42d4-9729-592b016e4b82/attachments/Carsharing.zip", "rel": "item", "title": "Carsharing.zip"}, {"href": "http://pubblicazioni.cittametropolitana.fi.it/geoserver/trasporti/infomob_poi_carsharing/wms?request=getCapabilities&service=WMS&version=1.3.0", "rel": "item", "title": "infomob_poi_carsharing"}]}}}
\ No newline at end of file
diff --git a/workshop/exercises/docker-compose.yml b/workshop/exercises/docker-compose.yml
index 6c66de81..794e8378 100644
--- a/workshop/exercises/docker-compose.yml
+++ b/workshop/exercises/docker-compose.yml
@@ -44,5 +44,5 @@ services:
volumes:
- ./pygeoapi.config.yml:/pygeoapi/local.config.yml
-# - ./data:/data # Exercise 1 - First - Ready to pull data from here
+ # - ./data:/data # Exercise 1 - First - Ready to pull data from here
- ./plugins/process/squared.py:/pygeoapi/pygeoapi/process/squared.py # Exercise 8
diff --git a/workshop/exercises/html/vector-tiles.html b/workshop/exercises/html/vector-tiles.html
index 11239be5..906e9d3a 100644
--- a/workshop/exercises/html/vector-tiles.html
+++ b/workshop/exercises/html/vector-tiles.html
@@ -38,11 +38,11 @@
interactive: true,
vectorTileLayerStyles: vectorTileStyling,
};
- var pbfURL='http://localhost:5000/collections/Hyderabad/tiles/WorldCRS84Quad/{z}/{x}/{y}?f=mvt';
+ var pbfURL='http://localhost:5000/collections/hyderabad/tiles/WorldCRS84Quad/{z}/{x}/{y}?f=mvt';
var pbfLayer=L.vectorGrid.protobuf(pbfURL,mapVectorTileOptions).on('click',function(e) {
console.log(e.layer);
L.DomEvent.stop(e);
}).addTo(map);