feat: generate an OGC API – Moving Features OpenAPI projection#13
Merged
Conversation
8b7a86a to
efe2400
Compare
This was referenced May 20, 2026
fc1c600 to
185b201
Compare
efe2400 to
3f3d9f0
Compare
185b201 to
675e4fa
Compare
Add generator/movfeat.py and generate_movfeat_openapi.py as a second
OpenAPI projection alongside the generic RPC-style projection in
generator/openapi.py.
The Moving Features projection maps the subset of MEOS functions that
have an OGC API – Moving Features (OGC 22-003r3) analogue onto the
OGC-defined REST resource hierarchy under
/collections/{collectionId}/items/{featureId}/…. Each route carries
x-meos-{function,decode,encode} extensions so a downstream OGC server
can dispatch each call to the right MEOS function without re-deriving
the mapping. Routes whose MEOS function is absent from the exposable
catalog are reported and skipped rather than emitted unbacked.
Reuses the _value_schema / _type_schema / _enum_schema helpers from
generator/openapi.py so component schemas and the MeosError response
are byte-identical across the two projections.
3f3d9f0 to
7236be1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the OGC API – Moving Features (OGC 22-003r3) projection alongside the generic RPC-style
generate_openapi.py, so the catalog has two complementary OpenAPI views:generator/openapi.py): every stateless-exposable MEOS function as onePOST /{function}RPC operation — faithful to MEOS's value-algebra shape but not OGC-aligned.x-meos-{function,decode,encode}extensions on every route so a downstream OGC server can dispatch to MEOS without re-deriving the mapping.Files
generator/movfeat.pybuild_movfeat_openapi(catalog); reuses_value_schema/_type_schema/_enum_schemafromgenerator/openapi.pyso component schemas are byte-identical across the two projections.generate_movfeat_openapi.pypython generate_movfeat_openapi.py [in.json] [out.json]reads the enriched catalog and writesoutput/meos-movfeat-openapi.json.Routes covered
/collections/collections/{collectionId}/collections/{collectionId}/items/collections/{collectionId}/itemstemporal_from_mfjson/collections/{collectionId}/items/{featureId}temporal_as_mfjson/collections/{collectionId}/items/{featureId}/collections/{collectionId}/items/{featureId}/tgsequencetemporal_as_mfjson/.../tgsequence/velocitytpoint_speed/.../tgsequence/accelerationtemporal_derivative/.../tgsequence/distancetpoint_cumulative_length/.../tgsequence/azimuthtpoint_azimuth/.../tproperty/{propertyName}temporal_as_mfjson/.../tproperty/{propertyName}Routes are wired to their MEOS function when that function has a stateless-exposable backing in the enriched catalog. A route whose MEOS function is not exposable (e.g.
temporal_from_mfjson, which returns the abstractTemporaland so carries no concrete wire encoding) is recorded under the output document'sinfo.x-meos-coverage.missing_in_catalograther than emitted unbacked, so consumers see exactly what is not yet backed.