Note
This is the Gouwe-Gozer interoperability fork of ZOO-Project. Its local Docker profile builds the patched ZOO loaders and a focused set of process providers from this checkout. For the upstream project, see ZOO-Project/ZOO-Project.
ZOO-Project
The ZOO-Project is an open source processing platform, released under MIT/X11 Licence. It provides the polyglot ZOO-Kernel, a server implementation of the Web Processing Service (WPS) (1.0.0 and 2.0.0) and the OGC API - Processes standards published by the OGC. It contains ZOO-Services, a minimal set of ready-to-use services that can be used as a base to create more usefull services. It provides the ZOO-API, initially only available from the JavaScript service implementation, which exposes ZOO-Kernel variables and functions to the language used to implement the service. It contains the ZOO-Client, a JavaScript API which can be used from a client application to interact with a WPS server.
The ZOO-Kernel is a powerful processing engine able to handle execution of service that can be implemented in various programming languages:
- C/C++,
- C#,
- Fortran,
- Java,
- JavaScript,
- Python,
- PHP,
- Perl,
- Ruby,
- R
- Node.js
In addition, the ZOO-Kernel can also support handling existing applications from Geographic Information System (GIS) processing engine such as:
Also, the ZOO-Kernel can automatically publish data, resulting of a service execution, to MapServer, making the data available through Open Standards: Web Map Service (WMS), Web Feature Service (WFS) and, Web Coverage Service (WCS).
The ZOO-Services are composed of two distinct things. First, the metadata informations which can be stored in an adhoc ZCFG format, YAML or in a dedicated database. Then, the ServiceProvider is the executable version of your service. The metadata informations will define every input and output that the service will handle, their type, number and so on. The Service Provider will obviously vary in kind from one language to another. It may be, for instance, a shared library for C language or a simple JavaScript file.
To illustrate the ease of integration of existing code as a service, the first services provided was the commonly used Geospatial Data Abstraction Library (GDAL) tools like: ogr2ogr, gdal_wrap... Also, some trivial services were implemented using the Computational Geometry Algorithms Library (CGAL).
The ZOO-API is mainly used from the JavaScript language, it gives the capability from a service to invoke other services execution implemented in other lnaguage or running from an existing GIS processing engine. The basic ZOO-API is available for every supported programming language.
The ZOO-Client is a JavaScript API that can be used on client side to interact with a WPS Server.
See License
- Docker with the
docker composeplugin curl- Port 80 available on the host
The image targets linux/amd64. Docker Desktop can emulate this platform on
ARM hosts, but the first build will be slower.
Clone this fork, then use the repository-owned startup command:
git clone https://github.com/Gouwe-Gozer/ZOO-Project.git
cd ZOO-Project
./zoo.sh up./zoo.sh up creates the writable runtime directory, builds the image from
the checked-out source, recreates both patched ZOO services, waits for the API,
and verifies that the complete process collection is valid JSON.
Open:
- Landing page: http://localhost/
- OGC API landing page: http://localhost/ogc-api/
- Processes: http://localhost/ogc-api/processes
- WPS endpoint: http://localhost/cgi-bin/zoo_loader.cgi
Check or stop the stack with:
./zoo.sh check
./zoo.sh status
./zoo.sh downDo not use docker start for this stack. It neither rebuilds the checked-out
source nor coordinates service startup. Run ./zoo.sh up again after pulling
changes.
If the wrapper cannot be used, run:
mkdir -p docker/tmp
chmod 0777 docker/tmp
docker compose up -d --build --force-recreate --remove-orphans \
zookernel zoofpm websocketdAn HTTP 503 can occur briefly while the worker starts. Confirm readiness and
the large-response fix with:
curl -fsS http://localhost/ogc-api/processes \
-o /tmp/zoo-processes.json
jq empty /tmp/zoo-processes.json
jq '{returned: (.processes | length), total: .numberTotal}' \
/tmp/zoo-processes.jsonThe API advertises 700+ process descriptions inherited from the compatible base image. A description being present does not guarantee that every optional runtime dependency for that process is installed. This fork builds selected GDAL, OGR, CGAL and example providers and verifies its compatible SAGA runtime modules. Other advertised processes may require additional packages or configuration.
See the local Docker profile for image pins, configuration, non-default ports and troubleshooting.