diff --git a/Descriptors/BaseDescriptor.h b/Descriptors/BaseDescriptor.h index 5177ebed0..d06b9b6cb 100644 --- a/Descriptors/BaseDescriptor.h +++ b/Descriptors/BaseDescriptor.h @@ -54,9 +54,7 @@ template class BaseDescriptor BaseDescriptor() {} // Maybe someone can explain the pure virtual destructor thing to me (dennis) virtual ~BaseDescriptor() {} - virtual void Run(const RawRouteData &raw_route, - const PhantomNodes &phantom_nodes, - http::Reply &reply) = 0; + virtual void Run(const RawRouteData &raw_route, http::Reply &reply) = 0; virtual void SetConfig(const DescriptorConfig &config) = 0; }; diff --git a/Descriptors/DescriptionFactory.cpp b/Descriptors/DescriptionFactory.cpp index 1ca122b24..d75b14fe6 100644 --- a/Descriptors/DescriptionFactory.cpp +++ b/Descriptors/DescriptionFactory.cpp @@ -27,7 +27,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "DescriptionFactory.h" -DescriptionFactory::DescriptionFactory() : entireLength(0) {} +DescriptionFactory::DescriptionFactory() : entireLength(0) +{ + via_indices.push_back(0); +} + +std::vector const & DescriptionFactory::GetViaIndices() const +{ + return via_indices; +} + void DescriptionFactory::SetStartSegment(const PhantomNode &source) { @@ -39,7 +48,7 @@ void DescriptionFactory::SetEndSegment(const PhantomNode &target) { target_phantom = target; path_description.emplace_back( - target.location, target.name_id, 0, target.reverse_weight, TurnInstruction::NoTurn, true); + target.location, target.name_id, 0, target.reverse_weight, TurnInstruction::NoTurn, true, true); } void DescriptionFactory::AppendSegment(const FixedPointCoordinate &coordinate, diff --git a/Descriptors/DescriptionFactory.h b/Descriptors/DescriptionFactory.h index c5581c1c9..fd4fe4c63 100644 --- a/Descriptors/DescriptionFactory.h +++ b/Descriptors/DescriptionFactory.h @@ -54,6 +54,8 @@ class DescriptionFactory double DegreeToRadian(const double degree) const; double RadianToDegree(const double degree) const; + std::vector via_indices; + public: struct RouteSummary { @@ -82,6 +84,7 @@ class DescriptionFactory void SetStartSegment(const PhantomNode &start_phantom); void SetEndSegment(const PhantomNode &start_phantom); JSON::Value AppendEncodedPolylineString(const bool return_encoded); + std::vector const & GetViaIndices() const; template void Run(const DataFacadeT *facade, const unsigned zoomLevel) { @@ -190,14 +193,24 @@ class DescriptionFactory polyline_generalizer.Run(path_description, zoomLevel); // fix what needs to be fixed else + unsigned necessary_pieces = 0; for (unsigned i = 0; i < path_description.size() - 1 && path_description.size() >= 2; ++i) { if (path_description[i].necessary) { + if (path_description[i].is_via_location) + { + via_indices.push_back(necessary_pieces); + } + const double angle = path_description[i+1].location.GetBearing(path_description[i].location); path_description[i].bearing = angle * 10; + ++necessary_pieces; } } + via_indices.push_back(necessary_pieces); + BOOST_ASSERT(via_indices.size() >= 2); + BOOST_ASSERT(0 != necessary_pieces); return; } }; diff --git a/Descriptors/GPXDescriptor.h b/Descriptors/GPXDescriptor.h index 020e0a3ca..50efd9ae2 100644 --- a/Descriptors/GPXDescriptor.h +++ b/Descriptors/GPXDescriptor.h @@ -62,9 +62,7 @@ template class GPXDescriptor : public BaseDescriptor" " class GPXDescriptor : public BaseDescriptor &path_data_vector : raw_route.unpacked_path_segments) { @@ -92,7 +90,7 @@ template class GPXDescriptor : public BaseDescriptor"); diff --git a/Plugins/ViaRoutePlugin.h b/Plugins/ViaRoutePlugin.h index 4a65408ef..b82d514a9 100644 --- a/Plugins/ViaRoutePlugin.h +++ b/Plugins/ViaRoutePlugin.h @@ -161,11 +161,8 @@ template class ViaRoutePlugin : public BasePlugin break; } - PhantomNodes phantom_nodes; - phantom_nodes.source_phantom = raw_route.segment_end_coordinates.front().source_phantom; - phantom_nodes.target_phantom = raw_route.segment_end_coordinates.back().target_phantom; descriptor->SetConfig(descriptor_config); - descriptor->Run(raw_route, phantom_nodes, reply); + descriptor->Run(raw_route, reply); } private: