From bef32bcb75bed78e9ff9d6d565a92dd960e523e7 Mon Sep 17 00:00:00 2001 From: Sergey Yershov Date: Tue, 31 May 2016 15:19:53 +0300 Subject: [PATCH] [booking] Fix the matching function --- generator/booking_dataset.cpp | 15 ++++++++++++--- generator/booking_dataset.hpp | 3 +++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/generator/booking_dataset.cpp b/generator/booking_dataset.cpp index d2ac8ca57e..9b3caeaac1 100644 --- a/generator/booking_dataset.cpp +++ b/generator/booking_dataset.cpp @@ -257,11 +257,20 @@ bool BookingDataset::MatchWithBooking(OsmElement const & e) const return false; // Find 3 nearest values to a point. - auto const indexes = GetNearestHotels(e.lat, e.lon, 3, 150 /* max distance in meters */); - if (indexes.empty()) + auto const bookingIndexes = GetNearestHotels(e.lat, e.lon, 3, kDistanceLimitInMeters); + if (bookingIndexes.empty()) return false; - bool matched = MatchByName(name, indexes); + bool matched = false; + + for (size_t const j : bookingIndexes) + { + auto const & hotel = GetHotel(j); + double const dist = ms::DistanceOnEarth(e.lat, e.lon, hotel.lat, hotel.lon); + double score = (kDistanceLimitInMeters - dist) / kDistanceLimitInMeters; + matched = score > kOptimalThreshold; + } + return matched; } diff --git a/generator/booking_dataset.hpp b/generator/booking_dataset.hpp index 6ce74c7118..1a91beede7 100644 --- a/generator/booking_dataset.hpp +++ b/generator/booking_dataset.hpp @@ -15,6 +15,9 @@ namespace generator class BookingDataset { public: + double static constexpr kDistanceLimitInMeters = 150; + double static constexpr kOptimalThreshold = 0.709283; + struct Hotel { enum class Fields