OGC API - Features
An OGC Features API publishing feature data using an OpenAPI web service.
Features Implementation status
OGC API - Features | Version | Implementation status |
---|---|---|
Part 1: Core | 1.0.0 | Passes compliance tests |
Part 2: Coordinate Systems by Reference | 1.0.0 | Passes compliance tests |
Part 3: Filtering | Draft | Draft implemented (mind, the draft does not include a filtering language) |
Part 4: Create, Replace, Update and Delete | Draft | Not implemented (volunteers/sponsoring wanted) |
Common Query Language (CQL2) | Draft | Implements an earlier draft for for both text and JSON encodings. To be updated. |
Part n: Query by IDs | Proposal | Proposal implemented, but syntax and semantic is subject to change in a future release. Thus said, usage should be carefully considered. |
Installing the GeoServer OGC API Features module
-
Download the OGC API nightly GeoServer community module from geoserver-2.24-SNAPSHOT-ogcapi-features-plugin.zip.
Warning
Verify that the version number in the filename corresponds to the version of GeoServer you are running (for example geoserver-2.24.2-ogcapi-features-plugin.zip above).
-
Extract the contents of the archive into the
WEB-INF/lib
directory of the GeoServer installation. -
On restart the services are listed at http://localhost:8080/geoserver
Use of OGC API - Features service
The OGC API Features Service is accessed via the FEATURES version 1.0 link on the home page.
Capabilities
The service is self described using:
-
html
: A collection of web pages, with links for navigation between content (and that can be indexed by search engines for discoverability).OGC API Features service
-
application/json
: A collection ofjson
documents, with reference between each document for programmatic access by web developers.{ "title": "GeoServer Web Feature Service", "description": "This is the reference implementation of WFS 1.0.0 and WFS 1.1.0, supports all WFS operations including Transaction.", "links": [ { "href": "http://localhost:8080/geoserver/ogc/features/?f=application%2Fx-yaml", "rel": "alternate", "type": "application/x-yaml", "title": "This document as application/x-yaml" }, { "href": "http://localhost:8080/geoserver/ogc/features/?f=application%2Fjson", "rel": "self", "type": "application/json", "title": "This document" }, { "href": "http://localhost:8080/geoserver/ogc/features/?f=text%2Fhtml", "rel": "alternate", "type": "text/html", "title": "This document as text/html" }
-
application/x-yaml
: A collection ofyaml
documents, with references between each document for programmatic access.title: GeoServer Web Feature Service description: This is the reference implementation of WFS 1.0.0 and WFS 1.1.0, supports all WFS operations including Transaction. links: - href: http://localhost:8080/geoserver/ogc/features/?f=application%2Fx-yaml rel: self type: application/x-yaml title: This document - href: http://localhost:8080/geoserver/ogc/features/?f=application%2Fjson rel: alternate type: application/json title: This document as application/json - href: http://localhost:8080/geoserver/ogc/features/?f=text%2Fhtml rel: alternate type: text/html title: This document as text/html
The service title and description are provided by the existing Web Feature Service (WFS) settings.
Open API
For programmatic access an OpenAPI description of the service is provided, that may be browsed as documentation, or used to generate a client to access the web services.
OGC API Features OpenAPI Document
Collections
The collection of feature types being published by the service.
Each collection entry is described using the layer details of title, description, geographic extent.
Data can be browsed as web pages, or downloaded in a range of formats such as GeoJSON
and GML
documents.
Collection sf:roads download formats
Conformance
Lists the operations this service can perform, each "conformance class" documents supported functionality.
OGC API Features Conformance
Contact information
Advertises contact information for the service.
Defined by defined in by Contact Information.
Configuration of OGC API - Features module
The service does not require any additional configuration to use. The service is configured using:
-
The existing Web Feature Service (WFS) settings to define title, abstract, and output formats.
This is why the service page is titled
GeoServer Web Feature Service
by default. -
Built-in templates used for html generation
-
Extra links can be added on a per-service or per-collection basis as indicated in Configuring the GeoServer OGC API module.
HTML Templates
To override an OGC API Features template:
-
Create a directory
ogc/features
in the location you wish to override:GEOSERVER_DATA_DIR/templates/ogc/features/v1
GEOSERVER_DATA_DIR/workspace/{workspace}/ogc/features/v1
GEOSERVER_DATA_DIR/workspace/{workspace}/{datastore}/ogc/features/v1
GEOSERVER_DATA_DIR/workspace/{workspace}/{datastore}/{featuretype}/ogc/features/v1
-
Create a file in this location, using the GeoServer 2.24.2 examples below:
- ogc/features/v1/collection.ftl
- ogc/features/v1/collection_include.ftl
- ogc/features/v1/collections.ftl
- ogc/features/v1/queryables.ftl
- ogc/features/v1/functions.ftl
The above built-in examples are for GeoServer 2.24.2, please check for any changes when upgrading GeoServer.
The templates for listing feature content are shared between OGC API services. To override a template used to list features:
-
Use the directory in the location you wish to override:
GEOSERVER_DATA_DIR/templates
GEOSERVER_DATA_DIR/workspace/{workspace}
GEOSERVER_DATA_DIR/workspace/{workspace}/{datastore}
GEOSERVER_DATA_DIR/workspace/{workspace}/{datastore}/{featuretype}
- ogc/features/landingPage.ftl
-
Create a file in this location, using the GeoServer 2.24.2 examples below:
- ogc/features/getfeature-complex-content.ftl
- ogc/features/getfeature-content.ftl
- ogc/features/getfeature-empty.ftl
- ogc/features/getfeature-footer.ftl
- ogc/features/getfeature-header.ftl
The above built-in examples are for GeoServer 2.24.2, please check for any changes when upgrading GeoServer.
As an example customize how collections are listed:
-
The file
ogc/features/collections.ftl
lists published collection:<#global pagecrumbs="<li class='breadcrumb-item'><a href='"+serviceLink("")+"'>Home</a></li><li class='breadcrumb-item active'>Collections</li>"> <#include "common-header.ftl"> <h1>GeoServer Feature Collections</h1> <p class="my-4"> This document lists all the collections available in the Features service.<br/> </p> <div class="row"> <#list model.collections as collection> <div class="col-xs-12 col-md-6 col-lg-4 pb-4"> <div class="card h-100"> <div class="card-header"> <h2><a href="${serviceLink("collections/${collection.id}")}">${collection.id}</a></h2> </div> <#include "collection_include.ftl"> </div> </div> </#list> </div> <#include "common-footer.ftl">
-
Save file to
GEOSERVER_DATA_DIR/workspace/templates/ogc/collections.ftl
, and rewrite as:- <#include "common-header.ftl">
-
OGC API Feature Collections
List of collections published.
See also: <#list model.getLinksExcept(null, "text/html") as link> \${link.type}<#if link_has_next>, .
<#list model.collections as collection> <h2><a href="\${serviceLink("collections/\${collection.id}")}">\${collection.id}</a></h2> <#include "collection_include.ftl"> <!--#list-->
<#include "common-footer.ftl">
-
Many templates are constructed using
#include
, for examplecollection.ftl
above uses<#include "common-header.ftl">
located next tocollections.ftl
.Presently each family of templates manages its own
common-header.ftl
(as shown in the difference betweenogc/features
service templates, and getfeature templates above). -
A restart is required, as templates are cached.
Template collections.ftl override applied
-
Language codes are appended for internationalization. For French create the file
GEOSERVER_DATA_DIR/workspace/{workspace}/ogc/collections_fr.ftl
and translate contents:- <#include "common-header.ftl">
-
OGC API Feature Service
Liste des collections publiées.
Voir également: <#list model.getLinksExcept(null, "text/html") as link> \${link.type}<#if link_has_next>, .
<#list model.collections as collection> <h2><a href="\${serviceLink("collections/\${collection.id}")}">\${collection.id}</a></h2> <#include "collection_include.ftl"> <!--#list-->
<#include "common-footer.ftl">
-
For details on how to write templates see Freemarker Templates tutorial.