-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Spatial extent / Temporal interval one vs. multiple array issues, and an interoperable approach to extensibility #91
Comments
Jerome, Important issue. Has there been any further discussion or resolution? Best Regards, |
There is some lineage on why collections in OGC API Features has an array of bounding boxes here: BTW: the example (one '[') in the spatial extend in https://github.com/opengeospatial/oapi_common/blob/April-2020-Updates/collections/openapi/schemas/extent.json is not consistent with the schema (that requires "[[". Thiso needs to be corrected. BTW2: CRS says that spatial extend is WGS84 but extensions can change that. This is dangerous for clients that suport only core that can assume WGS84. A client implementing core has no way to "predict" is an extension that does not know it existance can change this, In practice a client should look for the crs param and check if it says WGS84 intenpendently of such extension exist or nor. In any case no extension should change the default value in the core. |
This discussion deals with: Jerome is proposeing this to replace "B" "If a spatiotemporal resource is made up of multiple elements each occupying their own extent, it is the decision of the server implementation whether to describe it using a single or multiple extents" "C" "Clients accessing the extent SHALL support multiple extents" In addition there is a suggestion of removing "https://github.com/opengeospatial/oapi_common/blob/master/collections/recommendations/collections/REC_rc-md-extent-single.adoc" A client that in practice supports only one BBOX, could create a "big" one from the multiple ones provided by the API anyway. The ISO 19115-1 mandates also 0..*. Be aware that a motion about this will be proposed on the July 18th call. -----Separation----- The issues about CRSs in BBOX will be discussed only in #43 |
FYI: STAC also had this "only one bbox / interval, but extensions can change this" behavior, originally inherited from OGC API Features. We recently decided to remove this restriction and just allow multiple bboxes / intervals by default. See radiantearth/stac-spec#856 |
I do not know, if it is intentional, but the proposed change would change B to be about something entirely different. The current B is about the fact that some data may have multiple spatial properties. For example, a radio tower feature may have a point location and a transmission surface. The point of B is to allow that APIs decide, if they compute the extent from the point locations, the transmission surfaces or both (for Features typically depending on how the bbox parameter works in the API). Note also that the proposed C is not valid as it has a different standardization target (client) than the current requirements classes (Web API). I.e., it would have to be defined in a separate requirement in a separate requirements class for clients. Or, more likely, it should be informative text that is guidance to client developers. |
As discussed in original description, a proper extensible way to do this would have been one core extent property always the overall union BBOX, and a separate optional multi-extent property. Today we are suggesting going this way to avoid breaking compatibility with Features as standardized. This should be a lesson learned for future core / extensions design. Perhaps Common standard can include a narrative guidance about this for designing core & extensions for OGC API standards? |
@cportele TBH I think we were quite confused today reviewing B. It seems that B might apply specifically to Features and not Common. Agreed about informative text for client developers. |
Sure, Common could also drop this and those that need it will add it again, like Features. Nothing planned for clients as far as I am aware of. To develop conformance tests, there first would have to be requirements classes to develop tests against. |
@cportele Thanks. Right, dropping that B and Features could add it again. And that new proposed "B" requirement replacing it (which as you point it is entirely different) is a more general statement about the server being able to list one or more extents. |
On the proposed B, if people find it important I have no objection to adding the option, but I am surprised about the push for it. For comparison, it is quite normal to always use a MultiPolygon even if there is only one polygon, and nobody seems to worry about the additional array/nesting. |
@cportele maybe you are misunderstanding what I intended to say in B (maybe I didn't word it clearly) As for MultiPolygon, in fact in our implementation for GeoJSON we will use Polygon for features with a single polygon, and MultiPolygon for features with multiple polygons :) The main issue was with the implication that a client may only support a single extent. |
2020-09-15 OGC API Cross Cutting Issues session during OGC Member Meeting See the related resolution at #164 (comment) |
discussion at the October 26 SWG meeting: Proposal
Note: scope is filtering collections. Note: This approach would be inconsistent with Features, but the SWG feels that clients should not be required to calculate the union of extents. Note: also applies to temporal extent. Alternate 1: Alternative 2: To be discussed further at the November 2 meeting. |
If the group decides to follow the proposal, at least use different property names in or for the extent object so that an API can implement, for example, OGC API Features and OGC API Tiles in a single API. |
@cportele As discussed in the SWG call, the idea was that, if accepted, a revision to Features would adapt to this proposal. What you're suggesting is Alternative 3: make Perhaps that would be easier for the next Features revision to follow this approach? |
I'd prefer non-breaking changes (I guess alternative 3) due to the fact that any revision is major work also in inheriting specifications (e.g. OAFeat 1.0, STAC, openEO, ...) and the implementing software. |
@jerstlouis - Changing this in Features would be a breaking change. This clearly is not a good reason for a breaking change - if there ever is one. And yes, adding another optional property like |
@m-mohr a potential drawback is having to duplicate the same thing twice: the old way with @cportele I think the SWG felt that this was an important enough issue that it may be worth the breaking change at this still early point in the history of OGC API - Features history, although I personally feel it's important that Features have a say in this... |
@cportele Because this applies to time intervals as well, I wonder if |
@jerstlouis - The Features API SWG charter basically declares breaking changes as out-of-scope. Breaking changes in the OWS standards have caused a lot of frustration and problems and we do not want to repeat that. I hope that all OGC API standards will avoid breaking changes for the foreseeable future. Good point about using envelope also for the temporal intervals etc, I think that could work as a general pattern. |
@cportele @pvretano In Coverages, all dimensions are treated the same. So in my opinion, defining this would greatly improving interoperability. |
@jerstlouis bbox, datetime, and extent work well together for the geospatial-temporal query scenario. We shouldn't mess with success. |
Well that is precisely what I hoped those additional properties would provide! Since that is the purpose of the I am completely baffled as to why additional dimensions would not be handled the same way within From the perspective of the OGC API - Coverages SWG, we have been trying to specify the multi-dimensional envelope according to Common guidance which would also be compatible with Features (opengeospatial/ogcapi-coverages#100) and align with EDR (opengeospatial/ogcapi-coverages#96 opengeospatial/ogcapi-environmental-data-retrieval#308) for a while, but it seems difficult to really settle this. |
@jerstlouis The additional properties are added to the extent object. The extent object is part of the collection object. You select collection objects using the subset query parameter. To build the subset query parameter you have to know the names of the axis. To learn the names of the axis you look in the extent object. You get the extent object by accessing the collection object. Which means that to access a collection object you must first access the collection object. So no, the additional properties are not sufficient. |
@jerstlouis The question is what is the best way to standardize this capability?
The subset module has already been created. A placeholder has been created for a subset (probably not the right name) conformance class in Part 2. What we need to agree on is how to implement the envelope in a way that does no harm. Then I can write the envelope module, integrate subset and envelope together in a conformance class, write the ATS, and we are done. |
The original intent of the It was not intended for filtering collections being returned from Regarding filtering collections using |
It would be mandatory in EDR and Coverages.
I understand the extent as being the envelope for the 3-4 dimensions defined by
The name of those additional keys inside |
@jerstlouis But it would not be mandatory for many other standards. If it is not mandatory for all, then it cannot be mandatory for Common. However, I am comfortable adding it as a conformance class to Part 2. |
@cmheazel Well, the If only the extent schema is updated to clarify how additional dimensions are defined, then even if additional dimensions are not included, implementations still conform (the specification of how additional dimensions are defined has no impact in that case). It could also potentially be an additional conformance class extent-additional-dimensions also in Common - Part 2 that adds that more precise schema for those additional dimensions, which if you declare conformance to then you are using this standardized approach to additional dimensions, as opposed to do whatever you feel like there. If they do not declare conformance to extent-additional-dimensions, then implementations are not required to include an Maybe that could also address @cportele and @pvretano 's concerns? I understand the desire to support any particular community of interest, but I personally feel that at this still very abstract level of defining a multi-dimensional envelope, it is much more useful for clients to have a well-defined data structure which can be used for any of these communities of interest in a generic manner. This is already proven to address the needs of Maps, Tiles, EDR and Coverages. Keeping in mind that more specific communities of interest could still extend the data structure by adding members in addition to the generic I am encouraged and optimistic that we are finally getting somewhere with this! :) |
Give me a schema you all agree on and I'll give you a conformance class. |
The current proposal is here as a specialization of the Only implementations / specifications declaring conformance to this extent-additional-dimensions conformance class would need to adhere to this stricter schema for the Coverages, EDR, Maps, Tiles, DGGS (and others) could make it a requirement for collections supporting those access mechanisms (which only applies if the collection has dimensions other than spatial or temporal). @Schpidi @chris-little @joanma747 @geofizzydrink It could be an optional conformance class for Features implementation. @cportele @pvretano Also note the addition of the |
|
@cportele Many thanks for the detailed response on this.
I, for one, am certain :) In my opinion, leaving this completely undefined makes it at worst useless for everybody, and at best non-interoperable with everybody else. If a particular community requires something more, they could always:
Happy with that name.
Right, I will make the same argument there :)
Correct. Unless we need to add more textual requirement outside of the schema repeating what the descriptions inside say, or clarifying anything about the
I assume this is just the description? I will look at the latest Features schema and update it accordingly. Definitely the intent is to reflect that clarification (this issue originally! I guess we're still somewhat on topic :)).
Good catch, thank you! I guess this was too much copied from
You're right, this is not set up properly. The intent was that this would be included directly in the collection object, and this schema would serve to define both the
There is one potential reason for it to be part of the extent-uniform-additional-dimensions conformance class. The abbreviations in CRS definitions are not normative, so the
So |
Just two responses:
I am not saying that is has to be left "completely undefined". I am just saying that the requirements class should not be stated as the only way to ever specify additional dimensions. If an API declares conformance with this requirements class, clients know that additional dimensions follow this pattern, if not then not.
I do not see how how this would be relevant for interpreting the extent. First of all, the order of the dimensions is irrelevant in the extent (beside the axis order in the multi-dimensional |
Right, but that's precisely why we would have this Although you raise a good point: with additional dimensions, which CRS is the overall CRS of the extent? The storageCRS of the collection? The API's default CRS? Coverages likes to think in terms of an overall compound CRS, rather than separate CRSes for the different dimensions. Most importantly, clients need to know to which dimension of the overall CRS each dimension in the extent maps to, especially if the crs identified for the additional dimensions are that compound CRS, or a pre-defined CRS with multiple dimensions beyond spatial and temporal. On this note, we discussed just last week that the list of CRS would make sense as an alternative to a compound CRS URI, but that list still needs to be ordered, so those different dimensions need to be assigned an order to be mapped to the overall compound CRS (regardless of how it is specified).
That's a good point. With To support different outputs and subset CRS, I was also wondering if we would need different domainsets for each CRS supported. Similar situation here potentially... But I thought we would first resolve the simple case :) |
I do not think there needs to be or should be such a concept. For Features there is currently no concept of an "overall CRS" in general, because a) only the spatial CRS can vary and b) all current feature encodings represent the dimensions in separate properties. For Coverages this is probably different and there will be a single CRS, which may be a compound CRS. But that is a general concept and not an extent concept, as I understand it.
It is important to use the same CRS for each extent dimension that is used as the default CRS when querying the data for that dimension. This allows that clients that do not understand CRSs can query the data based on the extent information. For Features that means spatial extent in WGS84 and temporal extent in the Gregorian calendar. |
One thing I realized, in the collection
I am trying to get a full understanding of that sentence, particularly in terms of what it would mean for a Coverages and a Common CRS extension. Features allows to specify a different My understanding so far is that for Coverages - Part 1: Core, the storage CRS, subset CRS and output CRS would all be the same (but not necessarily CRS84), while the CRS extension would extend that capability. But that still needs to be clarified. @Schpidi |
@jerstlouis Part 2 is limited to CRSs that can be referenced by a URI. So, on-the-fly or ad hoc compound CRSs are out of scope. If, however, your compound CRS has a URI that can be referenced (e.g. http://www.opengis.net/def/crs/EPSG/0/5555) then that is fine. One other subtlety is that Part 2 does not impose any limitation on the reference URI. So the following URI is perfectly legal: https://www.pvretano.com/Projects/tb17/crs/5555 as far as Part 2 is concerned. |
Yes, that is the current design for CRS84 and CRS84h are currently the only options for the spatial extent CRS for a collection with item type 'feature'. The spatial extent |
A first draft is in the Multi-Dimension-Extend branch. Additions include extent-md and subset modules (in api_modules), as well as the Multi-Dimension Collection Requirements Class in clause_md-collection.adoc. |
- This addresses the last 3 bullet points of opengeospatial/ogcapi-common#91 (comment) - extent.yaml, coverageInfo.yaml, envelope.yaml modified
@cportele The latest Coverages envelope.yaml schema should address the last 3 bullet points you raised in Doing so I noticed that these lines are confusing in the multi-part extent clarification in Features: https://github.com/opengeospatial/ogcapi-features/blob/master/core/openapi/schemas/extent.yaml#L104
I rephrased that in Coverages as:
The "each" is misleading, as what we want to say is that the client only needs to access the single first item of either the bbox or the interval, which itself is an array. The current phrasing may confuse readers that the client still needs to look at "each" array inside the (interval) array of arrays. Unless it's just me misinterpreting this? Note that I also rephrased open -> unbounded or half-bounded as discussed in #196, as an "open interval" has a different meaning in mathematics. @cmheazel This should give us a multi-dimension (uniform additional dimensions) extent conformance class, by copying over this |
The Uniform Additional Dimensions (UAD) extent is described in the extent-uad api module (here). We can use this as a baseline for further refinement of the concept. |
Recently, the new description of spatial and temporal extents was migrated from Features to Common.
I notice what I think are serious interoperability issues with this new version.
As the same applies to both intervals and bounding boxes, I will only mention bounding boxes here, but I believe it is all equally valid for temporal intervals.
First, the description itself is not clear about "one or more" or boxes.
The new services I have seen so far (e.g. Interactive Instruments, and GeoSolutions's GeoServer which followed the pattern) specifies an array of array, even when there is a single bounding box.
Is that the only valid syntax? Or is a single array of numbers also valid?
If both are valid (which we assume was the case), it cause a lot of variability which might be tricky to parse (definitely was the case for our parser), as you have to expect two very different kind of objects (an array of array, or an array of real numbers).
Either way, it should be clarified what is meant.
Secondly, it says that only one bounding box is supported in Core, while multiple bounding boxes are an extension.
The problem with this, and with this approach for extensibility, is that it is not interoperable at all.
If a service supports multiple bounding boxes, but a client does not (and say ignore all but the first bounding box), the client will think the server only provide a small subset of the data it really does provide.
The proper interoperable solution, would be to keep it simple and always keep this spatial extent to be a single bounding box.
In the case of a server supporting more complex extents (e.g. multiple bounding boxes) this would be the 'union' of all these bounding boxes.
Then, another property is used to describe the sub-bounding boxes making up this overall extent.
The simple client not implementing multiple bounding boxes will have no problem with this (it will ignore the unrecognized property) and will still be aware of the entire dataset, albeit it will notice there are some holes missing and some requests will come back with no data.
But here we would still have interoperable service & client, through the Core specification!!!
Additionally, there are alternate approach to bounding boxes (e.g. non axis-aligned requiring 4 points, polygons, point-radius, point spheres for 3D...), which could constitute different extensions (as in 3D, as Carl pointed out in relation to this discussion).
There may be some fear of breakage in addressing this, but the sooner the better and this is too critical an interoperability problem to leave it unresolved.
The text was updated successfully, but these errors were encountered: