Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Yershov <yershov@corp.mail.ru>2016-06-28 19:49:52 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-06-30 16:56:08 +0300
commit27edfe93166a4e8bcea46323c5a1dde0d414fdd2 (patch)
tree604db56fb816c7697847aaaa5cc7eecdff99dcfd /generator
parente9c23aabcd521c979adc332ce704a7d005854e85 (diff)
Review fixes
Diffstat (limited to 'generator')
-rw-r--r--generator/booking_dataset.cpp86
-rw-r--r--generator/booking_dataset.hpp17
-rw-r--r--generator/booking_quality_check/booking_addr_match.cpp78
-rw-r--r--generator/generator_tests/booking_test.cpp52
-rw-r--r--generator/generator_tests/generator_tests.pro7
-rw-r--r--generator/generator_tool/generator_tool.pro12
-rw-r--r--generator/osm_source.cpp5
7 files changed, 140 insertions, 117 deletions
diff --git a/generator/booking_dataset.cpp b/generator/booking_dataset.cpp
index 899c0fc71b..8455dba225 100644
--- a/generator/booking_dataset.cpp
+++ b/generator/booking_dataset.cpp
@@ -1,7 +1,6 @@
#include "generator/booking_dataset.hpp"
-#include "map/framework.hpp"
-
+#include "platform/local_country_file_utils.hpp"
#include "platform/platform.hpp"
#include "indexer/search_delimiters.hpp"
@@ -31,22 +30,7 @@ bool CheckForValues(string const & value)
return false;
}
-// Unlike strings::Tokenize, this function allows for empty tokens.
-void Split(string const & s, char delim, vector<string> & parts)
-{
- stringstream ss;
-
- // Workaround for empty last field.
- ss << s;
- if (!s.empty() && s.back() == delim)
- ss << delim;
-
- string part;
- while (getline(ss, part, delim))
- parts.emplace_back(part);
-}
-
-string TabbedString(string const & str)
+string EscapeTabs(string const & str)
{
stringstream ss;
for (char c : str)
@@ -64,7 +48,7 @@ BookingDataset::Hotel::Hotel(string const & src)
{
vector<string> rec;
strings::ParseCSVRow(src, '\t', rec);
- CHECK(rec.size() == FieldsCount(), ("Error parsing hotels.tsv line:", src));
+ CHECK(rec.size() == FieldsCount(), ("Error parsing hotels.tsv line:", EscapeTabs(src)));
strings::to_uint(rec[Index(Fields::Id)], id);
strings::to_double(rec[Index(Fields::Latitude)], lat);
@@ -92,6 +76,38 @@ ostream & operator<<(ostream & s, BookingDataset::Hotel const & h)
<< " lon: " << h.lon;
}
+BookingDataset::AddressMatcher::AddressMatcher()
+{
+ vector<platform::LocalCountryFile> localFiles;
+
+ Platform & platform = GetPlatform();
+ platform::FindAllLocalMapsInDirectoryAndCleanup(platform.WritableDir(), 0 /* version */,
+ -1 /* latestVersion */, localFiles);
+
+ for (platform::LocalCountryFile const & localFile : localFiles)
+ {
+ LOG(LINFO, ("Found mwm:", localFile));
+ try
+ {
+ m_index.RegisterMap(localFile);
+ }
+ catch (RootException const & ex)
+ {
+ CHECK(false, ("Bad mwm file:", localFile));
+ }
+ }
+
+ m_coder = make_unique<search::ReverseGeocoder>(m_index);
+}
+
+void BookingDataset::AddressMatcher::operator()(Hotel & hotel)
+{
+ search::ReverseGeocoder::Address addr;
+ m_coder->GetNearbyAddress(MercatorBounds::FromLatLon(hotel.lat, hotel.lon), addr);
+ hotel.street = addr.GetStreetName();
+ hotel.houseNumber = addr.GetHouseNumber();
+}
+
BookingDataset::BookingDataset(string const & dataPath, string const & addressReferencePath)
{
if (dataPath.empty())
@@ -130,7 +146,13 @@ bool BookingDataset::TourismFilter(OsmElement const & e) const
BookingDataset::Hotel const & BookingDataset::GetHotel(size_t index) const
{
- ASSERT_GREATER(m_hotels.size(), index, ());
+ ASSERT_LESS(index, m_hotels.size(), ());
+ return m_hotels[index];
+}
+
+BookingDataset::Hotel & BookingDataset::GetHotel(size_t index)
+{
+ ASSERT_LESS(index, m_hotels.size(), ());
return m_hotels[index];
}
@@ -227,7 +249,7 @@ void BookingDataset::BuildFeatures(function<void(OsmElement *)> const & fn) cons
if (!hotel.street.empty())
e.AddTag("addr:street", hotel.street);
- if(!hotel.houseNumber.empty())
+ if (!hotel.houseNumber.empty())
e.AddTag("addr:housenumber", hotel.houseNumber);
switch (hotel.type)
@@ -293,33 +315,33 @@ double BookingDataset::ScoreByLinearNormDistance(double distance)
void BookingDataset::LoadHotels(istream & src, string const & addressReferencePath)
{
m_hotels.clear();
+ m_rtree.clear();
for (string line; getline(src, line);)
m_hotels.emplace_back(line);
- if(!addressReferencePath.empty())
+ if (!addressReferencePath.empty())
{
- LOG(LINFO, ("Match addresses for booking objects",addressReferencePath));
+ LOG(LINFO, ("Reference addresses for booking objects", addressReferencePath));
Platform & platform = GetPlatform();
- string backupPath = platform.WritableDir();
+ string const backupPath = platform.WritableDir();
platform.SetWritableDirForTests(addressReferencePath);
- Framework f;
+ AddressMatcher addressMatcher;
size_t matchedNum = 0;
size_t emptyAddr = 0;
for (Hotel & hotel : m_hotels)
- {
- search::AddressInfo info = f.GetAddressInfoAtPoint(MercatorBounds::FromLatLon(hotel.lat, hotel.lon));
- hotel.street = info.m_street;
- hotel.houseNumber = info.m_house;
+ {
+ addressMatcher(hotel);
if (hotel.address.empty())
++emptyAddr;
- if(!info.FormatAddress().empty())
+ if (hotel.IsAddressPartsFilled())
++matchedNum;
}
- LOG(LINFO, ("Num of hotels:", m_hotels.size(), "matched:", matchedNum, "Empty addresses:", emptyAddr));
+ LOG(LINFO,
+ ("Num of hotels:", m_hotels.size(), "matched:", matchedNum, "empty addresses:", emptyAddr));
platform.SetWritableDirForTests(backupPath);
}
@@ -327,7 +349,7 @@ void BookingDataset::LoadHotels(istream & src, string const & addressReferencePa
for (auto const & hotel : m_hotels)
{
TBox b(TPoint(hotel.lat, hotel.lon), TPoint(hotel.lat, hotel.lon));
- m_rtree.insert(std::make_pair(b, counter));
+ m_rtree.insert(make_pair(b, counter));
++counter;
}
}
diff --git a/generator/booking_dataset.hpp b/generator/booking_dataset.hpp
index 09956be10d..f56bba4d17 100644
--- a/generator/booking_dataset.hpp
+++ b/generator/booking_dataset.hpp
@@ -2,6 +2,10 @@
#include "generator/osm_element.hpp"
+#include "indexer/index.hpp"
+
+#include "search/reverse_geocoder.hpp"
+
#include "boost/geometry.hpp"
#include "boost/geometry/geometries/point.hpp"
#include "boost/geometry/geometries/box.hpp"
@@ -59,6 +63,18 @@ public:
static constexpr size_t Index(Fields field) { return static_cast<size_t>(field); }
static constexpr size_t FieldsCount() { return static_cast<size_t>(Fields::Counter); }
explicit Hotel(string const & src);
+
+ inline bool IsAddressPartsFilled() const { return !street.empty() || !houseNumber.empty(); }
+ };
+
+ class AddressMatcher
+ {
+ Index m_index;
+ unique_ptr<search::ReverseGeocoder> m_coder;
+
+ public:
+ AddressMatcher();
+ void operator()(Hotel & hotel);
};
explicit BookingDataset(string const & dataPath, string const & addressReferencePath = string());
@@ -69,6 +85,7 @@ public:
inline size_t Size() const { return m_hotels.size(); }
Hotel const & GetHotel(size_t index) const;
+ Hotel & GetHotel(size_t index);
vector<size_t> GetNearestHotels(double lat, double lon, size_t limit,
double maxDistance = 0.0) const;
bool MatchByName(string const & osmName, vector<size_t> const & bookingIndexes) const;
diff --git a/generator/booking_quality_check/booking_addr_match.cpp b/generator/booking_quality_check/booking_addr_match.cpp
index 9d063be0bb..d8ccc394b5 100644
--- a/generator/booking_quality_check/booking_addr_match.cpp
+++ b/generator/booking_quality_check/booking_addr_match.cpp
@@ -3,18 +3,6 @@
#include "map/framework.hpp"
-#include "indexer/classificator_loader.hpp"
-#include "indexer/data_header.hpp"
-#include "indexer/index.hpp"
-#include "indexer/mwm_set.hpp"
-
-#include "platform/country_file.hpp"
-#include "platform/local_country_file.hpp"
-#include "platform/local_country_file_utils.hpp"
-#include "platform/platform.hpp"
-
-#include "geometry/distance_on_sphere.hpp"
-
#include "search/processor_factory.hpp"
#include "search/ranking_info.hpp"
#include "search/result.hpp"
@@ -22,12 +10,24 @@
#include "search/search_tests_support/test_search_engine.hpp"
#include "search/search_tests_support/test_search_request.hpp"
+#include "indexer/classificator_loader.hpp"
+#include "indexer/data_header.hpp"
+#include "indexer/index.hpp"
+#include "indexer/mwm_set.hpp"
+
#include "storage/country_info_getter.hpp"
#include "storage/index.hpp"
#include "storage/storage.hpp"
#include "coding/reader_wrapper.hpp"
+#include "geometry/distance_on_sphere.hpp"
+
+#include "platform/country_file.hpp"
+#include "platform/local_country_file.hpp"
+#include "platform/local_country_file_utils.hpp"
+#include "platform/platform.hpp"
+
#include "std/fstream.hpp"
#include "std/iostream.hpp"
#include "std/numeric.hpp"
@@ -40,49 +40,17 @@ using namespace storage;
using namespace search;
using namespace search::tests_support;
-void DidDownload(TCountryId const & /* countryId */,
- shared_ptr<platform::LocalCountryFile> const & /* localFile */)
-{
-}
-
-bool WillDelete(TCountryId const & /* countryId */,
- shared_ptr<platform::LocalCountryFile> const & /* localFile */)
-{
- return false;
-}
-
-uint64_t ReadVersionFromHeader(platform::LocalCountryFile const & mwm)
-{
- vector<string> specialFiles = {
- WORLD_FILE_NAME,
- WORLD_COASTS_FILE_NAME,
- WORLD_COASTS_OBSOLETE_FILE_NAME
- };
- for (auto const & name : specialFiles)
- {
- if (mwm.GetCountryName() == name)
- return mwm.GetVersion();
- }
-
- ModelReaderPtr reader = FilesContainerR(mwm.GetPath(MapOptions::Map)).GetReader(VERSION_FILE_TAG);
- ReaderSrc src(reader.GetPtr());
-
- version::MwmVersion version;
- version::ReadVersion(src, version);
- return version.GetVersion();
-}
-
DEFINE_string(booking_data, "", "Path to booking data in .tsv format");
DEFINE_string(user_resource_path, "", "Path to data directory (resources dir)");
DEFINE_string(data_path, "", "Path to mwm files (writable dir)");
DEFINE_string(locale, "en", "Locale of all the search queries");
DEFINE_int32(num_threads, 1, "Number of search engine threads");
-
int main(int argc, char * argv[])
{
- google::SetUsageMessage("Takes OSM XML data from stdin and creates"
- " data and index files in several passes.");
+ google::SetUsageMessage(
+ "Takes OSM XML data from stdin and creates"
+ " data and index files in several passes.");
google::ParseCommandLineFlags(&argc, &argv, true);
Platform & platform = GetPlatform();
@@ -106,30 +74,30 @@ int main(int argc, char * argv[])
LOG_SHORT(LINFO, ("Booking data:", FLAGS_booking_data));
BookingDataset bookingDataset(FLAGS_booking_data);
-
-
- Framework f;
+ BookingDataset::AddressMatcher addressMatcher;
size_t matchedNum = 0;
size_t emptyAddr = 0;
for (size_t i = 0; i < bookingDataset.Size(); ++i)
{
- BookingDataset::Hotel const & hotel = bookingDataset.GetHotel(i);
+ BookingDataset::Hotel & hotel = bookingDataset.GetHotel(i);
- search::AddressInfo info = f.GetAddressInfoAtPoint(MercatorBounds::FromLatLon(hotel.lat, hotel.lon));
+ addressMatcher(hotel);
if (hotel.address.empty())
++emptyAddr;
- if(!info.FormatAddress().empty())
+ if (hotel.IsAddressPartsFilled())
{
++matchedNum;
cout << "[" << i << "/" << bookingDataset.Size() << "] Hotel: " << hotel.address
- << " AddLoc: " << hotel.addressLoc << " --> " << info.FormatAddress() << endl;
+ << " AddLoc: " << hotel.translations << " --> " << hotel.street << " "
+ << hotel.houseNumber << endl;
}
}
- cout << "Num of hotels: " << bookingDataset.Size() << " matched: " << matchedNum << " Empty addresses: " << emptyAddr << endl;
+ cout << "Num of hotels: " << bookingDataset.Size() << " matched: " << matchedNum
+ << " Empty addresses: " << emptyAddr << endl;
return 0;
}
diff --git a/generator/generator_tests/booking_test.cpp b/generator/generator_tests/booking_test.cpp
index f7ed68feed..ef2233a6e1 100644
--- a/generator/generator_tests/booking_test.cpp
+++ b/generator/generator_tests/booking_test.cpp
@@ -11,7 +11,10 @@ UNIT_TEST(BookingDataset_SmokeTest)
UNIT_TEST(BookingDataset_ParseTest)
{
- stringstream ss("1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/appartement-alger-centre-alger.html\t201\t\t\t");
+ stringstream ss(
+ "1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed "
+ "Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "appartement-alger-centre-alger.html\t201\t\t\t");
generator::BookingDataset data(ss);
TEST_EQUAL(data.Size(), 1, ());
}
@@ -19,17 +22,40 @@ UNIT_TEST(BookingDataset_ParseTest)
UNIT_TEST(BookingDataset_ParseTest2)
{
stringstream ss(
- "1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/appartement-alger-centre-alger.html\t201\t\t\t\n"
- "357811\t34.86737239675703\t-1.31686270236969\tRenaissance Tlemcen Hotel\tRenaissance Tlemcen Hotel\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/renaissance-tlemcen.html\t204\t\t\t\n" \
- "1500820\t36.72847621708523\t3.0645270245369147\tMazghana Apartment\tCite Garidi 1 Tours 3 N 53, Kouba\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/mazghana-apartment.html\t201\t\t\t\n" \
- "1318991\t35.692865978372666\t-0.6278949570083796\tBest Western Hotel Colombe\t6 Bd Zabour Larbi Hai Khaldia Delmonte\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/best-western-colombe.html\t204\t\t\t\n" \
- "1495828\t36.33835943\t6.626214981\tConstantine Marriott Hotel\tOued Rhumel Street, Cites des Arcades Romaines,\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/constantine-marriott.html\t204\t\t\t\n" \
- "1411999\t35.73994643933386\t-0.757756233215332\tResidence Nadra\tBoulevard de la plage, Niche 1236 Paradis plage\t0\t1\tNone\tNone\thttp://www.booking.com/hotel/dz/residence-nadra.html\t201\t\t\t\n" \
- "1497769\t36.80667121575615\t3.231203541069817\tApartment La Pérouse\tLa Pérouse Ain Taya\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/apartment-la-perouse.html\t220\t\t\t\n" \
- "1668244\t36.715150622433804\t2.8442734479904175\tAZ Hotel Zeralda\t09 Rue de Mahelma - Zeralda - ALGER\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/el-aziz-zeralda.html\t204\t\t\t\n" \
- "1486823\t36.73432645678891\t3.0335435271263123\tGuest House Marhaba\tResidence Soumam - Bloc B - Appt 17- Said Hamdine\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/marhaba.html\t208\t\t\t\n" \
- "1759799\t35.73832476589291\t-0.7553583383560181\tHotel la brise\tAngle boulevard de la plage et route nationale niche 1159 paradis plage\t2\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/la-brise.html\t204\t\t\t\n"
- );
+ "1485988\t36.75818960879561\t3.053177244180233\tAppartement Alger Centre\t50 Avenue Ahmed "
+ "Ghermoul\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "appartement-alger-centre-alger.html\t201\t\t\t\n"
+ "357811\t34.86737239675703\t-1.31686270236969\tRenaissance Tlemcen Hotel\tRenaissance "
+ "Tlemcen "
+ "Hotel\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "renaissance-tlemcen.html\t204\t\t\t\n"
+ "1500820\t36.72847621708523\t3.0645270245369147\tMazghana Apartment\tCite Garidi 1 Tours 3 N "
+ "53, "
+ "Kouba\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "mazghana-apartment.html\t201\t\t\t\n"
+ "1318991\t35.692865978372666\t-0.6278949570083796\tBest Western Hotel Colombe\t6 Bd Zabour "
+ "Larbi Hai Khaldia "
+ "Delmonte\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "best-western-colombe.html\t204\t\t\t\n"
+ "1495828\t36.33835943\t6.626214981\tConstantine Marriott Hotel\tOued Rhumel Street, Cites "
+ "des Arcades "
+ "Romaines,\t5\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "constantine-marriott.html\t204\t\t\t\n"
+ "1411999\t35.73994643933386\t-0.757756233215332\tResidence Nadra\tBoulevard de la plage, "
+ "Niche 1236 Paradis "
+ "plage\t0\t1\tNone\tNone\thttp://www.booking.com/hotel/dz/residence-nadra.html\t201\t\t\t\n"
+ "1497769\t36.80667121575615\t3.231203541069817\tApartment La Pérouse\tLa Pérouse Ain "
+ "Taya\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/"
+ "apartment-la-perouse.html\t220\t\t\t\n"
+ "1668244\t36.715150622433804\t2.8442734479904175\tAZ Hotel Zeralda\t09 Rue de Mahelma - "
+ "Zeralda - "
+ "ALGER\t4\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/el-aziz-zeralda.html\t204\t\t\t\n"
+ "1486823\t36.73432645678891\t3.0335435271263123\tGuest House Marhaba\tResidence Soumam - "
+ "Bloc B - Appt 17- Said "
+ "Hamdine\t0\t0\tNone\tNone\thttp://www.booking.com/hotel/dz/marhaba.html\t208\t\t\t\n"
+ "1759799\t35.73832476589291\t-0.7553583383560181\tHotel la brise\tAngle boulevard de la "
+ "plage et route nationale niche 1159 paradis "
+ "plage\t2\t2\tNone\tNone\thttp://www.booking.com/hotel/dz/la-brise.html\t204\t\t\t\n");
generator::BookingDataset data(ss);
TEST_EQUAL(data.Size(), 10, ());
-} \ No newline at end of file
+}
diff --git a/generator/generator_tests/generator_tests.pro b/generator/generator_tests/generator_tests.pro
index f3b4141758..11683b6b58 100644
--- a/generator/generator_tests/generator_tests.pro
+++ b/generator/generator_tests/generator_tests.pro
@@ -4,12 +4,9 @@ CONFIG -= app_bundle
TEMPLATE = app
ROOT_DIR = ../..
-#DEPENDENCIES = generator map routing indexer platform geometry coding base \
-# expat tess2 protobuf tomcrypt osrm succinct
-
-DEPENDENCIES = drape_frontend routing search storage indexer drape map platform editor geometry \
+DEPENDENCIES = generator drape_frontend routing search storage indexer drape map platform editor geometry \
coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \
- minizip succinct pugixml tess2 gflags oauthcpp generator
+ minizip succinct pugixml tess2 gflags oauthcpp
include($$ROOT_DIR/common.pri)
diff --git a/generator/generator_tool/generator_tool.pro b/generator/generator_tool/generator_tool.pro
index 9e332c77e3..e04a45e7e2 100644
--- a/generator/generator_tool/generator_tool.pro
+++ b/generator/generator_tool/generator_tool.pro
@@ -1,18 +1,10 @@
# Generator binary
ROOT_DIR = ../..
-#DEPENDENCIES = generator map search routing storage indexer platform editor geometry coding base \
-# osrm gflags expat tess2 jansson protobuf tomcrypt \
-# succinct stats_client pugixml
-#DEPENDENCIES = generator drape map drape_frontend routing search storage indexer platform editor geometry \
-# coding base freetype gflags expat tess2 fribidi tomcrypt jansson protobuf osrm stats_client \
-# minizip succinct pugixml oauthcpp
-
-DEPENDENCIES = drape_frontend routing search storage indexer drape map platform editor geometry \
+DEPENDENCIES = generator routing search storage indexer editor platform geometry \
coding base freetype expat fribidi tomcrypt jansson protobuf osrm stats_client \
- minizip succinct pugixml tess2 gflags oauthcpp generator
-
+ minizip succinct pugixml tess2 gflags oauthcpp
include($$ROOT_DIR/common.pri)
INCLUDEPATH *= $$ROOT_DIR/3party/gflags/src
diff --git a/generator/osm_source.cpp b/generator/osm_source.cpp
index 2ef84e5dc8..6d62f44780 100644
--- a/generator/osm_source.cpp
+++ b/generator/osm_source.cpp
@@ -513,9 +513,10 @@ bool GenerateFeaturesImpl(feature::GenerateInfo & info)
TagAdmixer tagAdmixer(info.GetIntermediateFileName("ways", ".csv"),
info.GetIntermediateFileName("towns", ".csv"));
TagReplacer tagReplacer(GetPlatform().ResourcesDir() + REPLACED_TAGS_FILE);
-
+
// If info.m_bookingDatafileName is empty then no data will be loaded.
- generator::BookingDataset bookingDataset(info.m_bookingDatafileName, info.m_bookingReferenceDir);
+ generator::BookingDataset bookingDataset(info.m_bookingDatafileName,
+ info.m_bookingReferenceDir);
stringstream skippedElements;