From 6ab081563cc1c3365837a85e9e3bd723088fa9b3 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Wed, 20 Jul 2016 10:57:05 +0300 Subject: [PATCH] Separation getting altitude information from mwm generation. Moving getting altitude info to an abstract class. --- generator/altitude_generator.cpp | 40 ++++++++++++++++++++++++++------ generator/altitude_generator.hpp | 12 ++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/generator/altitude_generator.cpp b/generator/altitude_generator.cpp index 8200e1a8c3..3548d135d3 100644 --- a/generator/altitude_generator.cpp +++ b/generator/altitude_generator.cpp @@ -1,3 +1,4 @@ +#include "generator/altitude_generator.hpp" #include "generator/routing_generator.hpp" #include "generator/srtm_parser.hpp" @@ -5,7 +6,6 @@ #include "indexer/altitude_loader.hpp" #include "indexer/feature.hpp" -#include "indexer/feature_altitude.hpp" #include "indexer/feature_data.hpp" #include "indexer/feature_processor.hpp" @@ -37,15 +37,34 @@ using namespace feature; namespace { +using namespace routing; + TAltitudeSectionVersion constexpr kAltitudeSectionVersion = 1; +class SrtmGetter : public IAltitudeGetter +{ +public: + SrtmGetter(string const & srtmPath) : m_srtmManager(srtmPath) {} + + feature::TAltitude GetAltitude(ms::LatLon const & coord) override + { + return m_srtmManager.GetHeight(coord); + } + +private: + generator::SrtmTileManager m_srtmManager; +}; + class Processor { public: using TFeatureAltitude = pair; using TFeatureAltitudes = vector; - Processor(string const & srtmPath) : m_srtmManager(srtmPath), m_minAltitude(kInvalidAltitude) {} + Processor(IAltitudeGetter & altitudeGetter) + : m_altitudeGetter(altitudeGetter), m_minAltitude(kInvalidAltitude) + { + } TFeatureAltitudes const & GetFeatureAltitudes() const { return m_featureAltitudes; } @@ -77,7 +96,7 @@ public: TAltitude minFeatureAltitude = kInvalidAltitude; for (size_t i = 0; i < pointsCount; ++i) { - TAltitude const a = m_srtmManager.GetHeight(MercatorBounds::ToLatLon(f.GetPoint(i))); + TAltitude const a = m_altitudeGetter.GetAltitude(MercatorBounds::ToLatLon(f.GetPoint(i))); if (a == kInvalidAltitude) { valid = false; @@ -118,7 +137,7 @@ public: } private: - generator::SrtmTileManager m_srtmManager; + IAltitudeGetter & m_altitudeGetter; TFeatureAltitudes m_featureAltitudes; vector m_altitudeAvailability; TAltitude m_minAltitude; @@ -163,15 +182,15 @@ void SerializeHeader(TAltitudeSectionVersion version, TAltitude minAltitude, namespace routing { -void BuildRoadAltitudes(string const & srtmPath, string const & baseDir, string const & countryName) +void BuildRoadAltitudes(IAltitudeGetter & altitudeGetter, string const & baseDir, + string const & countryName) { try { // Preparing altitude information. - LOG(LINFO, ("srtmPath =", srtmPath, "baseDir =", baseDir, "countryName =", countryName)); string const mwmPath = my::JoinFoldersToPath(baseDir, countryName + DATA_FILE_EXTENSION); - Processor processor(srtmPath); + Processor processor(altitudeGetter); feature::ForEachFromDat(mwmPath, processor); processor.SortFeatureAltitudes(); Processor::TFeatureAltitudes const & featureAltitudes = processor.GetFeatureAltitudes(); @@ -244,4 +263,11 @@ void BuildRoadAltitudes(string const & srtmPath, string const & baseDir, string LOG(LERROR, ("An exception happend while creating", ALTITUDES_FILE_TAG, "section. ", e.what())); } } + +void BuildRoadAltitudes(string const & srtmPath, string const & baseDir, string const & countryName) +{ + LOG(LINFO, ("srtmPath =", srtmPath, "baseDir =", baseDir, "countryName =", countryName)); + SrtmGetter srtmGetter(srtmPath); + BuildRoadAltitudes(srtmGetter, baseDir, countryName); +} } // namespace routing diff --git a/generator/altitude_generator.hpp b/generator/altitude_generator.hpp index 0133d401cb..5f8e76a377 100644 --- a/generator/altitude_generator.hpp +++ b/generator/altitude_generator.hpp @@ -1,9 +1,21 @@ #pragma once +#include "geometry/latlon.hpp" + +#include "indexer/feature_altitude.hpp" + #include "std/string.hpp" namespace routing { +class IAltitudeGetter +{ +public: + virtual feature::TAltitude GetAltitude(ms::LatLon const & coord) = 0; +}; + +void BuildRoadAltitudes(IAltitudeGetter const & altitudeGetter, string const & baseDir, + string const & countryName); void BuildRoadAltitudes(string const & srtmPath, string const & baseDir, string const & countryName); } // namespace routing