From b7e35f83bdcd932e221a77c8a5e206e587a26623 Mon Sep 17 00:00:00 2001 From: Theo Satabin Date: Mon, 17 Feb 2025 17:58:12 +0100 Subject: [PATCH 1/3] Correction de l'indentation du changelog --- CHANGELOG.md | 64 ++++++++++++++++++++++++---------------------------- 1 file changed, 29 insertions(+), 35 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e379ad6..314382a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,27 +3,27 @@ ### [Fixed] * `WMS` - * Correction de l'attribution dans les capacités : contenu du logo et ordre des balises - * Correction du géoréférencement dans les réponses GeoTIFF + * Correction de l'attribution dans les capacités : contenu du logo et ordre des balises + * Correction du géoréférencement dans les réponses GeoTIFF * `TMS` - * Correction de l'attribution dans les capacités : contenu du logo - * Ajout du header `Content-Encoding: defalte` pour les tuiles bil compressées + * Correction de l'attribution dans les capacités : contenu du logo + * Ajout du header `Content-Encoding: defalte` pour les tuiles bil compressées * `WMTS` - * Correction des balises de métadonnées dans les capacités - * Ajout du header `Content-Encoding: defalte` pour les tuiles bil compressées + * Correction des balises de métadonnées dans les capacités + * Ajout du header `Content-Encoding: defalte` pour les tuiles bil compressées ## 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` + * 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 + * Ajout des schémas XML dans les réponses en erreur ## 6.1.2 @@ -98,24 +98,24 @@ ### [Changed] * WMTS : - * On ajoute à la liste des TMS au niveau du getcapabilities les TMS "de base" en entier + * On ajoute à la liste des TMS au niveau du getcapabilities les TMS "de base" en entier ## 5.4.1 ### [Added] * WMS : - * Ajout de la configuration du titre et nom de la couche racine dans le getCapabilities + * Ajout de la configuration du titre et nom de la couche racine dans le getCapabilities ### [Changed] * WMS : - * Déplacement des fonctions d'écriture d'une bbox du getCapabilities dans UtilsXML - * Ajout de bbox au niveau de la couche racine dans le getCapabilities - * L'attribution d'une couche est mise après les éventuelles métadonnées + * Déplacement des fonctions d'écriture d'une bbox du getCapabilities dans UtilsXML + * Ajout de bbox au niveau de la couche racine dans le getCapabilities + * L'attribution d'une couche est mise après les éventuelles métadonnées * WMTS : - * On ne liste plus les couches de tuiles vectorielles dans le getCapabilities - * On exporte dans le getcapabilities un TMS différent pour chaque couple haut / bas présent dans les couches + * On ne liste plus les couches de tuiles vectorielles dans le getCapabilities + * On exporte dans le getcapabilities un TMS différent pour chaque couple haut / bas présent dans les couches ## 5.3.0 @@ -162,25 +162,19 @@ Implémentation partielle de l'API OGC Tiles - Part 1 [v1.0.0 final release](htt ### [Added] * Liste de nouvelles routes pour obtenir le **GetCapabilities**: - * /tiles/collections - avec les paramètres facultatifs : - * bbox - * limit + * /tiles/collections avec les paramètres facultatifs : + * bbox + * limit * /tiles/collections/{layer}/map/tiles * /tiles/collections/{layer}/tiles * /tiles/tilematrixsets * /tiles/tilematrixsets/{tms} - * Liste des nouvelles routes pour obtenir le **GetTile** : - - * Raster - * /tiles/map/tiles/{tms}/{level}/{row}/{col} - avec le paramètre obligatoire : collections={layer} - * /tiles/styles/{style}/map/tiles/{tms}/{level}/{row}/{col} - avec le paramètre obligatoire : collections={layer} - * /tiles/collections/{layer}/styles/{style}/map/tiles/{tms}/{level}/{row}/{col} - * /tiles/collections/{layer}/map/tiles/{tms}/{level}/{row}/{col} - + * Raster + * /tiles/map/tiles/{tms}/{level}/{row}/{col} avec le paramètre obligatoire : collections={layer} + * /tiles/styles/{style}/map/tiles/{tms}/{level}/{row}/{col} avec le paramètre obligatoire : collections={layer} + * /tiles/collections/{layer}/styles/{style}/map/tiles/{tms}/{level}/{row}/{col} + * /tiles/collections/{layer}/map/tiles/{tms}/{level}/{row}/{col} * Vecteur * /tiles/tiles/{tms}/{level}/{row}/{col}?collections={layer} * /tiles/collections/{layer}/tiles/{tms}/{level}/{row}/{col} @@ -227,10 +221,10 @@ Les configurations des couches, styles et tile matrix sets peuvent être des obj ### [Added] * Implémentation de routes de santé - * `/healthcheck` : informations générales, version, date de lancement, statut général - * `/healthcheck/info` : informations détaillées, listes de couches, styles et tile matrix sets - * `/healthcheck/depends` : informations sur les stockages, nombres de contextes par type - * `/healthcheck/threads` : informations sur les threads, statut, requêtes prises en charge, dernier temps de réponse + * `/healthcheck` : informations générales, version, date de lancement, statut général + * `/healthcheck/info` : informations détaillées, listes de couches, styles et tile matrix sets + * `/healthcheck/depends` : informations sur les stockages, nombres de contextes par type + * `/healthcheck/threads` : informations sur les threads, statut, requêtes prises en charge, dernier temps de réponse ### [Fixed] From 8c02de3289b0f60fd7d90d1fddc8849bd605533b Mon Sep 17 00:00:00 2001 From: Theo Satabin Date: Thu, 20 Feb 2025 11:19:27 +0100 Subject: [PATCH 2/3] =?UTF-8?q?Correction=20d'une=20inconformit=C3=A9=20In?= =?UTF-8?q?spire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### [Fixed] * `WMTS` * pour que la couche apparaisse dans les capacités Inspire, le style par défaut doit avoir l'identifiant `.Default` * `WMS` * pour que la couche apparaisse dans les capacités Inspire, le style par défaut doit avoir l'identifiant `.Default` --- CHANGELOG.md | 13 +++++++++++-- src/Inspire.cpp | 8 ++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 314382a..9bba734 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## 6.1.5 + +### [Fixed] + +* `WMTS` + * pour que la couche apparaisse dans les capacités Inspire, le style par défaut doit avoir l'identifiant `.Default` +* `WMS` + * pour que la couche apparaisse dans les capacités Inspire, le style par défaut doit avoir l'identifiant `.Default` + ## 6.1.4 ### [Fixed] @@ -8,11 +17,11 @@ * `TMS` * Correction de l'attribution dans les capacités : contenu du logo - * Ajout du header `Content-Encoding: defalte` pour les tuiles bil compressées + * Ajout du header `Content-Encoding: deflate` pour les tuiles bil compressées * `WMTS` * Correction des balises de métadonnées dans les capacités - * Ajout du header `Content-Encoding: defalte` pour les tuiles bil compressées + * Ajout du header `Content-Encoding: deflate` pour les tuiles bil compressées ## 6.1.3 diff --git a/src/Inspire.cpp b/src/Inspire.cpp index 2e62abc..b48c00a 100644 --- a/src/Inspire.cpp +++ b/src/Inspire.cpp @@ -153,8 +153,8 @@ bool is_inspire_wmts ( Layer* layer ) { } // 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" ; + if (layer->get_default_style()->get_identifier() != layer->get_id() + ":Default") { + BOOST_LOG_TRIVIAL(debug) << "Non conforme INSPIRE WMTS (" << layer->get_id() << ") : style par défaut != " + layer->get_id() + ":Default" ; return false; } @@ -174,8 +174,8 @@ bool is_inspire_wms ( Layer* layer ) { } // 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 WMS (" << layer->get_id() << ") : style par défaut != inspire_common:DEFAULT" ; + if (layer->get_default_style()->get_identifier() != layer->get_id() + ":Default") { + BOOST_LOG_TRIVIAL(debug) << "Non conforme INSPIRE WMS (" << layer->get_id() << ") : style par défaut != " + layer->get_id() + ":Default" ; return false; } From 4c3d4a781c1f109b2eafd3a846cf243bf3807fab Mon Sep 17 00:00:00 2001 From: Theo Satabin Date: Tue, 8 Apr 2025 17:06:58 +0200 Subject: [PATCH 3/3] =?UTF-8?q?Am=C3=A9lioration=20du=20WMS=20et=20TMS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Nettoyage et bascule des styles et TMS lors d'une extinction ou redémarrage du serveur * `WMS` * on vérifie que la donnée a bien 3 canaux pour répondre une tuile en JPEG * Dans le cas d'une couche inconnu, le code est `LayerNotDefined` * Écriture de la valeur de nodata dans les header geotiff * `TMS` * Dans la description des couches, les niveaux (`TileSet`) doivent être définis dans la balise `TileSets` et non `TileMap` et `Origin` est le coin en bas à gauche et non en haut à gauche --- CHANGELOG.md | 6 +++++ README.md | 4 ++-- docs/images/rok4-server-loading.png | Bin 0 -> 34578 bytes docs/images/rok4server-layer-pyramid.png | Bin 82508 -> 0 bytes src/configurations/Layer.cpp | 4 ++-- src/main.cpp | 15 ++++++++---- src/services/tiles/gettile.cpp | 20 +++++++++------- src/services/wms/getfeatureinfo.cpp | 4 ++-- src/services/wms/getmap.cpp | 28 +++++++++++++---------- src/services/wmts/gettile.cpp | 20 +++++++++------- 10 files changed, 63 insertions(+), 38 deletions(-) create mode 100644 docs/images/rok4-server-loading.png delete mode 100644 docs/images/rok4server-layer-pyramid.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 9bba734..68e2cc8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,16 @@ ### [Fixed] +* Nettoyage et bascule des styles et TMS lors d'une extinction ou redémarrage du serveur * `WMTS` * pour que la couche apparaisse dans les capacités Inspire, le style par défaut doit avoir l'identifiant `.Default` * `WMS` * pour que la couche apparaisse dans les capacités Inspire, le style par défaut doit avoir l'identifiant `.Default` + * on vérifie que la donnée a bien 3 canaux pour répondre une tuile en JPEG + * Dans le cas d'une couche inconnu, le code est `LayerNotDefined` + * Écriture de la valeur de nodata dans les header geotiff +* `TMS` + * Dans la description des couches, les niveaux (`TileSet`) doivent être définis dans la balise `TileSets` et non `TileMap` et `Origin` est le coin en bas à gauche et non en haut à gauche ## 6.1.4 diff --git a/README.md b/README.md index b0c3836..eda8ec0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Serveur de diffusion WMS, WMTS et TMS -![ROK4 Logo](https://rok4.github.io/assets/images/rok4.png) +![ROK4 Logo](https://rok4.github.io/assets/images/rok4-256.png) Le serveur implémente les standards ouverts de l’Open Geospatial Consortium (OGC) WMS 1.3.0, WMTS 1.0.0 et OGC API Tiles 1.0.0, ainsi que le TMS (Tile Map Service). Il vise deux objectifs principaux : @@ -224,7 +224,7 @@ Lorsqu'une couche est chargée, les descripteurs de pyramide, de TMS et de style Pour les TMS et les styles, ils sont cherchés dans les répertoires (fichier ou objet) renseignés dans le `server.json`, avec comme nom de fichier objet `.json`. Un annuaire est tenu à jour pour ne charger qu'une seule fois le style ou le TMS. -![Chargement du serveur](./docs/images/rok4server-layer-pyramid.png) +![Chargement du serveur](./docs/images/rok4-server-loading.png) ### Personnalisation des points d'accès aux services diff --git a/docs/images/rok4-server-loading.png b/docs/images/rok4-server-loading.png new file mode 100644 index 0000000000000000000000000000000000000000..10c29c89781611d4de2b910c3f8811ecfcd6c21e GIT binary patch literal 34578 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 literal 0 HcmV?d00001 diff --git a/docs/images/rok4server-layer-pyramid.png b/docs/images/rok4server-layer-pyramid.png deleted file mode 100644 index cde7a42eae879db872767efcb4463e3994efa1a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82508 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

HAkxMeu7hiz85ZE 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 root.add("Origin..x", tm->get_x0() ); - root.add("Origin..y", tm->get_y0() ); + root.add("Origin..y", tm->get_y0() - tm->get_matrix_height() * tm->get_tile_height() * tm->get_res() ); root.add("TileFormat..width", tm->get_tile_width() ); root.add("TileFormat..height", tm->get_tile_height() ); root.add("TileFormat..mime-type", Rok4Format::to_mime_type ( pyramid->get_format() ) ); root.add("TileFormat..extension", Rok4Format::to_extension ( pyramid->get_format() ) ); - ptree& tilesets_node = root.add("TileMap", ""); + ptree& tilesets_node = root.add("TileSets", ""); tilesets_node.add(".profile", "none"); int order = 0; diff --git a/src/main.cpp b/src/main.cpp index 6119029..d700b54 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -240,6 +240,10 @@ void reload_configuration ( int signum ) { reload = true; std::cout<< "Rechargement du serveur rok4" << "["<< getpid() <<"]" <set_fcgi_socket ( sock ); } @@ -379,16 +381,21 @@ int main ( int argc, char** argv ) { rok4server_instance->run(signal_pending); - TmsBook::send_to_trash(); - StyleBook::send_to_trash(); if ( reload ) { // Rechargement du serveur BOOST_LOG_TRIVIAL(info) << "Configuration reload" ; sock = rok4server_instance->get_fcgi_socket(); + // Lors du rechargement on a mis à la poubelle tous les anciens TMS et styles + // On peut maintenant les supprimer + TmsBook::empty_trash(); + StyleBook::empty_trash(); } else { // Extinction du serveur BOOST_LOG_TRIVIAL(info) << "Server shutdown" ; + // On va vouloir supprimer tous les styles et TMS, on les envoie donc à la poubelle + TmsBook::send_to_trash(); + StyleBook::send_to_trash(); } delete rok4server_instance; diff --git a/src/services/tiles/gettile.cpp b/src/services/tiles/gettile.cpp index be9bd40..31e42ec 100644 --- a/src/services/tiles/gettile.cpp +++ b/src/services/tiles/gettile.cpp @@ -232,25 +232,29 @@ DataStream* TilesService::get_tile ( Request* req, Rok4Server* serv, bool is_map else if (format == "tiff") { bool is_geotiff = true; + // Dans le cas d'un geotiff, on renseigne la valeur de nodata + // on ne peut mettre qu'une valeur, ce sera celle du premier canal + int nodata = *(layer->get_pyramid()->get_nodata_value()); + // La donnée ne peut être retournée que dans le format de la pyramide source utilisée switch (layer->get_pyramid()->get_format()) { case Rok4Format::TIFF_RAW_UINT8: - return new TiffRawEncoder(image, is_geotiff); + return new TiffRawEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_LZW_UINT8: - return new TiffLZWEncoder(image, is_geotiff); + return new TiffLZWEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_ZIP_UINT8: - return new TiffDeflateEncoder(image, is_geotiff); + return new TiffDeflateEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_PKB_UINT8: - return new TiffPackBitsEncoder(image, is_geotiff); + return new TiffPackBitsEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_RAW_FLOAT32: - return new TiffRawEncoder(image, is_geotiff); + return new TiffRawEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_LZW_FLOAT32: - return new TiffLZWEncoder(image, is_geotiff); + return new TiffLZWEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_ZIP_FLOAT32: - return new TiffDeflateEncoder(image, is_geotiff); + return new TiffDeflateEncoder(image, is_geotiff, nodata); case Rok4Format::TIFF_PKB_FLOAT32: - return new TiffPackBitsEncoder(image, is_geotiff); + return new TiffPackBitsEncoder(image, is_geotiff, nodata); default: delete image; throw TilesException::get_error_message("ResourceNotFound", "Not data found", 404); diff --git a/src/services/wms/getfeatureinfo.cpp b/src/services/wms/getfeatureinfo.cpp index 05083a5..54124b9 100644 --- a/src/services/wms/getfeatureinfo.cpp +++ b/src/services/wms/getfeatureinfo.cpp @@ -69,12 +69,12 @@ DataStream* WmsService::get_feature_info ( Request* req, Rok4Server* serv ) { if (contain_chars(vector_layers.at(i), "<>")) { BOOST_LOG_TRIVIAL(warning) << "Forbidden char detected in WMS layer: " << vector_layers.at(i); - throw WmsException::get_error_message("Layer unknown", "InvalidParameterValue", 400); + throw WmsException::get_error_message("Layer unknown", "LayerNotDefined", 400); } Layer* layer = serv->get_server_configuration()->get_layer(vector_layers.at(i)); if (layer == NULL || ! layer->is_wms_enabled()) { - throw WmsException::get_error_message("Layer " + vector_layers.at(i) + " unknown", "InvalidParameterValue", 400); + throw WmsException::get_error_message("Layer " + vector_layers.at(i) + " unknown", "LayerNotDefined", 400); } layers.push_back ( layer ); diff --git a/src/services/wms/getmap.cpp b/src/services/wms/getmap.cpp index c8b81b8..8d2e27f 100644 --- a/src/services/wms/getmap.cpp +++ b/src/services/wms/getmap.cpp @@ -82,12 +82,12 @@ DataStream* WmsService::get_map ( Request* req, Rok4Server* serv ) { if (contain_chars(vector_layers.at(i), "<>")) { BOOST_LOG_TRIVIAL(warning) << "Forbidden char detected in WMS layer: " << vector_layers.at(i); - throw WmsException::get_error_message("Layer unknown", "InvalidParameterValue", 400); + throw WmsException::get_error_message("Layer unknown", "LayerNotDefined", 400); } Layer* layer = serv->get_server_configuration()->get_layer(vector_layers.at(i)); if (layer == NULL || ! layer->is_wms_enabled()) { - throw WmsException::get_error_message("Layer " + vector_layers.at(i) + " unknown", "InvalidParameterValue", 400); + throw WmsException::get_error_message("Layer " + vector_layers.at(i) + " unknown", "LayerNotDefined", 400); } layers.push_back ( layer ); @@ -253,6 +253,7 @@ DataStream* WmsService::get_map ( Request* req, Rok4Server* serv ) { // Le format des canaux sera identifié à partir des données en entrée, en prenant en compte le style SampleFormat::eSampleFormat sample_format = SampleFormat::UNKNOWN; + int nodata; // Le nombre de canaux dans l'image finale sera égale au nombre maximum dans les données en entrée (en prenant en compte le style) int bands = 0; @@ -271,8 +272,11 @@ DataStream* WmsService::get_map ( Request* req, Rok4Server* serv ) { throw WmsException::get_error_message("All layers (with their style) have to own the same sample format (int or float)", "InvalidParameterValue", 400); } else { sample_format = style->get_sample_format(layers.at(i)->get_pyramid()->get_sample_format()); - } + // Dans le cas d'un geotiff, on renseigne la valeur de nodata + // on ne peut mettre qu'une valeur, ce sera celle du premier canal du nodata de la première couche (après style) + nodata = *(style->get_output_nodata_value(layers.at(i)->get_pyramid()->get_nodata_value())); + } Image* image = layers.at(i)->get_pyramid()->getbbox(max_tile_x, max_tile_y, bbox, width, height, crs, crs_equals, layers.at(i)->get_resampling(), dpi); @@ -317,37 +321,37 @@ DataStream* WmsService::get_map ( Request* req, Rok4Server* serv ) { if (sample_format == SampleFormat::UINT8) { if (opt.compare("lzw") == 0) { - return new TiffLZWEncoder(final_image, is_geotiff); + return new TiffLZWEncoder(final_image, is_geotiff, nodata); } if (opt.compare("deflate") == 0) { - return new TiffDeflateEncoder(final_image, is_geotiff); + return new TiffDeflateEncoder(final_image, is_geotiff, nodata); } if (opt.compare("raw") == 0 || opt == "") { - return new TiffRawEncoder(final_image, is_geotiff); + return new TiffRawEncoder(final_image, is_geotiff, nodata); } if (opt.compare("packbits") == 0) { - return new TiffPackBitsEncoder(final_image, is_geotiff); + return new TiffPackBitsEncoder(final_image, is_geotiff, nodata); } } else if (sample_format == SampleFormat::FLOAT32) { if (opt.compare("lzw") == 0) { - return new TiffLZWEncoder(final_image, is_geotiff); + return new TiffLZWEncoder(final_image, is_geotiff, nodata); } if (opt.compare("deflate") == 0) { - return new TiffDeflateEncoder(final_image, is_geotiff); + return new TiffDeflateEncoder(final_image, is_geotiff, nodata); } if (opt.compare("raw") == 0 || opt == "") { - return new TiffRawEncoder(final_image, is_geotiff); + return new TiffRawEncoder(final_image, is_geotiff, nodata); } if (opt.compare("packbits") == 0) { - return new TiffPackBitsEncoder(final_image, is_geotiff); + return new TiffPackBitsEncoder(final_image, is_geotiff, nodata); } } delete final_image; throw WmsException::get_error_message("Used data and expected format are not consistent", "InvalidParameterValue", 400); } - else if (format == "image/jpeg" && sample_format == SampleFormat::UINT8) { + else if (format == "image/jpeg" && sample_format == SampleFormat::UINT8 && bands == 3) { std::map::iterator it = format_options.find("quality"); int quality = 75; diff --git a/src/services/wmts/gettile.cpp b/src/services/wmts/gettile.cpp index 6bba29b..4a24f17 100644 --- a/src/services/wmts/gettile.cpp +++ b/src/services/wmts/gettile.cpp @@ -203,6 +203,10 @@ DataStream* WmtsService::get_tile(Request* req, Rok4Server* serv) { else if (format == "image/tiff" || format == "image/geotiff") { bool is_geotiff = (format == "image/geotiff"); + // Dans le cas d'un geotiff, on renseigne la valeur de nodata + // on ne peut mettre qu'une valeur, ce sera celle du premier canal + int nodata = *(layer->get_pyramid()->get_nodata_value()); + std::map::iterator it = format_options.find("compression"); std::string opt = ""; if (it != format_options.end()) { @@ -217,16 +221,16 @@ DataStream* WmtsService::get_tile(Request* req, Rok4Server* serv) { case Rok4Format::TIFF_ZIP_UINT8: case Rok4Format::TIFF_PKB_UINT8: if (opt.compare("lzw") == 0) { - return new TiffLZWEncoder(image, is_geotiff); + return new TiffLZWEncoder(image, is_geotiff, nodata); } if (opt.compare("deflate") == 0) { - return new TiffDeflateEncoder(image, is_geotiff); + return new TiffDeflateEncoder(image, is_geotiff, nodata); } if (opt.compare("raw") == 0 || opt == "") { - return new TiffRawEncoder(image, is_geotiff); + return new TiffRawEncoder(image, is_geotiff, nodata); } if (opt.compare("packbits") == 0) { - return new TiffPackBitsEncoder(image, is_geotiff); + return new TiffPackBitsEncoder(image, is_geotiff, nodata); } break; @@ -236,16 +240,16 @@ DataStream* WmtsService::get_tile(Request* req, Rok4Server* serv) { case Rok4Format::TIFF_ZIP_FLOAT32: case Rok4Format::TIFF_PKB_FLOAT32: if (opt.compare("lzw") == 0) { - return new TiffLZWEncoder(image, is_geotiff); + return new TiffLZWEncoder(image, is_geotiff, nodata); } if (opt.compare("deflate") == 0) { - return new TiffDeflateEncoder(image, is_geotiff); + return new TiffDeflateEncoder(image, is_geotiff, nodata); } if (opt.compare("raw") == 0 || opt == "") { - return new TiffRawEncoder(image, is_geotiff); + return new TiffRawEncoder(image, is_geotiff, nodata); } if (opt.compare("packbits") == 0) { - return new TiffPackBitsEncoder(image, is_geotiff); + return new TiffPackBitsEncoder(image, is_geotiff, nodata); } break;