From f07dde952f843b7660d45f4eac2d031a6a4abe54 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Tue, 26 Dec 2017 15:53:03 +0300 Subject: [PATCH] srtm_coverage_checker implementation without osrm. --- generator/CMakeLists.txt | 1 + .../srtm_coverage_checker/CMakeLists.txt | 42 ++++++++ .../srtm_coverage_checker.cpp | 100 ++++++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 generator/srtm_coverage_checker/CMakeLists.txt create mode 100644 generator/srtm_coverage_checker/srtm_coverage_checker.cpp diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt index e5080773ab..6484804fa8 100644 --- a/generator/CMakeLists.txt +++ b/generator/CMakeLists.txt @@ -113,3 +113,4 @@ add_subdirectory(generator_tool) add_subdirectory(booking_quality_check) add_subdirectory(feature_segments_checker) add_subdirectory(restaurants_info) +add_subdirectory(srtm_coverage_checker) diff --git a/generator/srtm_coverage_checker/CMakeLists.txt b/generator/srtm_coverage_checker/CMakeLists.txt new file mode 100644 index 0000000000..34889d4fdb --- /dev/null +++ b/generator/srtm_coverage_checker/CMakeLists.txt @@ -0,0 +1,42 @@ +project(srtm_coverage_checker) + +include_directories( + ${OMIM_ROOT}/3party/gflags/src + ${OMIM_ROOT}/3party/jansson/src +) + +set( + SRC + srtm_coverage_checker.cpp +) + +omim_add_executable(${PROJECT_NAME} ${SRC}) + +omim_link_libraries( + ${PROJECT_NAME} + generator + map + routing + routing_common + traffic + indexer + editor + platform + geometry + coding + base + agg + gflags + icu + jansson + minizip + oauthcpp + opening_hours + protobuf + pugixml + stats_client + succinct + ${LIBZ} +) + +link_qt5_core(${PROJECT_NAME}) diff --git a/generator/srtm_coverage_checker/srtm_coverage_checker.cpp b/generator/srtm_coverage_checker/srtm_coverage_checker.cpp new file mode 100644 index 0000000000..995c164df2 --- /dev/null +++ b/generator/srtm_coverage_checker/srtm_coverage_checker.cpp @@ -0,0 +1,100 @@ +#include "generator/srtm_parser.hpp" + +#include "map/feature_vec_model.hpp" + +#include "routing/routing_helpers.hpp" + +#include "indexer/classificator.hpp" +#include "indexer/classificator_loader.hpp" +#include "indexer/feature.hpp" +#include "indexer/feature_altitude.hpp" +#include "indexer/feature_data.hpp" +#include "indexer/feature_processor.hpp" + +#include "coding/file_name_utils.hpp" + +#include "platform/country_file.hpp" +#include "platform/local_country_file.hpp" +#include "platform/local_country_file_utils.hpp" +#include "platform/platform.hpp" + +#include "base/logging.hpp" + +#include +#include +#include +#include + +#include "3party/gflags/src/gflags/gflags.h" + +DEFINE_string(srtm_path, "", "Path to directory with SRTM files"); +DEFINE_string(mwm_path, "", "Path to mwm files (writable dir)"); + +using namespace feature; +using namespace platform; +using namespace routing; +using namespace std; + +int main(int argc, char * argv[]) +{ + google::SetUsageMessage("SRTM coverage checker."); + google::ParseCommandLineFlags(&argc, &argv, true); + + Platform & platform = GetPlatform(); + if (!FLAGS_mwm_path.empty()) + platform.SetWritableDirForTests(FLAGS_mwm_path); + + if (FLAGS_srtm_path.empty()) + { + LOG(LERROR, ("SRTM files directory is not specified.")); + return -1; + } + + LOG(LINFO, ("writable dir =", platform.WritableDir())); + LOG(LINFO, ("srtm dir =", FLAGS_srtm_path)); + + vector localFiles; + platform::FindAllLocalMapsAndCleanup(numeric_limits::max() /* latestVersion */, + localFiles); + + generator::SrtmTileManager manager(FLAGS_srtm_path); + classificator::Load(); + classif().SortClassificator(); + + for (auto & file : localFiles) + { + file.SyncWithDisk(); + if (file.GetFiles() != MapOptions::MapWithCarRouting) + { + LOG(LINFO, ("Warning! Routing file not found for:", file.GetCountryName())); + continue; + } + + auto const path = file.GetPath(MapOptions::CarRouting); + LOG(LINFO, ("Mwm", path, "is being processed.")); + + size_t all = 0; + size_t good = 0; + ForEachFromDat(path, [&](FeatureType & ft, uint32_t fid) { + if (!IsRoad(TypesHolder(ft))) + return; + + ft.ParseGeometry(FeatureType::BEST_GEOMETRY); + all += ft.GetPointsCount(); + + for (size_t i = 0; i < ft.GetPointsCount(); ++i) + { + auto const height = manager.GetHeight(MercatorBounds::ToLatLon(ft.GetPoint(i))); + if (height != feature::kInvalidAltitude) + good++; + } + }); + + auto const bad = all - good; + auto const percent = all == 0 ? 0.0 : bad * 100.0 / all; + LOG(LINFO, (percent > 10.0 ? "Huge" : "Low", "error rate in:", file.GetCountryName(), + "good:", good, "bad:", bad, "all:", all, "%:", percent)); + } + + return 0; +}