Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Pimenov <m@maps.me>2016-11-18 17:42:44 +0300
committerMaxim Pimenov <m@maps.me>2016-12-08 15:31:29 +0300
commit554f0f855f3980f9be87ad7e058a8f7a8b06363f (patch)
treeb3bd675773fc15547ccff1422326c606ab290552 /generator
parent3de499bb3402f31003a1285d5a4c52c2d4ca4297 (diff)
[traffic] Separate keys and values when serializing traffic.
Diffstat (limited to 'generator')
-rw-r--r--generator/generator.pro2
-rw-r--r--generator/generator_tool/generator_tool.cpp11
-rw-r--r--generator/generator_tool/generator_tool.pro2
-rw-r--r--generator/traffic_generator.cpp40
-rw-r--r--generator/traffic_generator.hpp8
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