From 76213a446638452e2d44af5b47a34b67b34d1bed Mon Sep 17 00:00:00 2001 From: Theo Satabin Date: Mon, 10 Feb 2025 15:40:12 +0100 Subject: [PATCH] Correction multiples sur le WMTS et WMS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [Fixed] * `WMTS` : * correction du calcul des tuiles limites pour le TMS natif lorsque les limites de la couche sont surchargées par une bbox * pour que la couche apparaisse dans les capacités Inspire, le format de la tuile doit être le PNG * dans les capacités inspire, `inspire_vs:ExtendedCapabilities` doit être dans `OperationsMetadata` * `WMS` * Ajout des schémas XML dans les réponses en erreur --- CHANGELOG.md | 11 +++++++++++ src/Inspire.cpp | 5 +++++ src/configurations/Layer.cpp | 28 +++++++++++++-------------- src/services/wms/Exception.cpp | 2 +- src/services/wmts/getcapabilities.cpp | 2 +- 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c47c16..c1080f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## 6.1.3 + +### [Fixed] + +* `WMTS` : + * correction du calcul des tuiles limites pour le TMS natif lorsque les limites de la couche sont surchargées par une bbox + * pour que la couche apparaisse dans les capacités Inspire, le format de la tuile doit être le PNG + * dans les capacités inspire, `inspire_vs:ExtendedCapabilities` doit être dans `OperationsMetadata` +* `WMS` + * Ajout des schémas XML dans les réponses en erreur + ## 6.1.2 ### [Added] diff --git a/src/Inspire.cpp b/src/Inspire.cpp index 6ee3145..2e62abc 100644 --- a/src/Inspire.cpp +++ b/src/Inspire.cpp @@ -147,6 +147,11 @@ bool is_inspire_wmts ( Layer* layer ) { return false; } + if (Rok4Format::to_mime_type ( layer->get_pyramid()->get_format() ) != "image/png") { + BOOST_LOG_TRIVIAL(debug) << "Non conforme INSPIRE WMTS (" << layer->get_id() << ") : données pas en png" ; + return false; + } + // Pour être inspire, le style par défaut doit avoir le bon identifiant if (layer->get_default_style()->get_identifier() != "inspire_common:DEFAULT") { BOOST_LOG_TRIVIAL(debug) << "Non conforme INSPIRE WMTS (" << layer->get_id() << ") : style par défaut != inspire_common:DEFAULT" ; diff --git a/src/configurations/Layer.cpp b/src/configurations/Layer.cpp index 8ac33ce..7c3cfd7 100644 --- a/src/configurations/Layer.cpp +++ b/src/configurations/Layer.cpp @@ -217,20 +217,6 @@ bool Layer::parse(json11::Json& doc, ServicesConfiguration* services) { return false; } - // On a forcément le TMS natif de la donnée pour le WMTS - TileMatrixSetInfos* infos_tms_natif = new TileMatrixSetInfos(pyramid->get_tms()); - - infos_tms_natif->set_bottom_top(pyramid->get_lowest_level()->get_id(), pyramid->get_highest_level()->get_id()); - - for (Level* l : pyramid->get_ordered_levels(false)) { - infos_tms_natif->limits.push_back(l->get_tile_limits()); - } - - available_tilematrixsets.push_back(infos_tms_natif); - - // On a forcément le CRS natif de la donnée pour le WMS - available_crss.push_back ( pyramid->get_tms()->get_crs() ); - /********************** Gestion de l'étendue des données */ if (doc["bbox"].is_object()) { @@ -255,6 +241,20 @@ bool Layer::parse(json11::Json& doc, ServicesConfiguration* services) { calculate_bboxes(); } + // On a forcément le TMS natif de la donnée pour le WMTS + TileMatrixSetInfos* infos_tms_natif = new TileMatrixSetInfos(pyramid->get_tms()); + + infos_tms_natif->set_bottom_top(pyramid->get_lowest_level()->get_id(), pyramid->get_highest_level()->get_id()); + + for (Level* l : pyramid->get_ordered_levels(false)) { + infos_tms_natif->limits.push_back(l->get_tile_limits()); + } + + available_tilematrixsets.push_back(infos_tms_natif); + + // On a forcément le CRS natif de la donnée pour le WMS + available_crss.push_back ( pyramid->get_tms()->get_crs() ); + // Services autorisés a priori if (doc["wms"].is_object() && doc["wms"]["enabled"].is_bool()) { diff --git a/src/services/wms/Exception.cpp b/src/services/wms/Exception.cpp index 6570cc8..5d18f2d 100644 --- a/src/services/wms/Exception.cpp +++ b/src/services/wms/Exception.cpp @@ -45,7 +45,7 @@ #include "services/wms/Exception.h" -std::string WmsException::xml_template = "%s"; +std::string WmsException::xml_template = "%s"; MessageDataStream* WmsException::get_error_message(std::string reason, std::string code, int status) { return new MessageDataStream(str(boost::format(xml_template) % code % reason), "text/xml", status); diff --git a/src/services/wmts/getcapabilities.cpp b/src/services/wmts/getcapabilities.cpp index bd15f1f..2cb50dc 100644 --- a/src/services/wmts/getcapabilities.cpp +++ b/src/services/wmts/getcapabilities.cpp @@ -134,7 +134,7 @@ DataStream* WmtsService::get_capabilities ( Request* req, Rok4Server* serv ) { op_getfeatureinfo.add("ows:DCP.ows:HTTP.ows:Get.ows:Constraint.ows:AllowedValues.ows:Value", "KVP"); if (req->is_inspire(default_inspire)) { - ptree& inspire_extension = root.add("inspire_vs:ExtendedCapabilities", ""); + ptree& inspire_extension = root.add("ows:OperationsMetadata.inspire_vs:ExtendedCapabilities", ""); if (metadata) { inspire_extension.add("inspire_common:MetadataUrl.inspire_common:URL", metadata->get_href());