3

In the past I have been entering keywords in "Edit Layer" section of GeoServer. These keywords have shown up on a per layer basis in the "KeywordList" section of a WMS GetCapabilities response, which has allowed me to create a layer tree for my map application. I have recently moved over to using WMTS GetCapabilities requests, however these responses do not show the "KeywordList" section. Is there a way to get this metadata to show up in WMTS GetCapabilities responses?

I have seen there is a "INSPIRE extension" for GeoServer which says it can expand WMTS metadata requests, however after installing it successfully, I have been unable to get the "KeywordList" section to show up. Does anyone have any suggestions?

  • The INSPIRE extension adds service level metadata, so I don't think that it will help with layer metadata. – nmtoken May 31 '18 at 13:15
  • It is schema valid to have keywords in the Layer description (after the Abstract), in a WMTS Capabilities response document, but I agree I cannot see any way (either through the GUI or by editing the XML configuration files) of adding them – nmtoken May 31 '18 at 14:56
  • You might want to consider raising an enhancement request on the GeoServer issues log – nmtoken Jun 1 '18 at 13:41
  • Good idea, I will do that. – Trashmonk Jun 1 '18 at 13:42
0

So I have not been able to find a way to add the "KeywordList" to WMTS GetCapabilities responses, however I have found a simple workaround. I do both a WMS and WMTS GetCapabilities request for each layer and then use the "KeywordList" from the WMS request to inform the WMTS layers as seen below:

for (let layer of capabilities.Contents.Layer) {

    // find the matching WMS layer
    const wmsLayer = wmsCapabilities.find(wmsLayer => wmsLayer.Name === layer.Identifier);
    const wmsKeywords = wmsLayer.KeywordList;
    const wmtsOptions = ol.source.WMTS.optionsFromCapabilities(
    capabilities, { layer: layer.Identifier, matrixSet: 'EPSG:27700' }
                        );

    layer.KeywordList = wmsKeywords;

    const olLayer = this.createWMTSLayer(geoserverBaseUrl, layer, wmtsOptions);
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.