diff options
author | vng <viktor.govako@gmail.com> | 2012-04-18 14:11:30 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:37:33 +0300 |
commit | e1b336bcb90239ef63898ddaa12587b595414f62 (patch) | |
tree | 8a90f87faaa7aaa28b4f331a3620bc1fb7785743 | |
parent | 5a64fa18b91173161bc719259033ee70be2d3312 (diff) |
Fix coastlines generation.
-rw-r--r-- | generator/feature_generator.cpp | 9 | ||||
-rw-r--r-- | generator/osm_element.hpp | 11 |
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) { } }; |