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:
authorvng <viktor.govako@gmail.com>2014-02-06 17:58:30 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:13:26 +0300
commit610b4b2a67b189abb3eadae3005c54ceaa80143a (patch)
tree70db14bc507fb1411206b5eaae8c4bb963bd9b8c /generator
parentba6f650217582dd58e389980eb9e530de9b9224f (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.cpp5
-rw-r--r--generator/feature_builder.hpp2
-rw-r--r--generator/feature_generator.cpp6
-rw-r--r--generator/generate_info.hpp1
-rw-r--r--generator/generator_tool/generator_tool.cpp5
-rw-r--r--generator/osm_element.hpp34
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));
}
};