101 lines
2.9 KiB
Markdown
101 lines
2.9 KiB
Markdown
# pygeoapi
|
|
|
|
[](https://travis-ci.org/geopython/pygeoapi)
|
|
|
|
pygeoapi provides an API to geospatial data
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
virtualenv -p python pygeoapi
|
|
cd pygeoapi
|
|
. bin/activate
|
|
git clone https://github.com/geopython/pygeoapi.git
|
|
cd pygeoapi
|
|
pip install -r requirements.txt
|
|
pip install -r requirements-dev.txt
|
|
# install provider requirements accordingly from requirements-provider.txt
|
|
pip install -e .
|
|
cp pygeoapi-config.yml local.config.yml
|
|
vi local.config.yml
|
|
# TODO: what is most important to edit?
|
|
export PYGEOAPI_CONFIG=/path/to/local.config.yml
|
|
# generate OpenAPI Document
|
|
pygeoapi generate-openapi-document -c local.config.yml > openapi.yml
|
|
export PYGEOAPI_OPENAPI=/path/to/openapi.yml
|
|
pygeoapi serve
|
|
```
|
|
|
|
## Example requests
|
|
|
|
Try the swagger ui at `http://localhost:5000/ui`
|
|
|
|
or
|
|
|
|
```bash
|
|
# feature collection metadata
|
|
curl http://localhost:5000/
|
|
# conformance
|
|
curl http://localhost:5000/conformance
|
|
# feature collection
|
|
curl http://localhost:5000/collections/countries
|
|
# feature collection limit 100
|
|
curl http://localhost:5000/collections/countries/items?limit=100
|
|
# feature
|
|
curl http://localhost:5000/collections/countries/items/1
|
|
# number of hits
|
|
curl http://localhost:5000/collections/countries/items?resulttype=hits
|
|
|
|
```
|
|
|
|
## Exploring with Swagger UI
|
|
|
|
```bash
|
|
docker pull swaggerapi/swagger-ui
|
|
docker run -p 80:8080 swaggerapi/swagger-ui
|
|
# go to http://localhost
|
|
# enter http://localhost:5000/api and click 'Explore'
|
|
```
|
|
|
|
## Demo Server
|
|
|
|
There is a demo server on https://demo.pygeoapi.io running the latest (Docker) version
|
|
from the `master` branch of this repo. `pygeoapi` runs there at https://demo.pygeoapi.io/master.
|
|
|
|
The demo server setup and config is maintained within a seperate GH repo:
|
|
https://github.com/geopython/demo.pygeoapi.io.
|
|
|
|
## Docker
|
|
|
|
Best/easiest way to run `pygeoapi` is to use Docker.
|
|
On DockerHub [pygeoapi Docker Images](https://cloud.docker.com/u/geopython/repository/docker/geopython/pygeoapi)
|
|
are available.
|
|
|
|
The version tagged `latest` is automatically built whenever code
|
|
in the `master` branch of this GitHub repo changes (autobuild).
|
|
This also cascades to updating the [pygeoapi demo service](https://demo.pygeoapi.io/master).
|
|
So the chain is:
|
|
|
|
```
|
|
(git push to master) --> (DockerHub Image autobuild) --> (demo server redeploy)
|
|
|
|
```
|
|
|
|
Please read the [docker/README](https://github.com/geopython/pygeoapi/blob/master/docker/README.md) for
|
|
details of the Docker implementation. To get started quickly
|
|
[several examples](https://github.com/geopython/pygeoapi/blob/master/docker/examples) will get you up and running.
|
|
|
|
### Unit Testing
|
|
|
|
Unit tests are run using `pytest` from the top project folder:
|
|
|
|
```
|
|
pytest tests
|
|
```
|
|
|
|
NB beware that some tests require Provider dependencies (libraries) to be available
|
|
and that the ElasticSearch and Postgres tests require their respective
|
|
backend servers running.
|
|
|
|
Environment variables are set in the file [pytest.ini](pytest.ini).
|