diff --git a/routing/cross_border_graph.cpp b/routing/cross_border_graph.cpp index edcd59872f..264c393415 100644 --- a/routing/cross_border_graph.cpp +++ b/routing/cross_border_graph.cpp @@ -18,11 +18,6 @@ void CrossBorderGraph::AddCrossBorderSegment(RegionSegmentId segId, addEndingToMwms(segment.m_end); } -// static -double CrossBorderGraphSerializer::SerDesVals::GetMin() { return ms::LatLon::kMinLat; } -// static -double CrossBorderGraphSerializer::SerDesVals::GetMax() { return ms::LatLon::kMaxLat; } - CrossBorderSegmentEnding::CrossBorderSegmentEnding(m2::PointD const & point, NumMwmId const & mwmId) : m_point(mercator::ToLatLon(point), geometry::kDefaultAltitudeMeters), m_numMwmId(mwmId) { diff --git a/routing/cross_border_graph.hpp b/routing/cross_border_graph.hpp index 05155b03d3..4f2465e64d 100644 --- a/routing/cross_border_graph.hpp +++ b/routing/cross_border_graph.hpp @@ -93,17 +93,7 @@ private: uint32_t m_version = kLatestVersionRoutingWorldSection; }; - // Constants for point-coding of double fields (coordinates and edge weight). - class SerDesVals - { - public: - static double GetMin(); - static double GetMax(); - static constexpr size_t GetBitsCount() { return kBitsForDouble; } - - private: - static size_t constexpr kBitsForDouble = 30; - }; + static size_t constexpr kBitsForDouble = 30; static uint32_t Hash(std::string const & s); }; @@ -132,15 +122,11 @@ void CrossBorderGraphSerializer::Serialize(CrossBorderGraph const & graph, Sink for (auto hash : mwmNameHashes) WriteToSink(sink, hash); - auto writeVal = [&sink](double val, bool isCoord = true) { - WriteToSink(sink, DoubleToUint32(val, SerDesVals::GetMin(), SerDesVals::GetMax(), - SerDesVals::GetBitsCount())); - }; - - auto writeSegEnding = [&](CrossBorderSegmentEnding const & ending) { + auto writeSegEnding = [&](CrossBorderSegmentEnding const & ending) + { auto const & coord = ending.m_point.GetLatLon(); - writeVal(coord.m_lat); - writeVal(coord.m_lon); + WriteToSink(sink, DoubleToUint32(coord.m_lat, ms::LatLon::kMinLat, ms::LatLon::kMaxLat, kBitsForDouble)); + WriteToSink(sink, DoubleToUint32(coord.m_lon, ms::LatLon::kMinLon, ms::LatLon::kMaxLon, kBitsForDouble)); auto const & mwmNameHash = Hash(numMwmIds->GetFile(ending.m_numMwmId).GetName()); auto it = mwmNameHashes.find(mwmNameHash); @@ -193,14 +179,12 @@ void CrossBorderGraphSerializer::Deserialize(CrossBorderGraph & graph, Source & mwmNameHashes.emplace(mwmNameHash); } - auto readVal = [&src]() { - return Uint32ToDouble(ReadPrimitiveFromSource(src), SerDesVals::GetMin(), - SerDesVals::GetMax(), SerDesVals::GetBitsCount()); - }; - - auto readSegEnding = [&](CrossBorderSegmentEnding & ending) { - double const lat = readVal(); - double const lon = readVal(); + auto readSegEnding = [&](CrossBorderSegmentEnding & ending) + { + double const lat = Uint32ToDouble(ReadPrimitiveFromSource(src), + ms::LatLon::kMinLat, ms::LatLon::kMaxLat, kBitsForDouble); + double const lon = Uint32ToDouble(ReadPrimitiveFromSource(src), + ms::LatLon::kMinLon, ms::LatLon::kMaxLon, kBitsForDouble); ending.m_point = LatLonWithAltitude(ms::LatLon(lat, lon), geometry::kDefaultAltitudeMeters); NumMwmId index = ReadPrimitiveFromSource(src); diff --git a/routing/routing_integration_tests/absent_regions_finder_tests.cpp b/routing/routing_integration_tests/absent_regions_finder_tests.cpp index e4f55a8c8e..5efc896071 100644 --- a/routing/routing_integration_tests/absent_regions_finder_tests.cpp +++ b/routing/routing_integration_tests/absent_regions_finder_tests.cpp @@ -250,4 +250,17 @@ UNIT_CLASS_TEST(TestAbsentRegionsFinder, TestAbsentRegionsFinder_Finland) TestRegions(checkpoints, planRegions); } + +// https://github.com/organicmaps/organicmaps/issues/980 +UNIT_CLASS_TEST(TestAbsentRegionsFinder, TestAbsentRegionsFinder_BC_Alberta) +{ + Checkpoints const checkpoints{mercator::FromLatLon(49.2608724, -123.1139529), + mercator::FromLatLon(53.5354110, -113.5079960)}; + + std::set const planRegions{"Canada_Alberta_Edmonton", "Canada_Alberta_South", + "Canada_British Columbia_Southeast", "Canada_British Columbia_Vancouver"}; + + TestRegions(checkpoints, planRegions); +} + } // namespace