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:
-rw-r--r--generator/feature_generator.cpp9
-rw-r--r--generator/osm_element.hpp11
2 files changed, 13 insertions, 7 deletions
diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp
index f02924bfaa..e1d8678594 100644
--- a/generator/feature_generator.cpp
+++ b/generator/feature_generator.cpp
@@ -373,7 +373,7 @@ public:
}
-template <class TNodesHolder, template <class, class> class TParser>
+template <class TNodesHolder>
bool GenerateImpl(GenerateInfo & info)
{
try
@@ -385,7 +385,8 @@ bool GenerateImpl(GenerateInfo & info)
holder.LoadIndex();
MainFeaturesEmitter bucketer(info);
- TParser<MainFeaturesEmitter, holder_t> parser(bucketer, holder);
+ SecondPassParserUsual<MainFeaturesEmitter, holder_t> parser(
+ bucketer, holder, info.m_makeCoasts ? classif().GetCoastType() : 0);
ParseXMLFromStdIn(parser);
bucketer.Finish();
@@ -403,9 +404,9 @@ bool GenerateImpl(GenerateInfo & info)
bool GenerateFeatures(GenerateInfo & info, bool lightNodes)
{
if (lightNodes)
- return GenerateImpl<points_in_map, SecondPassParserUsual>(info);
+ return GenerateImpl<points_in_map>(info);
else
- return GenerateImpl<points_in_file, SecondPassParserUsual>(info);
+ return GenerateImpl<points_in_file>(info);
}
}
diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp
index c6f9e4fefd..d8ae9de9e9 100644
--- a/generator/osm_element.hpp
+++ b/generator/osm_element.hpp
@@ -310,6 +310,8 @@ class SecondPassParserUsual : public SecondPassParserBase<TEmitter, THolder>
ft.SetParams(fValue);
}
+ uint32_t m_coastType;
+
protected:
virtual void EmitElement(XMLElement * p)
{
@@ -334,7 +336,10 @@ protected:
}
else if (p->name == "way")
{
- bool const isLine = feature::IsDrawableLike(fValue.m_Types, feature::FEATURE_TYPE_LINE);
+ bool const isLine = feature::IsDrawableLike(fValue.m_Types, feature::FEATURE_TYPE_LINE) ||
+ // this is important fix: we need to process all coastlines even without linear drawing rules
+ (m_coastType != 0 && fValue.IsTypeExist(m_coastType));
+
bool const isArea = feature::IsDrawableLike(fValue.m_Types, feature::FEATURE_TYPE_AREA);
if (!isLine && !isArea)
@@ -448,8 +453,8 @@ protected:
}
public:
- SecondPassParserUsual(TEmitter & emitter, THolder & holder)
- : base_type(emitter, holder)
+ SecondPassParserUsual(TEmitter & emitter, THolder & holder, uint32_t coastType)
+ : base_type(emitter, holder), m_coastType(coastType)
{
}
};