Port .tld and .tls data
This commit is contained in:
parent
b1dfbce675
commit
5d7d5fceba
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user