diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index 26ba73ceac..01e2171246 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -69,6 +69,8 @@ set(SRC intermediate_elements.hpp locality_sorter.cpp locality_sorter.hpp + maxspeed_builder.cpp + maxspeed_builder.hpp maxspeed_collector.cpp maxspeed_collector.hpp metalines_builder.cpp diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp index 058237a1fb..80e88348ab 100644 --- a/generator/generator_tool/generator_tool.cpp +++ b/generator/generator_tool/generator_tool.cpp @@ -13,6 +13,7 @@ #include "generator/generate_info.hpp" #include "generator/geo_objects/geo_objects.hpp" #include "generator/locality_sorter.hpp" +#include "generator/maxspeed_builder.hpp" #include "generator/metalines_builder.hpp" #include "generator/osm_source.hpp" #include "generator/popular_places_section_builder.hpp" @@ -530,6 +531,9 @@ int main(int argc, char ** argv) if (FLAGS_generate_maxspeed) { LOG(LINFO, ("Generating maxspeed section for", datFile)); + string const maxspeedFilename = genInfo.GetIntermediateFileName(MAXSPEED_FILENAME); + CHECK(BuildMaxspeed(datFile, osmToFeatureFilename, maxspeedFilename), + ("Generating maxspeed section error.")); } if (FLAGS_make_cross_mwm || FLAGS_make_transit_cross_mwm) diff --git a/generator/maxspeed_builder.cpp b/generator/maxspeed_builder.cpp new file mode 100644 index 0000000000..4b351e0c06 --- /dev/null +++ b/generator/maxspeed_builder.cpp @@ -0,0 +1,12 @@ +#include "generator/maxspeed_builder.hpp" + +#include "routing/maxspeed_serialization.hpp" + +namespace generator +{ +bool BuildMaxspeed(std::string const & dataPath, std::string const & osmToFeaturePath, + std::string const & maxspeedFilename) +{ + return true; +} +} // namespace generator diff --git a/generator/maxspeed_builder.hpp b/generator/maxspeed_builder.hpp new file mode 100644 index 0000000000..1c66922471 --- /dev/null +++ b/generator/maxspeed_builder.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include + +namespace generator +{ +/// \brief Builds maxspeed section. +/// \param maxspeedFilename file name to csv file with maxspeed tag values. +/// \note To start building the section, the following data must be ready: +/// 1. GenerateIntermediateData(). Saves to a file data about maxspeed tags value of road features +/// 2. GenerateFeatures() +/// 3. Generates geometry +bool BuildMaxspeed(std::string const & dataPath, std::string const & osmToFeaturePath, + std::string const & maxspeedFilename); +} // namespace generator diff --git a/generator/maxspeed_collector.cpp b/generator/maxspeed_collector.cpp index 2bc7b6e72e..aa1d7c010a 100644 --- a/generator/maxspeed_collector.cpp +++ b/generator/maxspeed_collector.cpp @@ -53,7 +53,10 @@ void MaxspeedCollector::Flush() ofstream stream(m_filePath); if (!stream.is_open()) + { LOG(LERROR, ("Cannot open file", m_filePath)); + return; + } for (auto const & s : m_data) stream << s << '\n'; diff --git a/generator/maxspeed_collector.hpp b/generator/maxspeed_collector.hpp index 75109cdfc9..551248271b 100644 --- a/generator/maxspeed_collector.hpp +++ b/generator/maxspeed_collector.hpp @@ -7,16 +7,16 @@ namespace feature { -/// \brief Saves csv file. Every line describe maxspeed, maxspeed:forward and maxspeed:backward +/// \brief Saves csv file. Every line describes maxspeed, maxspeed:forward and maxspeed:backward /// tags of linear features. The format of the lines is described below. class MaxspeedCollector { public: - /// \pram filePath path to csv file. + /// \param filePath path to csv file. explicit MaxspeedCollector(std::string const & filePath) : m_filePath(filePath) {} ~MaxspeedCollector() { Flush(); } - void Process(OsmElement const & el); + void Process(OsmElement const & p); private: void Flush(); @@ -26,7 +26,7 @@ private: // 1. osm id,maxspeed value // 2. osm id,maxspeed:forward value // 3. osm id,maxspeed:forward value,maxspeed:backward value - // There's possble examples of strings contained in the list |m_data|: + // There are possible examples of strings contained in the list |m_data|: // 2343313,60 // 3243245345,60,80 // 32453452,RU:urban diff --git a/generator/routing_helpers.hpp b/generator/routing_helpers.hpp index fa2e73c9d0..a73f93f483 100644 --- a/generator/routing_helpers.hpp +++ b/generator/routing_helpers.hpp @@ -1,6 +1,7 @@ #pragma once #include "generator/camera_node_processor.hpp" +#include "generator/maxspeed_collector.hpp" #include "generator/restriction_writer.hpp" #include "generator/road_access_generator.hpp" @@ -16,9 +17,12 @@ namespace routing { struct TagsProcessor { + explicit TagsProcessor(std::string const & maxspeedFilePath) : m_maxspeedCollector(maxspeedFilePath) {} + RoadAccessWriter m_roadAccessWriter; RestrictionWriter m_restrictionWriter; CameraNodeProcessor m_cameraNodeWriter; + feature::MaxspeedCollector m_maxspeedCollector; }; // Adds feature id and corresponding |osmId| to |osmIdToFeatureId|. diff --git a/generator/translator_planet.cpp b/generator/translator_planet.cpp index e45e64122c..d58ce90081 100644 --- a/generator/translator_planet.cpp +++ b/generator/translator_planet.cpp @@ -23,14 +23,14 @@ namespace generator { TranslatorPlanet::TranslatorPlanet(std::shared_ptr emitter, cache::IntermediateDataReader & holder, - feature::GenerateInfo const & info) : - m_emitter(emitter), - m_cache(holder), - m_coastType(info.m_makeCoasts ? classif().GetCoastType() : 0), - m_nodeRelations(m_routingTagsProcessor), - m_wayRelations(m_routingTagsProcessor), - m_metalinesBuilder(info.GetIntermediateFileName(METALINES_FILENAME)), - m_maxspeedCollector(info.GetIntermediateFileName(MAXSPEED_FILENAME)) + feature::GenerateInfo const & info) + : m_emitter(emitter) + , m_cache(holder) + , m_coastType(info.m_makeCoasts ? classif().GetCoastType() : 0) + , m_routingTagsProcessor(info.GetIntermediateFileName(MAXSPEED_FILENAME)) + , m_nodeRelations(m_routingTagsProcessor) + , m_wayRelations(m_routingTagsProcessor) + , m_metalinesBuilder(info.GetIntermediateFileName(METALINES_FILENAME)) { auto const addrFilePath = info.GetAddressesFileName(); if (!addrFilePath.empty()) @@ -97,7 +97,7 @@ void TranslatorPlanet::EmitElement(OsmElement * p) ft.SetOsmId(base::MakeOsmWay(p->id)); - m_maxspeedCollector.Process(*p); + m_routingTagsProcessor.m_maxspeedCollector.Process(*p); bool isCoastline = (m_coastType != 0 && params.IsTypeExist(m_coastType)); diff --git a/generator/translator_planet.hpp b/generator/translator_planet.hpp index 8af644efaa..8cee841ff0 100644 --- a/generator/translator_planet.hpp +++ b/generator/translator_planet.hpp @@ -1,7 +1,6 @@ #pragma once #include "generator/camera_info_collector.hpp" -#include "generator/maxspeed_collector.hpp" #include "generator/metalines_builder.hpp" #include "generator/relation_tags.hpp" #include "generator/routing_helpers.hpp" @@ -59,6 +58,5 @@ private: RelationTagsNode m_nodeRelations; RelationTagsWay m_wayRelations; feature::MetalinesBuilder m_metalinesBuilder; - feature::MaxspeedCollector m_maxspeedCollector; }; } // namespace generator diff --git a/routing/CMakeLists.txt b/routing/CMakeLists.txt index 3c346e1197..7566368333 100644 --- a/routing/CMakeLists.txt +++ b/routing/CMakeLists.txt @@ -63,6 +63,8 @@ set( joint_index.cpp joint_index.hpp loaded_path_segment.hpp + maxspeed_serialization.cpp + maxspeed_serialization.hpp nearest_edge_finder.cpp nearest_edge_finder.hpp online_absent_fetcher.cpp diff --git a/routing/maxspeed_serialization.cpp b/routing/maxspeed_serialization.cpp new file mode 100644 index 0000000000..51a89e6900 --- /dev/null +++ b/routing/maxspeed_serialization.cpp @@ -0,0 +1,5 @@ +#include "routing/maxspeed_serialization.hpp" + +namespace routing +{ +} // namespace routing diff --git a/routing/maxspeed_serialization.hpp b/routing/maxspeed_serialization.hpp new file mode 100644 index 0000000000..ad0b25da77 --- /dev/null +++ b/routing/maxspeed_serialization.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace routing +{ +} // namespace routing