A lightweight RESTful geospatial feature server for PostGIS, written in Go. It supports the OGC API - Features REST API standard.
See also our companion project pg_tileserv
.
limit
, bbox
, bbox-crs
, property filtering, sortby
, crs
filter
and filter-crs
allow CQL filtering, with spatial supportoffset
, properties
, transform
, precision
, groupby
For a full list of software capabilities see FEATURES.
Builds of the latest code:
pg_featureserv
is developed under Go 1.13. It may also work with earlier versions.
In the following, replace version <VERSION>
with the pg_featureserv
version are building against.
Without go
installed, you can build pg_featureserv
in a docker image:
$GOPATH/src/github.com/CrunchyData/pg_featureserv
pg_featureserv/
:
make APPVERSION=<VERSION> clean build-in-docker
Download or clone this repository into $GOPATH/src/github.com/CrunchyData/pg_featureserv
To build the executable, run the following commands:
cd $GOPATH/src/github.com/CrunchyData/pg_featureserv/
go build
This creates a pg_featureserv
executable in the application directory
(Optional) Run the unit tests using go test ./...
pg_featureserv
make APPVERSION=<VERSION> clean docker
To run using an image built above:
docker run --rm -dt -e DATABASE_URL=postgres://user:pass@host/dbname -p 9000:9000 pramsey/pg_featureserv:<VERSION>
The configuration file is automatically read from the following locations, if it exists:
/etc/pg_featureserv.toml
./config/pg_featureserv.toml
/config/pg_featureserv.toml
To specify a configuration file directly use the --config
commandline parameter.
In this case configuration files in other locations are ignored.
To set the database connection the environment variable DATABASE_URL
can be used with a
Postgres connection string:
export DATABASE_URL="host=localhost user=postgres"
Other parameters in the configuration file can be over-ridden in the environment.
Prepend the upper-cased parameter name with PGFS_section_
to set the value.
For example, to change the HTTP port and service title:
export PGFS_SERVER_HTTPPORT=8889
export PGFS_METADATA_TITLE="My PGFS"
For SSL support, a server private key and an authority certificate are needed.
For testing purposes you can generate a self-signed key/cert pair using openssl
:
openssl req -nodes -new -x509 -keyout server.key -out server.crt
These are set in the configuration file:
TlsServerCertificateFile = "/path/server.crt"
TlsServerPrivateKeyFile = "/path/server.key"
cd $GOPATH/src/github.com/CrunchyData/pg_featureserv
./pg_featureserv
http:/localhost:9000/home.html
-?
- show command usage--config file.toml
- specify configuration file to use--debug
- set logging level to TRACE (can also be set in config file)--devel
- run in development mode (e.g. HTML templates reloaded every query)--test
- run in test mode, with an internal catalog of tables and data--version
- display the version numberTo get detailed information about service operation
run with the --debug
commandline parameter.
./pg_featureserv --debug
Debugging can also be enabled via the configuration file (Server.Debug=true
),
or in the environment:
export PGFS_SERVER_DEBUG=true
Features are identified by a collection name and feature id pair.
The default response is in JSON/GeoJSON format.
Append .html
to the request path to see the UI page for the resource.
In a web browser, to request a JSON response append .json
to the path (which overrides the browser Accept
header).
The example requests assume that the service is running locally and configured to listen on port 9000.
See API Summary for a summary of the web service API.