diff --git a/include/shared_data.h b/include/shared_data.h index 7ddb3292..7edc0ffb 100644 --- a/include/shared_data.h +++ b/include/shared_data.h @@ -111,7 +111,7 @@ class SharedData { void writeMBTilesProjectData(); void writeMBTilesMetadata(rapidjson::Document const &jsonConfig); void writeFileMetadata(rapidjson::Document const &jsonConfig); - std::string pmTilesMetadata(); + std::string pmTilesMetadata(rapidjson::Document const &jsonConfig); void writePMTilesBounds(); }; diff --git a/src/shared_data.cpp b/src/shared_data.cpp index 7432e769..39bc29f0 100644 --- a/src/shared_data.cpp +++ b/src/shared_data.cpp @@ -104,13 +104,16 @@ void SharedData::writeFileMetadata(rapidjson::Document const &jsonConfig) { } // Create JSON string with .pmtiles-format metadata -std::string SharedData::pmTilesMetadata() { +std::string SharedData::pmTilesMetadata(rapidjson::Document const &jsonConfig) { rapidjson::Document document; document.SetObject(); document.AddMember("name", rapidjson::Value().SetString(config.projectName.c_str(), document.GetAllocator()), document.GetAllocator()); document.AddMember("description", rapidjson::Value().SetString(config.projectDesc.c_str(), document.GetAllocator()), document.GetAllocator()); document.AddMember("vector_layers", layers.serialiseToJSONValue(document.GetAllocator()), document.GetAllocator()); - // we don't currently write "attribution" or "type" fields, see .pmtiles spec + if (jsonConfig["settings"].HasMember("metadata") && jsonConfig["settings"]["metadata"].HasMember("attribution")) { + document.AddMember("attribution", rapidjson::Value().SetString(jsonConfig["settings"]["metadata"]["attribution"].GetString(), document.GetAllocator()), document.GetAllocator()); + } + // we don't currently write "type" field, see .pmtiles spec rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); document.Accept(writer); diff --git a/src/tilemaker.cpp b/src/tilemaker.cpp index 5220933a..ffb3f9ca 100644 --- a/src/tilemaker.cpp +++ b/src/tilemaker.cpp @@ -591,7 +591,7 @@ int main(const int argc, const char* argv[]) { sharedData.mbtiles.closeForWriting(); } else if (options.outputMode == OptionsParser::OutputMode::PMTiles) { sharedData.writePMTilesBounds(); - std::string metadata = sharedData.pmTilesMetadata(); + std::string metadata = sharedData.pmTilesMetadata(jsonConfig); sharedData.pmtiles.close(metadata); } else { sharedData.writeFileMetadata(jsonConfig);