diff --git a/feature_list/feature_list.cpp b/feature_list/feature_list.cpp index f74e37f05f..06be6aa78e 100644 --- a/feature_list/feature_list.cpp +++ b/feature_list/feature_list.cpp @@ -180,7 +180,9 @@ public: { f.ParseBeforeStatistic(); string const & category = GetReadableType(f); - if (!f.HasName() || f.GetFeatureType() == feature::GEOM_LINE || category.empty()) + // "operator" is a reserved word, hence "operatr". This word is pretty common in C++ projects. + string const & operatr = f.GetMetadata().Get(feature::Metadata::FMD_OPERATOR); + if ((!f.HasName() && operatr.empty()) || f.GetFeatureType() == feature::GEOM_LINE || category.empty()) return; m2::PointD const & center = FindCenter(f); ms::LatLon const & ll = MercatorBounds::ToLatLon(center); @@ -195,23 +197,34 @@ public: string const & mwmName = f.GetID().GetMwmName(); string name, secondary; f.GetPreferredNames(name, secondary); + if (name.empty()) + name = operatr; string const & uid = BuildUniqueId(ll, name); string const & lat = strings::to_string_with_digits_after_comma(ll.lat, 6); string const & lon = strings::to_string_with_digits_after_comma(ll.lon, 6); search::ReverseGeocoder::Address addr; string addrStreet = ""; string addrHouse = ""; + double constexpr kDistanceThresholdMeters = 0.5; if (m_geocoder.GetExactAddress(f, addr)) { addrStreet = addr.GetStreetName(); addrHouse = addr.GetHouseNumber(); } + else + { + m_geocoder.GetNearbyAddress(center, addr); + if (addr.GetDistance() < kDistanceThresholdMeters) + { + addrStreet = addr.GetStreetName(); + addrHouse = addr.GetHouseNumber(); + } + } string const & phone = f.GetMetadata().Get(feature::Metadata::FMD_PHONE_NUMBER); string const & website = f.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); string cuisine = f.GetMetadata().Get(feature::Metadata::FMD_CUISINE); replace(cuisine.begin(), cuisine.end(), ';', ','); string const & stars = f.GetMetadata().Get(feature::Metadata::FMD_STARS); - string const & operatr = f.GetMetadata().Get(feature::Metadata::FMD_OPERATOR); string const & internet = f.GetMetadata().Get(feature::Metadata::FMD_INTERNET); string const & denomination = f.GetMetadata().Get(feature::Metadata::FMD_DENOMINATION); string const & wheelchair = GetWheelchairType(f); @@ -284,8 +297,6 @@ int main(int argc, char ** argv) mwms); for (auto & mwm : mwms) { - if (argc > 3 && !strings::StartsWith(mwm.GetCountryName(), argv[3])) - continue; mwm.SyncWithDisk(); auto const & p = index.RegisterMap(mwm); CHECK_EQUAL(MwmSet::RegResult::Success, p.second, ("Could not register map", mwm)); @@ -301,6 +312,8 @@ int main(int argc, char ** argv) { if (mwmInfo->GetType() != MwmInfo::COUNTRY) continue; + if (argc > 3 && !strings::StartsWith(mwmInfo->GetCountryName() + DATA_FILE_EXTENSION, argv[3])) + continue; LOG(LINFO, ("Processing", mwmInfo->GetCountryName())); MwmSet::MwmId mwmId(mwmInfo); Index::FeaturesLoaderGuard loader(index, mwmId); diff --git a/tools/unix/generate_planet.sh b/tools/unix/generate_planet.sh index 3fa5ae09b2..73b103ab5d 100755 --- a/tools/unix/generate_planet.sh +++ b/tools/unix/generate_planet.sh @@ -302,23 +302,23 @@ fi if [ ! -f "$VIATOR_FILE" -a -n "${VIATOR_KEY-}" ]; then log "STATUS" "Step S3: Starting background viator cities downloading" ( - $PYTHON $VIATOR_SCRIPT --apikey $VIATOR_KEY --output "$VIATOR_FILE" 2>"$LOG_PATH"/viator.log || true - if [ -f "$VIATOR_FILE" -a "$(wc -l < "$VIATOR_FILE" || echo 0)" -gt 100 ]; then - echo "Viator cities have been downloaded. Please ensure this line is before Step 4." >> "$PLANET_LOG" + $PYTHON $VIATOR_SCRIPT --apikey $VIATOR_KEY --output "$VIATOR_FILE" 2>"$LOG_PATH"/viator.log || true + if [ -f "$VIATOR_FILE" -a "$(wc -l < "$VIATOR_FILE" || echo 0)" -gt 100 ]; then + echo "Viator cities have been downloaded. Please ensure this line is before Step 4." >> "$PLANET_LOG" + else + if [ -n "${OLD_INTDIR-}" -a -f "${OLD_INTDIR-}/$(basename "$VIATOR_FILE")" ]; then + cp "$OLD_INTDIR/$(basename "$VIATOR_FILE")" "$INTDIR" + warn "Failed to download viator cities! Using older viator cities list." else - if [ -n "${OLD_INTDIR-}" -a -f "${OLD_INTDIR-}/$(basename "$VIATOR_FILE")" ]; then - cp "$OLD_INTDIR/$(basename "$VIATOR_FILE")" "$INTDIR" - warn "Failed to download viator cities! Using older viator cities list." - else - warn "Failed to download viator cities!" - fi - [ -n "${MAIL-}" ] && tail "$LOG_PATH/viator.log" | mailx -s "Failed to download viator cities at $(hostname), please hurry to fix" "$MAIL" + warn "Failed to download viator cities!" fi + [ -n "${MAIL-}" ] && tail "$LOG_PATH/viator.log" | mailx -s "Failed to download viator cities at $(hostname), please hurry to fix" "$MAIL" + fi ) & fi # Download UGC (user generated content) database. -if if [ ! -f "$UGC_FILE" -a -n "${UGC_DATABASE_URL-}" ]; then +if [ ! -f "$UGC_FILE" -a -n "${UGC_DATABASE_URL-}" ]; then putmode "Step UGC: Dowloading UGC database" ( curl "$UGC_DATABASE_URL" --output "$UGC_FILE" --silent || true @@ -573,12 +573,14 @@ fi if [ -n "${LOCALADS-}" ]; then putmode "Step AD: Generating CSV for local ads database" ( + LOCALADS_LOG="$LOG_PATH/localads.log" LOCALADS_PATH="$INTDIR/localads" mkdir -p "$LOCALADS_PATH" - $PYTHON "$LOCALADS_SCRIPT" "$TARGET" --osm2ft "$INTDIR" --version "$COUNTRIES_VERSION" --types "$DATA_PATH" --output "$LOCALADS_PATH" >> /dev/null 2>&1 - LOCALADS_ARCHIVE="$INTDIR/localads_$COUNTRIES_VERSION.tgz" - tar -czf "$LOCALADS_ARCHIVE" "$LOCALADS_PATH"/* >> "$PLANET_LOG" 2>&1 - AD_URL="$(curl -s --upload-file "$LOCALADS_ARCHIVE" "https://t.bk.ru/$(basename "$LOCALADS_ARCHIVE")")" >> "$PLANET_LOG" 2>&1 + $PYTHON "$LOCALADS_SCRIPT" "$TARGET" --osm2ft "$INTDIR" --version "$COUNTRIES_VERSION" --types "$DATA_PATH/types.txt" --output "$LOCALADS_PATH" >> "$LOCALADS_LOG" 2>&1 + LOCALADS_ARCHIVE="localads_$COUNTRIES_VERSION.tgz" + cd "$LOCALADS_PATH" + tar -czf "$LOCALADS_ARCHIVE" *.csv >> "$LOCALADS_LOG" 2>&1 + AD_URL="$(curl -s --upload-file "$LOCALADS_ARCHIVE" "https://t.bk.ru/$(basename "$LOCALADS_ARCHIVE")")" >> "$LOCALADS_LOG" 2>&1 log STATUS "Uploaded localads file: $AD_URL" ) & fi