Port .tld and .tls data

This commit is contained in:
Patrick Niklaus 2018-03-19 14:47:50 +00:00
parent b1dfbce675
commit 5d7d5fceba
3 changed files with 54 additions and 43 deletions

View File

@ -10,6 +10,7 @@
#include "util/coordinate.hpp" #include "util/coordinate.hpp"
#include "util/guidance/bearing_class.hpp" #include "util/guidance/bearing_class.hpp"
#include "util/guidance/entry_class.hpp" #include "util/guidance/entry_class.hpp"
#include "util/guidance/turn_lanes.hpp"
#include "util/packed_vector.hpp" #include "util/packed_vector.hpp"
#include "util/range_table.hpp" #include "util/range_table.hpp"
#include "util/serialization.hpp" #include "util/serialization.hpp"
@ -240,11 +241,11 @@ inline void readTurnLaneDescriptions(const boost::filesystem::path &path,
""); "");
static_assert(std::is_same<typename OffsetsT::value_type, std::uint32_t>::value, ""); static_assert(std::is_same<typename OffsetsT::value_type, std::uint32_t>::value, "");
const auto fingerprint = storage::io::FileReader::VerifyFingerprint; const auto fingerprint = storage::tar::FileReader::VerifyFingerprint;
storage::io::FileReader reader{path, fingerprint}; storage::tar::FileReader reader{path, fingerprint};
storage::serialization::read(reader, turn_offsets); storage::serialization::read(reader, "/common/turn_lanes/offsets", turn_offsets);
storage::serialization::read(reader, turn_masks); storage::serialization::read(reader, "/common/turn_lanes/masks", turn_masks);
} }
// writes .osrm.tls // writes .osrm.tls
@ -257,13 +258,41 @@ inline void writeTurnLaneDescriptions(const boost::filesystem::path &path,
""); "");
static_assert(std::is_same<typename OffsetsT::value_type, std::uint32_t>::value, ""); static_assert(std::is_same<typename OffsetsT::value_type, std::uint32_t>::value, "");
const auto fingerprint = storage::io::FileWriter::GenerateFingerprint; const auto fingerprint = storage::tar::FileWriter::GenerateFingerprint;
storage::io::FileWriter writer{path, fingerprint}; storage::tar::FileWriter writer{path, fingerprint};
storage::serialization::write(writer, turn_offsets); storage::serialization::write(writer, "/common/turn_lanes/offsets", turn_offsets);
storage::serialization::write(writer, turn_masks); storage::serialization::write(writer, "/common/turn_lanes/masks", turn_masks);
} }
// reads .osrm.tld
template <typename TurnLaneDataT>
inline void readTurnLaneData(const boost::filesystem::path &path, TurnLaneDataT &turn_lane_data)
{
static_assert(std::is_same<typename TurnLaneDataT::value_type, util::guidance::LaneTupleIdPair>::value,
"");
const auto fingerprint = storage::tar::FileReader::VerifyFingerprint;
storage::tar::FileReader reader{path, fingerprint};
storage::serialization::read(reader, "/common/turn_lanes/data", turn_lane_data);
}
// writes .osrm.tld
template <typename TurnLaneDataT>
inline void writeTurnLaneData(const boost::filesystem::path &path,
const TurnLaneDataT &turn_lane_data)
{
static_assert(std::is_same<typename TurnLaneDataT::value_type, util::guidance::LaneTupleIdPair>::value,
"");
const auto fingerprint = storage::tar::FileWriter::GenerateFingerprint;
storage::tar::FileWriter writer{path, fingerprint};
storage::serialization::write(writer, "/common/turn_lanes/data", turn_lane_data);
}
// reads .osrm.maneuver_overrides // reads .osrm.maneuver_overrides
template <typename StorageManeuverOverrideT, typename NodeSequencesT> template <typename StorageManeuverOverrideT, typename NodeSequencesT>
inline void readManeuverOverrides(const boost::filesystem::path &path, inline void readManeuverOverrides(const boost::filesystem::path &path,

View File

@ -550,9 +550,9 @@ Extractor::ParseOSMData(ScriptingEnvironment &scripting_environment,
const auto &rel = static_cast<const osmium::Relation &>(*entity); const auto &rel = static_cast<const osmium::Relation &>(*entity);
const char *rel_type = rel.get_value_by_key("type"); const char *rel_type = rel.get_value_by_key("type");
if (!rel_type || if (!rel_type || !std::binary_search(relation_types.begin(),
!std::binary_search( relation_types.end(),
relation_types.begin(), relation_types.end(), std::string(rel_type))) std::string(rel_type)))
continue; continue;
ExtractionRelation extracted_rel({rel.id(), osmium::item_type::relation}); ExtractionRelation extracted_rel({rel.id(), osmium::item_type::relation});
@ -945,9 +945,11 @@ void Extractor::ProcessGuidanceTurns(
util::Log() << "Writing Turns and Lane Data..."; util::Log() << "Writing Turns and Lane Data...";
TIMER_START(write_guidance_data); TIMER_START(write_guidance_data);
storage::io::FileWriter writer(config.GetPath(".osrm.tld").string(),
storage::io::FileWriter::GenerateFingerprint); {
storage::serialization::write(writer, convertIDMapToVector(lane_data_map.data)); auto turn_lane_data = convertIDMapToVector(lane_data_map.data);
files::writeTurnLaneData(config.GetPath(".osrm.tld"), turn_lane_data);
}
{ // Turn lanes handler modifies lane_description_map, so another transformation is needed { // Turn lanes handler modifies lane_description_map, so another transformation is needed
std::vector<std::uint32_t> turn_lane_offsets; std::vector<std::uint32_t> turn_lane_offsets;

View File

@ -250,16 +250,6 @@ void Storage::PopulateLayout(DataLayout &layout)
layout.SetBlock(DataLayout::NAME_CHAR_DATA, make_block<char>(name_file.GetSize())); layout.SetBlock(DataLayout::NAME_CHAR_DATA, make_block<char>(name_file.GetSize()));
} }
{
io::FileReader reader(config.GetPath(".osrm.tls"), io::FileReader::VerifyFingerprint);
auto num_offsets = reader.ReadVectorSize<std::uint32_t>();
auto num_masks = reader.ReadVectorSize<extractor::TurnLaneType::Mask>();
layout.SetBlock(DataLayout::LANE_DESCRIPTION_OFFSETS,
make_block<std::uint32_t>(num_offsets));
layout.SetBlock(DataLayout::LANE_DESCRIPTION_MASKS,
make_block<extractor::TurnLaneType::Mask>(num_masks));
}
// Loading information for original edges // Loading information for original edges
{ {
@ -317,15 +307,6 @@ void Storage::PopulateLayout(DataLayout &layout)
make_block<TurnPenalty>(number_of_penalties)); make_block<TurnPenalty>(number_of_penalties));
} }
{
// Loading turn lane data
io::FileReader lane_data_file(config.GetPath(".osrm.tld"),
io::FileReader::VerifyFingerprint);
const auto lane_tuple_count = lane_data_file.ReadElementCount64();
layout.SetBlock(DataLayout::TURN_LANE_DATA,
make_block<util::guidance::LaneTupleIdPair>(lane_tuple_count));
}
// load maneuver overrides // load maneuver overrides
{ {
io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"), io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"),
@ -398,6 +379,9 @@ void Storage::PopulateLayout(DataLayout &layout)
{"/common/segment_data/reverse_data_sources", DataLayout::GEOMETRIES_REV_DATASOURCES_LIST}, {"/common/segment_data/reverse_data_sources", DataLayout::GEOMETRIES_REV_DATASOURCES_LIST},
{"/common/ebg_node_data/nodes", DataLayout::EDGE_BASED_NODE_DATA_LIST}, {"/common/ebg_node_data/nodes", DataLayout::EDGE_BASED_NODE_DATA_LIST},
{"/common/ebg_node_data/annotations", DataLayout::ANNOTATION_DATA_LIST}, {"/common/ebg_node_data/annotations", DataLayout::ANNOTATION_DATA_LIST},
{"/common/turn_lanes/offsets", DataLayout::LANE_DESCRIPTION_OFFSETS},
{"/common/turn_lanes/masks", DataLayout::LANE_DESCRIPTION_MASKS},
{"/common/turn_lanes/data", DataLayout::TURN_LANE_DATA},
}; };
std::vector<NamedBlock> blocks; std::vector<NamedBlock> blocks;
@ -415,6 +399,8 @@ void Storage::PopulateLayout(DataLayout &layout)
{REQUIRED, config.GetPath(".osrm.datasource_names")}, {REQUIRED, config.GetPath(".osrm.datasource_names")},
{REQUIRED, config.GetPath(".osrm.geometry")}, {REQUIRED, config.GetPath(".osrm.geometry")},
{REQUIRED, config.GetPath(".osrm.ebg_nodes")}, {REQUIRED, config.GetPath(".osrm.ebg_nodes")},
{REQUIRED, config.GetPath(".osrm.tls")},
{REQUIRED, config.GetPath(".osrm.tld")},
}; };
for (const auto &file : tar_files) for (const auto &file : tar_files)
@ -483,18 +469,12 @@ void Storage::PopulateData(const DataLayout &layout, char *memory_ptr)
// Turn lane data // Turn lane data
{ {
io::FileReader lane_data_file(config.GetPath(".osrm.tld"),
io::FileReader::VerifyFingerprint);
const auto lane_tuple_count = lane_data_file.ReadElementCount64();
// Need to call GetBlockPtr -> it write the memory canary, even if no data needs to be
// loaded.
const auto turn_lane_data_ptr = layout.GetBlockPtr<util::guidance::LaneTupleIdPair, true>( const auto turn_lane_data_ptr = layout.GetBlockPtr<util::guidance::LaneTupleIdPair, true>(
memory_ptr, DataLayout::TURN_LANE_DATA); memory_ptr, DataLayout::TURN_LANE_DATA);
BOOST_ASSERT(lane_tuple_count * sizeof(util::guidance::LaneTupleIdPair) == util::vector_view<util::guidance::LaneTupleIdPair> turn_lane_data(
layout.GetBlockSize(DataLayout::TURN_LANE_DATA)); turn_lane_data_ptr, layout.GetBlockEntries(storage::DataLayout::TURN_LANE_DATA));
lane_data_file.ReadInto(turn_lane_data_ptr, lane_tuple_count);
extractor::files::readTurnLaneData(config.GetPath(".osrm.tld"), turn_lane_data);
} }
// Turn lane descriptions // Turn lane descriptions