diff --git a/indexer/feature_merger.cpp b/indexer/feature_merger.cpp index 6dfe0e21d0..98532936d2 100644 --- a/indexer/feature_merger.cpp +++ b/indexer/feature_merger.cpp @@ -27,9 +27,5 @@ void FeatureBuilder1Merger::AppendFeature(FeatureBuilder1Merger const & fb) // merge fb at the end size_t const size = fb.m_Geometry.size(); for (size_t i = 1; i < size; ++i) - { - m_Geometry.push_back(fb.m_Geometry[i]); - m_LimitRect.Add(fb.m_Geometry[i]); - } - //LOG(LINFO, ("Appended feature", m_Geometry.size())); + AddPoint(fb.m_Geometry[i]); } diff --git a/indexer/indexer_tool/world_map_generator.hpp b/indexer/indexer_tool/world_map_generator.hpp index 6b29af6389..2d8d271104 100644 --- a/indexer/indexer_tool/world_map_generator.hpp +++ b/indexer/indexer_tool/world_map_generator.hpp @@ -43,19 +43,22 @@ private: /// @return true if one feature was merged bool ReMergeFeatures(FeaturesContainerT & features) { - //bool merged = false; for (FeaturesContainerT::iterator base = features.begin(); base != features.end(); ++base) { FeaturesContainerT::iterator found = features.find(base->second.LastPoint()); if (found != features.end()) { + CHECK(found != base, ()); base->second.AppendFeature(found->second); features.erase(found); + if (base->second.FirstPoint() == base->second.LastPoint()) + { // @TODO create area feature + (*m_worldBucket)(base->second); + features.erase(base); + } return true; - //merged = true; } } - //return merged; return false; } @@ -70,13 +73,19 @@ private: container.erase(found); } + if (fbm.FirstPoint() == fbm.LastPoint()) + { + // @TODO create area feature + (*m_worldBucket)(fbm); + return; + } pair result = container.insert(make_pair(fbm.FirstPoint(), fbm)); // if we found feature with the same starting point, emit it directly if (!result.second) { LOG(LWARNING, ("Found features with common first point, points counts are:", result.first->second.GetPointsCount(), fb.GetPointsCount())); - (*m_worldBucket)(fb); + (*m_worldBucket)(fbm); } }