-
Notifications
You must be signed in to change notification settings - Fork 19
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
Is tileMatrixSetURI really optional? #47
Comments
This may be related to the idea that a "Core" supports 8 known TMS. Special conformance classes could require that the TMS be available from the OGC name authority, or could reference one or more specific TMS. |
Thanks for weighing in, @jerstlouis. I think we're thinking the same thing. Just to be clear, it seems to me that even if the core says that 8 known tile matrix sets can be used, those links should still include the But it isn't clear to me whether the intention is that |
@tschaub Yes it could. It could be clarified that for the 'OGC Registered TMS', the identifier can be used together with a pre-determined OGC naming authority path. And I argue against picking any 1 or 8 specific TMS as being "Core". A Profile can specify which one(s) is/are required. We don't want to be biased towards WebMercator, yet we do not want to put an overwhelming requirement on either servers or clients to have to support all 8 of an arbitrary selection of TMS. |
Since a service can use arbitrary tile-matrix-set identifiers, and since a tileMatrixSetURI can't be guaranteed to be a resolvable URL, I think there's a requirement to add a wellKnownScaleSet field to tileMatrixSetLink-entry. Even if the tileMatrixSetURI was guaranteed to be a resolvable URL, we certainly don't want to require the poor clients to fetch and parse the full tile-matrix-set definitions just to figure out what it is. How frustrating would the given example be to a client application? { Adding an optional wellKnownScaleSet field to tileMatrixSetLink-entry provides a reasonable solution to this. { Now the client everything it needs to know without having to hunt down and parse |
@pomakis Multiple TileMatrixSets could use the same WellKnownScaleSet, but differ in how the tiles are cut or on the pixel size of the tiles... The tileMatrixSet is intended to be the mechanism by which to recognize it, if it is one of the OGC NA registry then perhaps it should be clarified that those identifiers are reserved? Or perhaps the tileMatrixSetURI should always point to the OGC NA registry, rather than the one on the local server? |
This is a Tiles API issue, not 2D-TMS. The "tileMatrixSetURI" vs. "identifier" is a mess right now. It's really not clear how it works. |
@pomakis I noticed at https://test.cubewerx.com/cubewerx/cubeserv/demo/ogcapi/Daraa/collections/Daraa_DTED/tiles?f=json you have: {"tileMatrixSet":"smerc","tileMatrixSetURI":"https://test.cubewerx.com/cubewerx/cubeserv/demo/ogcapi/Daraa/tileMatrixSets/smerc?f=json" } Which would not be compatible with the core capability of pre-defined TMSes, and would force a client to parse the full TMS (if it supports that capability). |
@jerstlouis, are you suggesting that it should instead report "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad" as the tileMatrixSetURI? That makes a certain amount of sense, since it allows the client to (potentially) know all of the details of the tile-matrix set without having to fetch and parse its definition. I still think it'd be useful to indicate the well-known tile-matrix-set here as well. This information can be implied by the tileMatrixSetURI, but if and only if it's one of the standard tileMatrixSetURIs and the client has hardcoded knowledge of the standard tile-matrix sets. And of course, it's still necessary to provide the client with a link to the actual definition of the tile-matrix set. In light of all this, perhaps (for now at least), I'll adjust our output to report:
Then we can discuss what the "OGC API - Tiles" standard should say. |
@pomakis well in #43 (comment) I am suggesting a number of changes.
That is something that the Tiles core conformance classes requires. Tiles clients that only support Core are not expected to support the more advanced TMS description conformance class which enables a custom TMS that needs to be parsed. Now with the latest conformance classes direction, we are talking about a TileSet resource, which is always for a single TileMatrixSet, so the And in that suggestion, I was suggesting to fuse
which is really all you need. This could also be:
And that would be a resolvable URL, which returns you the definition in either case, acting both as the URI and the definition. And it would have to end with An alternative (Option 2) would be to have:
where Or simply (Option 3):
with similar rules. About the |
@jerstlouis, are you suggesting that if a server has a tile-matrix set that's compliant to "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad" (OGC 17-083r2, Annex D.1), it cannot use a server-specific ID (such as "smerc") for it, and instead must use the the ID "WebMercatorQuad"? This will be quite problematic when trying to add OGC API endpoints to existing WMTS services, which always use server-specific tile-matrix-set IDs (even for the common case of WebMercatorQuad tile-matrix sets). I'm not saying that this is a show-stopper for your suggestion, just that the incompatibility with existing services shouldn't be taken lightly. Either way, I don't think options 1 and 2 are feasible. If I understand your suggestions, they would require the client to parse the short-identifier string (e.g., "WebMercatorQuad" out of a URL such as "http://test.cubewerx.com/cubewerx/cubeserv/demo/ogcapi/Daraa/tileMatrixSets/WebMercatorQuad?f=json". The short identifier needs to be explicitly reported (as in option 3). But I'm worried about the equivalance drawn between the short identifier (e.g., "WebMercatorQuad") and the full-URI identifier (e.g., "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad"). The reason why we use full URIs as identifiers nowadays is to allow for different authorities, etc. E.g., "http://www.opengis.net/def/tilematrixset/OGC/1.0/WebMercatorQuad" can be a separate and distinct tile-matrix set from "http://www.cubewerx.com/def/tilematrixset/CubeWerx/9.4/WebMercatorQuad". (Otherwise, what's the point of even using full URIs as identifiers?) But we want short identifiers so that our endpoint paths don't get crazy. E.g., we want
not
Which is why server-specific short identifiers are nice. So I propose an Option 4:
where "tileMatrixSetId" is required (and is to be used to resolve the {tileMatrixSetId} variable in the tile-URL templates, etc.), and where "definition" is required unless "tileMatrixSetUri" is present and is one of the standard URIs in OGC 17-083r2 Annex D. Yes, both "tileMatrixSetId" and "tileMatrixSetURI" are identifiers, but the former is a local short identifier, and the latter is a global well-known identifier. I also propose an optional "wellKnownScaleSet" property. It's very useful for a client to be able to accept or reject a tile-matrix set for use based on this property (without having to infer it from the tileMatrixSetUri or to parse the definition for it). (As an aside, I just noticed that the well-known-scale-set URIs have changed between WMS 1.0 (OGC 07-057r7) and OGC 17-083r2. In the former it's "urn:ogc:def:wkss:OGC:1.0:GoogleMapsCompatible", while in the latter it's http://www.opengis.net/def/wkss/OGC/1.0/GoogleMapsCompatible". What a pain! So much for a simple string comparison!) |
@pomakis About server-specific "tileMatrixSetId" (e.g. However, you would be free to use
which could even directly link an existing WMTS server in that link, so I think this addresses your concerns (and make Options 1,2 and 3 valid, which comes down to URI vs. definition vs. identifier preferences). |
@jerstlouis, how could one be free to use an unadvertised local tile-matrix-set identifier in the tile-URL templates? The templates have a {tileMatrixSetId} varaible that needs to be resolved by the client. E.g., https://test.cubewerx.com/cubewerx/cubeserv/demo/ogcapi/Daraa/collections/Daraa_DTED/map/Night/tiles?f=json returns:
|
@pomakis just drop the In issue 43 we agreed to no longer require the |
@jerstlouis, Hmmm, okay, I think I understand. The way I think best is to dive into an implementation and see where it takes me, so that's what I'll do. Either way, I don't think option 1 is viable, because the URI isn't guaranteed to be resolvable, and you can't expect the client to sniff short-identifier names (such as WebMercatorQuad) out of the URI to try to determine whether it's one of the pre-defined ones. If I manage to convince myself that a short local identifier isn't required, then the minimum you really need to report is the tileMatrixSetURI (for pre-defined tile-matrix sets):
or the tileMatrixSetDefinition (for custom tile-matrix sets);
I.e., there's no need to report a tileMatrixSetDefinition for pre-defined tile-matrix sets, and there's no need to report a tileMatrixSetURI for custom tile-matrix sets. |
@jerstlouis, re: not requiring the /collections/{collectionId}//tiles resource, I think it would be a shame
and this link for maps:
where this "maps" resource provides the set of available styles, and a number of
I also like the idea of (in general, where it makes sense) having every element in a path be some sort of defined resource in its own right. So if we're defining /collections/{collectionId}/tiles/{tileMatrixSetId}/... endpoints, it'd be nice to have /collections/{collectionId}/tiles be a metadata endpoint that describes everything under it. Why stuff all of this into /collections/{collectionId} and leave /collections/{collectionId}/tiles undefined? Wouldn't it be nice to have am independent "tiles" resource to refer to and pass around? The resource at the URL "https://test.cubewerx.com/cubewerx/cubeserv/demo/ogcapi/Daraa/collections/Daraa_DTED/map/Night/tiles?f=json" is all a client application needs in order to know how to generate a navigatable map of the Daraa_DTED collection in the Night style. |
@pomakis About the tileMatrixSet URI / identifier that this issue is about...
To recapitulate:
Your last suggestion is closest to Option 2, but for these reasons my preference still lies with Option 3. Regarding the |
My 2 cents:
|
@mcechini I agree wholeheartedly with everything you said (except that there are now more than 8 standard TileMatrixSets resolvable by identifier!). However I believe there has been a OGC Naming Authority decision that all URIs be http. Especially if those are not guaranted to resolve as soon as they are accepted, I disagree strongly with that decision. I really don't understand why you would specify a URI prefixed by http and a long domain name and path which is not guaranteed to be resolvable, it is as you point out super confusing and cumbersome and waste precious bytes. |
@mcechini The URIs of all Tile Matrix Set (TMS) definitions in the 2DTMS standard will have been configured to resolve by the time OGC API - Tiles is approved. |
Thanks for the clarification Gobe. So then we have...
My thoughts are now thusly... I vote to require the Identifier and Definition. Identifier is clearly needed. Regarding the definition, servers using official 2DTMS TMSs already have the URL needed and if they are using their own TMS... they should have that definition available somewhere. I vote to not require the URI. This feels like "extra credit" for a server to provide as information for the TMS. Best practice, especially if using an official 2DTMS TMS, would be to provide the official URI in this field. That would let a client easily identify known TMS' and avoid parsing the definition unnecessarily. To @pomakis's point above, I think we want to give a server the freedom to use their own Identifier, even if they are using an official 2DTMS TMS. |
@mcechini I disagree strongly with not requiring the official URI and allowing custom identifiers, and I also disagree with requiring the full definition (unless that full definition also happens to be the official or custom http URI, resolvable to a TMS definition). This prevents quickly recognizing the identifier before fully parsing the lengthy TMS description, and prevent interoperability with clients not implementing the parsing of the definition (i.e. all clients implementing only the Tiles - Part 1: Core). As discussed with @pomakis , being forced to use official identifier does not prevent the actual link to contain another TMS identifier, as it does not need to be a variable. |
Understood, and I see that conversation more clearly now from above... I don't have heartburn with enforcing specific identifier values then. As for requiring the full definition... I do think that that "that full definition [should] be the official or custom http URI, resolvable to a TMS definition)." From our perspective, a majority of our usage will not utilize an official 2DTMS TMS... so the URI field has little utility. We can choose a value to go there if needed, but the identifier (for purposes of referencing in tile requests) and definition (for purposes of the client understanding the TMS) are the salient details we need to provide. |
Until we get this sorted out, our test implementation identifies a tile-matrix set with the following fields:
I really like having a short local identifier, although I concede that we could probably get away without it as long as we avoid any possibility of introducing a "tileMatrixSetId" query or URL-template parameter. Having an optional global identifier (URI) is a must. If the client can quickly identify it as one of the standard 2DTMS tile-matrix sets, it can avoid the costly task of parsing the definition. (In fact, I suspect the average quick-and-dirty client application will be incapable of parsing definitions.) But under no circumstance should we require (or even suggest) that the client parse anything out of this URI. It should be fully opaque (but presumably resolvable). The definition URL should be required. If it's not one of the standard 2DTMS tile-matrix sets, parsing this definition is the only way a client will be able to properly interoperate. In theory, if we require the global identifier URI to resolve to the definition of the tile-matrix set, a separate definition URL would be redundant. But I don't have a lot of a trust in third-party (OGC in this case) URLs being guaranteed resolvable at all times, so a definition URL pointing to a local definition of the tile-matrix set would be much more reliable. Finally, we've found a lot of value in advertising the wellKnownScaleSet (if any) of a tile-matrix set. It's a quick way for a client to weed through the options for one that at least matches the scale set it's looking for (typically, in our experience, GoogleMapsCompatible). |
@pomakis I would have liked a short global identifier instead of the http URI, but seems like everything is moving towards long http URI and that's the way it is, so I will have to live with that. Having both A I don't see any harm with a server adding a Clients understanding the 2DTMS description part will likely only do so for custom TMS, and would likely be ready to handle any scale (and could always do a scale value comparison). |
Jerome can you clarify what you mean in your last sentence above. I believe the rest of your comment is saying that both
As for whether |
@mcechini Well the essence of my comment is that So I was hoping we could do away entirely without the core specifications defining But if the server wants to define a local So, again to summarize, I don't think the specs should mention at all a |
The more "but if a server wants to..." sort of things we allow, the less useful the specification would seem to be in helping both servers and clients define a clear set of rules for interaction. I personally don't think requiring |
@mcechini The thing is that in the tilesets list and tileset resource, nowhere should That is because we explicitly decided that a tileset could be anywhere and follow any path structure at all, e.g. to be compatible with tiles published elsewhere or by other tools. So there is no need at all for the specifications to specify a e.g. my tileset tiles template URL might be |
You lost me on that one. But maybe the fundamental issue I'm having with this is that I can't seem to find anywhere in the documentation where there is an example of how a client would interact with a server implementing the spec. For example...
I see a number of folks standing up servers... but am I missing where there is information on how a client actually would trace through these URLs? This is the "what use cases are we trying to support" user scenario-driven approach. |
@mcechini
If you implement Part 2: Custom TMS, and the selected tile matrix set is not recognized as a built-in one:
I am a few minutes away from updating our server to match all this, a concrete example will help! |
@mcechini Example implementation of the latest suggestions at https://maps.ecere.com/ogcapi |
Thanks, however while an "example implementation" is helpful, an "example workflow / interaction patterns" is equally as helpful IMO. If the latter is convoluted, then we're not building a good spec. |
@mcechini I provided that that in the previous comment. Are you finding that convoluted? Note that this allows starting from any resource between step 1-5, which also correspond to different conformance classes:
and some tools already work with 4 (e.g. TileJSON format and Mapbox libraries) and 5 (e.g. OpenLayers). |
@jerstlouis Not at all saying what you have is convoluted. Just that as someone who's coming into this a little disjointed with the rest of you all... it's difficult to figure out what the user scenarios are for actual use of the API vs compliance checking with a spec. What I'm probably saying is that the main page of the github project would benefit from with some real-world usage patterns that are updated along with the specification schema/document. There are links to sample implementations and swagger hub content, which are indeed helpful, BUT they don't necessarily help me know/evaluate the intended order of operations for a client. |
Yep, this is important for all new OGC APIs ---> 'knowing/evaluating the intended order of operations for a client' Best Regards, |
I'm not sure if this issue is resolved as a part of the discussion we had for issue #43. Either way, perhaps someone (I nominate @jerstlouis) could restate the current proposed change that could resolve this issue. |
I propose that the following two properties be specified:
A server could optionally add more properties if it wishes so, but I note that the known scale sets are already specified as part of the 2DTMS definition. |
Before I comment... I want to be clarify whether this applies to the |
@mcechini I would say both. |
I'm ok with the proposal. The part that I keep spinning over is this... In our current WMTS implementation, we define a number of TileMatrixSets that are all a subset of the larger (what is now) Option 1 ... Continue defining a separate TMS for each set of WebMercatorQuad zoom levels. The Option 2 ... Utilize a single TileMatrixSet. Similarly, Thoughts? |
@mcechini Option 2. Even if different tile matrices are available for different resolution, this is definitely the same Tile Matrix Set and The way to identify which tileMatrices are available is through the |
The downside I see to Option 2 for clients is that they must parse every Regardless, I don't think this changes the proposal in this ticket. |
@mcechini The clients must still parse the individual tilsets to retrieve the links to tiles, unless assumptions are made about the tiles paths. But the canonical recommended approach for tiles access would be to fully parse the individual tilesets. Clients would also only potentially do all this for layers being visualized. Also potentially multi-layer vector tiles tilesets might be one way to reduce the number of layers (or at least offering the option of both multi-layer and individual layers). |
wellKnownScaleSet is part of the tileMatrixSet definition. About TileMatrixSetURI / Def ... we decided this: 2020-10-29
The issue will be closed when opengeospatial/2D-Tile-Matrix-Set#11 is closed. |
We checked this is applied in the TMS 2D so we close it in members meeeting 2020-12-09 |
Now I'm more confused than when I opened this ticket 😕 |
@tschaub See https://github.com/opengeospatial/2D-Tile-Matrix-Set/blob/master/standard/clause_7_tilematrixset2d_model.adoc
d At least one of the TileMatrixSet, TileMatrixSetURI or TileMatrixSetDefinition is mandatory and shall be provided. (The |
The current schema for a
tileMatrixSetLink-entry
looks like this:Is it intentional that the
tileMatrixSetURI
property is optional? If so, it isn't clear to me how a client is supposed to generate thetileMatrix
for a tile request.The text was updated successfully, but these errors were encountered: