diff options
author | Maxim Pimenov <m@maps.me> | 2016-11-18 17:42:44 +0300 |
---|---|---|
committer | Maxim Pimenov <m@maps.me> | 2016-12-08 15:31:29 +0300 |
commit | 554f0f855f3980f9be87ad7e058a8f7a8b06363f (patch) | |
tree | b3bd675773fc15547ccff1422326c606ab290552 /generator | |
parent | 3de499bb3402f31003a1285d5a4c52c2d4ca4297 (diff) |
[traffic] Separate keys and values when serializing traffic.
Diffstat (limited to 'generator')
-rw-r--r-- | generator/generator.pro | 2 | ||||
-rw-r--r-- | generator/generator_tool/generator_tool.cpp | 11 | ||||
-rw-r--r-- | generator/generator_tool/generator_tool.pro | 2 | ||||
-rw-r--r-- | generator/traffic_generator.cpp | 40 | ||||
-rw-r--r-- | generator/traffic_generator.hpp | 8 |
5 files changed, 61 insertions, 2 deletions
diff --git a/generator/generator.pro b/generator/generator.pro index eab138f66a..5b7f5a7acb 100644 --- a/generator/generator.pro +++ b/generator/generator.pro @@ -47,6 +47,7 @@ SOURCES += \ statistics.cpp \ tesselator.cpp \ towns_dumper.cpp \ + traffic_generator.cpp \ unpack_mwm.cpp \ HEADERS += \ @@ -91,6 +92,7 @@ HEADERS += \ tag_admixer.hpp \ tesselator.hpp \ towns_dumper.hpp \ + traffic_generator.hpp \ unpack_mwm.hpp \ ways_merger.hpp \ world_map_generator.hpp \ diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp index aef0ff54f1..151b9d5655 100644 --- a/generator/generator_tool/generator_tool.cpp +++ b/generator/generator_tool/generator_tool.cpp @@ -13,6 +13,7 @@ #include "generator/routing_index_generator.hpp" #include "generator/search_index_builder.hpp" #include "generator/statistics.hpp" +#include "generator/traffic_generator.hpp" #include "generator/unpack_mwm.hpp" #include "indexer/classificator.hpp" @@ -96,6 +97,8 @@ DEFINE_bool(unpack_mwm, false, "Unpack each section of mwm into a separate file DEFINE_bool(check_mwm, false, "Check map file to be correct."); DEFINE_string(delete_section, "", "Delete specified section (defines.hpp) from container."); DEFINE_bool(generate_addresses_file, false, "Generate .addr file (for '--output' option) with full addresses list."); +DEFINE_bool(generate_traffic_keys, false, + "Generate keys for the traffic map (road segment -> speed group)."); int main(int argc, char ** argv) { @@ -158,7 +161,7 @@ int main(int argc, char ** argv) FLAGS_generate_index || FLAGS_generate_search_index || FLAGS_calc_statistics || FLAGS_type_statistics || FLAGS_dump_types || FLAGS_dump_prefixes || FLAGS_dump_feature_names != "" || FLAGS_check_mwm || FLAGS_srtm_path != "" || - FLAGS_make_routing_index) + FLAGS_make_routing_index || FLAGS_generate_traffic_keys) { classificator::Load(); classif().SortClassificator(); @@ -252,6 +255,12 @@ int main(int argc, char ** argv) routing::BuildRoutingIndex(datFile, country); } + + if (FLAGS_generate_traffic_keys) + { + if (!traffic::GenerateTrafficKeysFromDataFile(datFile)) + LOG(LCRITICAL, ("Error generating traffic keys.")); + } } string const datFile = my::JoinFoldersToPath(path, FLAGS_output + DATA_FILE_EXTENSION); diff --git a/generator/generator_tool/generator_tool.pro b/generator/generator_tool/generator_tool.pro index cdd4138aa1..0e5e58b7d2 100644 --- a/generator/generator_tool/generator_tool.pro +++ b/generator/generator_tool/generator_tool.pro @@ -2,7 +2,7 @@ ROOT_DIR = ../.. -DEPENDENCIES = generator routing search storage indexer editor platform geometry \ +DEPENDENCIES = generator routing traffic search storage indexer editor platform geometry \ coding base freetype expat fribidi jansson protobuf osrm stats_client \ minizip succinct pugixml tess2 gflags oauthcpp include($$ROOT_DIR/common.pri) diff --git a/generator/traffic_generator.cpp b/generator/traffic_generator.cpp new file mode 100644 index 0000000000..8e52ca4c5c --- /dev/null +++ b/generator/traffic_generator.cpp @@ -0,0 +1,40 @@ +#include "generator/traffic_generator.hpp" + +#include "routing/car_model.hpp" +#include "routing/routing_helpers.hpp" + +#include "traffic/traffic_info.hpp" + +#include "platform/mwm_traits.hpp" + +#include "indexer/feature_algo.hpp" +#include "indexer/feature_processor.hpp" +#include "indexer/features_offsets_table.hpp" + +#include "coding/file_container.hpp" + +namespace traffic +{ +bool GenerateTrafficKeysFromDataFile(string const & mwmPath) +{ + try + { + vector<TrafficInfo::RoadSegmentId> keys; + TrafficInfo::ExtractTrafficKeys(mwmPath, keys); + + vector<uint8_t> buf; + TrafficInfo::SerializeTrafficKeys(keys, buf); + + FilesContainerW writeContainer(mwmPath, FileWriter::OP_WRITE_EXISTING); + FileWriter writer = writeContainer.GetWriter(TRAFFIC_KEYS_FILE_TAG); + writer.Write(buf.data(), buf.size()); + } + catch (RootException const & e) + { + LOG(LERROR, ("Failed to build traffic keys:", e.Msg())); + return false; + } + + return true; +} +} // namespace traffic diff --git a/generator/traffic_generator.hpp b/generator/traffic_generator.hpp new file mode 100644 index 0000000000..e0e0c0ef77 --- /dev/null +++ b/generator/traffic_generator.hpp @@ -0,0 +1,8 @@ +#pragma once + +#include "std/string.hpp" + +namespace traffic +{ +bool GenerateTrafficKeysFromDataFile(string const & mwmPath); +} // namespace traffic |