#include "extractor/edge_based_edge.hpp" #include "extractor/edge_based_graph_factory.hpp" #include "extractor/extractor_config.hpp" #include "extractor/extractor_callbacks.hpp" #include "extractor/extraction_containers.hpp" #include "extractor/graph_compressor.hpp" #include "extractor/maneuver_override.hpp" #include "extractor/packed_osm_ids.hpp" #include "extractor/restriction_graph.hpp" #include "extractor/scripting_environment_lua.hpp" #include "guidance/guidance_processing.hpp" #include "guidance/turn_data_container.hpp" #include "merger_config.hpp" #include "util/guidance/bearing_class.hpp" #include "util/guidance/entry_class.hpp" #include "util/guidance/turn_lanes.hpp" #include "util/typedefs.hpp" namespace osrm { namespace merger { class Merger { public: Merger(MergerConfig merger_config) : config(std::move(merger_config)) {} int run(); private: using MapKey = std::tuple; using MapVal = unsigned; using StringMap = std::unordered_map; MergerConfig config; void parseOSMFiles( StringMap &string_map, extractor::ExtractionContainers &extraction_containers, extractor::ExtractorCallbacks::ClassesMap &classes_map, extractor::LaneDescriptionMap &turn_lane_map, extractor::ScriptingEnvironment &scripting_environment, const boost::filesystem::path profile_path, const unsigned number_of_threads, std::vector &class_names, std::set> &excludeable_classes_set); void parseOSMData( StringMap &string_map, extractor::ExtractionContainers &extraction_containers, extractor::ExtractorCallbacks::ClassesMap &classes_map, extractor::LaneDescriptionMap &turn_lane_map, extractor::ScriptingEnvironment &scripting_environment, const boost::filesystem::path input_path, const boost::filesystem::path profile_path, const unsigned number_of_threads); void writeTimestamp(); void writeOSMData( extractor::ExtractionContainers &extraction_containers, extractor::ExtractorCallbacks::ClassesMap &classes_map, std::vector &class_names, std::vector> &excludable_classes, extractor::ScriptingEnvironment &scripting_environment); EdgeID BuildEdgeExpandedGraph( // input data const util::NodeBasedDynamicGraph &node_based_graph, const std::vector &coordinates, const extractor::CompressedEdgeContainer &compressed_edge_container, const std::unordered_set &barrier_nodes, const std::unordered_set &traffic_lights, const extractor::RestrictionGraph &restriction_graph, const std::unordered_set &segregated_edges, const extractor::NameTable &name_table, const std::vector &maneuver_overrides, const extractor::LaneDescriptionMap &turn_lane_map, // for calculating turn penalties extractor::ScriptingEnvironment &scripting_environment, // output data extractor::EdgeBasedNodeDataContainer &edge_based_nodes_container, std::vector &edge_based_node_segments, std::vector &edge_based_node_weights, std::vector &edge_based_node_durations, std::vector &edge_based_node_distances, util::DeallocatingVector &edge_based_edge_list, std::uint32_t &connectivity_checksum); void FindComponents( unsigned max_edge_id, const util::DeallocatingVector &input_edge_list, const std::vector &input_node_segments, extractor::EdgeBasedNodeDataContainer &nodes_container) const; void BuildRTree( std::vector edge_based_node_segments, const std::vector &coordinates); void ProcessGuidanceTurns( const util::NodeBasedDynamicGraph &node_based_graph, const extractor::EdgeBasedNodeDataContainer &edge_based_node_container, const std::vector &node_coordinates, const extractor::CompressedEdgeContainer &compressed_edge_container, const std::unordered_set &barrier_nodes, const extractor::RestrictionGraph &restriction_graph, const extractor::NameTable &name_table, extractor::LaneDescriptionMap lane_description_map, extractor::ScriptingEnvironment &scripting_environment); }; } }