diff options
author | vng <viktor.govako@gmail.com> | 2014-02-06 17:58:30 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:13:26 +0300 |
commit | 610b4b2a67b189abb3eadae3005c54ceaa80143a (patch) | |
tree | 70db14bc507fb1411206b5eaae8c4bb963bd9b8c /generator | |
parent | ba6f650217582dd58e389980eb9e530de9b9224f (diff) |
[generator_tool] Refactoring of address file generation. Use --address_file_name=address.txt option.
Diffstat (limited to 'generator')
-rw-r--r-- | generator/feature_builder.cpp | 5 | ||||
-rw-r--r-- | generator/feature_builder.hpp | 2 | ||||
-rw-r--r-- | generator/feature_generator.cpp | 6 | ||||
-rw-r--r-- | generator/generate_info.hpp | 1 | ||||
-rw-r--r-- | generator/generator_tool/generator_tool.cpp | 5 | ||||
-rw-r--r-- | generator/osm_element.hpp | 34 |
6 files changed, 31 insertions, 22 deletions
diff --git a/generator/feature_builder.cpp b/generator/feature_builder.cpp index 1f5be0b099..441fbda5d1 100644 --- a/generator/feature_builder.cpp +++ b/generator/feature_builder.cpp @@ -104,6 +104,11 @@ bool FeatureBuilder1::RemoveInvalidTypes() static_cast<FeatureGeoType>(m_Params.GetGeomType())); } +bool FeatureBuilder1::FormatFullAddress(string & res) const +{ + return m_Params.FormatFullAddress(m_LimitRect.Center(), res); +} + FeatureBase FeatureBuilder1::GetFeatureBase() const { CHECK ( CheckValid(), (*this) ); diff --git a/generator/feature_builder.hpp b/generator/feature_builder.hpp index f7ad3160ff..0a4120c5cf 100644 --- a/generator/feature_builder.hpp +++ b/generator/feature_builder.hpp @@ -74,6 +74,8 @@ public: //@{ inline m2::RectD GetLimitRect() const { return m_LimitRect; } + bool FormatFullAddress(string & res) const; + /// Get common parameters of feature. FeatureBase GetFeatureBase() const; diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp index 08a158e3e2..7030057436 100644 --- a/generator/feature_generator.cpp +++ b/generator/feature_generator.cpp @@ -25,6 +25,7 @@ #include "../std/unordered_map.hpp" #include "../std/target_os.hpp" + namespace feature { @@ -437,7 +438,10 @@ bool GenerateImpl(GenerateInfo & info) MainFeaturesEmitter bucketer(info); SecondPassParserUsual<MainFeaturesEmitter, holder_t> parser( - bucketer, holder, info.m_makeCoasts ? classif().GetCoastType() : 0); + bucketer, holder, + info.m_makeCoasts ? classif().GetCoastType() : 0, + info.m_addressFile); + ParseXMLFromStdIn(parser); // Stop if coasts are not merged and FLAG_fail_on_coasts is set diff --git a/generator/generate_info.hpp b/generator/generate_info.hpp index 914c2218e3..04c924d11a 100644 --- a/generator/generate_info.hpp +++ b/generator/generate_info.hpp @@ -17,6 +17,7 @@ struct GenerateInfo string m_tmpDir; string m_datFilePrefix; string m_datFileSuffix; + string m_addressFile; vector<string> m_bucketNames; diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp index 84b0b69adf..9626a738fc 100644 --- a/generator/generator_tool/generator_tool.cpp +++ b/generator/generator_tool/generator_tool.cpp @@ -60,6 +60,8 @@ DEFINE_bool(generate_packed_borders, false, "Generate packed file with country p DEFINE_bool(check_mwm, false, "Check map file to be correct."); DEFINE_string(delete_section, "", "Delete specified section (defines.hpp) from container."); DEFINE_bool(fail_on_coasts, false, "Stop and exit with '255' code if some coastlines are not merged."); +DEFINE_string(address_file_name, "", "Output file name for storing full addresses."); + string AddSlashIfNeeded(string const & str) { @@ -133,6 +135,9 @@ int main(int argc, char ** argv) genInfo.m_makeCoasts = FLAGS_make_coasts; genInfo.m_emitCoasts = FLAGS_emit_coasts; + if (!FLAGS_address_file_name.empty()) + genInfo.m_addressFile = path + FLAGS_address_file_name; + if (!feature::GenerateFeatures(genInfo, FLAGS_use_light_nodes)) return -1; diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp index 47c9f42136..0a4f5fb219 100644 --- a/generator/osm_element.hpp +++ b/generator/osm_element.hpp @@ -12,8 +12,6 @@ #include "../base/logging.hpp" #include "../base/stl_add.hpp" -#include "../platform/platform.hpp" - #include "../std/unordered_map.hpp" #include "../std/list.hpp" @@ -347,6 +345,7 @@ class SecondPassParserUsual : public SecondPassParserBase<TEmitter, THolder> typedef typename base_type::feature_builder_t feature_t; uint32_t m_coastType; + scoped_ptr<FileWriter> m_addrWriter; protected: virtual void EmitElement(XMLElement * p) @@ -413,15 +412,10 @@ protected: f.SetCenter(ft.GetGeometryCenter()); if (f.PreSerialize()) { - if (!params.m_streetAddress.empty() && !params.house.IsEmpty()) - { - m2::PointD p = ft.GetLimitRect().Center(); - string const s = params.m_streetAddress + "|" + params.house.Get() + "|" - + strings::to_string(MercatorBounds::YToLat(p.y)) + "|" - + strings::to_string(MercatorBounds::XToLon(p.x)) + '\n'; - FileWriter writer = FileWriter(GetPlatform().WritableDir() + "adresses.txt", FileWriter::OP_APPEND, false); - writer.Write(s.c_str(), s.size()); - } + string addr; + if (m_addrWriter && f.FormatFullAddress(addr)) + m_addrWriter->Write(addr.c_str(), addr.size()); + base_type::m_emitter(f); } } @@ -490,15 +484,10 @@ protected: ft.SetParams(fValue); if (ft.PreSerialize()) { - if (!fValue.m_streetAddress.empty() && !fValue.house.IsEmpty()) - { - m2::PointD p = ft.GetLimitRect().Center(); - string const s = fValue.m_streetAddress + "|" + fValue.house.Get() + "|" - + strings::to_string(MercatorBounds::YToLat(p.y)) + "|" - + strings::to_string(MercatorBounds::XToLon(p.x)) + '\n'; - FileWriter writer = FileWriter(GetPlatform().WritableDir() + "adresses.txt", FileWriter::OP_APPEND, false); - writer.Write(s.c_str(), s.size()); - } + string addr; + if (m_addrWriter && ft.FormatFullAddress(addr)) + m_addrWriter->Write(addr.c_str(), addr.size()); + // add osm id for debugging ft.AddOsmId(p->name, id); base_type::m_emitter(ft); @@ -506,8 +495,11 @@ protected: } public: - SecondPassParserUsual(TEmitter & emitter, THolder & holder, uint32_t coastType) + SecondPassParserUsual(TEmitter & emitter, THolder & holder, + uint32_t coastType, string const & addrFilePath) : base_type(emitter, holder), m_coastType(coastType) { + if (!addrFilePath.empty()) + m_addrWriter.reset(new FileWriter(addrFilePath, FileWriter::OP_APPEND)); } }; |