Skip to main content
Version: 0.13.0

OGC API - Features

Lucenia serves its indices as OGC API - Features collections, so a GIS client can open the cluster directly.

Vector tiles draw a map. This serves the features behind it: a click can open a record, QGIS and ArcGIS Pro can connect to the cluster, and OpenLayers or GDAL/OGR can read it without a translating service in between.

The mapping is direct:

ConceptIn Lucenia
A collectionAn index
A featureA document
A bounding boxThe same shape query the tile endpoint issues
A geometryAlready normalized to GeoJSON by the fields API

Endpoints

GET /_ogc                                                landing page
GET /_ogc/conformance what is implemented
GET /_ogc/collections every collection
GET /_ogc/collections/{collection_id} one collection
GET /_ogc/collections/{collection_id}/items features in a collection
GET /_ogc/collections/{collection_id}/items/{feature_id} one feature

A client is handed the landing page and discovers everything else from its links, so /_ogc is the only URL you need to give it.

note

The service lives under /_ogc rather than the server root because the root already answers with cluster information. The specification does not require otherwise — it only requires that a landing page exist and that the rest be reachable from its links.

Query parameters

On /items:

ParameterDefaultDescription
bboxnoneminLon,minLat,maxLon,maxLat. Applied as a query rather than a filter, so the index narrows before anything is read.
limit10Features per page. Maximum 10000.
offset0Where the page starts.
fjsonOutput format.

Connecting a client

Point the client at the landing page:

https://your-cluster:9200/_ogc

In QGIS that is Layer → Add Layer → Add WFS / OGC API - Features Layer, with the landing page as the URL. GDAL/OGR reads the same address:

ogrinfo -ro "OAPIF:https://your-cluster:9200/_ogc"

Authentication is the cluster's own — the endpoints inherit index-read authorization like any other request, so a caller sees exactly the indices they are allowed to read.

What is claimed, and what is not

Conformance is declared honestly, because a class claimed but not implemented produces a client that fails later and further away, where nobody can debug it.

ClassClaimedWhy
coreYesThe resource model: landing, conformance, collections, items, single item.
geojsonYesFeatures are GeoJSON.
oas30NoNo OpenAPI document is served.
htmlNoResponses are JSON, not browsable HTML.
crsNoEverything is CRS84, the default. There is no CRS negotiation to advertise.

Why not WFS 2.0

Classic WFS is a capabilities document, feature types in XML Schema, queries in the FES filter language and GML on the wire. It is a large specification whose partial implementation fails in real clients in ways that are very hard to diagnose.

OGC API - Features is the same idea over plain HTTP and JSON, and it is what the current generation of clients speaks.

Feature counts

A count is reported when it is exact. Where the search only counted up to its own limit, the response says "at least this many" rather than presenting a bounded count as a total.