Renumber node IDs in .osrm.maneuver_overrides
This commit is contained in:
parent
5acf660f37
commit
83588fd00f
@ -261,6 +261,29 @@ inline void writeTurnLaneDescriptions(const boost::filesystem::path &path,
|
|||||||
storage::serialization::write(writer, turn_offsets);
|
storage::serialization::write(writer, turn_offsets);
|
||||||
storage::serialization::write(writer, turn_masks);
|
storage::serialization::write(writer, turn_masks);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reads .osrm.maneuver_overrides
|
||||||
|
template <typename StorageManeuverOverrideT, typename NodeSequencesT>
|
||||||
|
inline void readManeuverOverrides(const boost::filesystem::path &path,
|
||||||
|
StorageManeuverOverrideT &maneuver_overrides,
|
||||||
|
NodeSequencesT &node_sequences)
|
||||||
|
{
|
||||||
|
const auto fingerprint = storage::io::FileReader::VerifyFingerprint;
|
||||||
|
storage::io::FileReader reader{path, fingerprint};
|
||||||
|
|
||||||
|
serialization::read(reader, maneuver_overrides, node_sequences);
|
||||||
|
}
|
||||||
|
|
||||||
|
// writes .osrm.maneuver_overrides
|
||||||
|
inline void writeManeuverOverrides(const boost::filesystem::path &path,
|
||||||
|
const std::vector<StorageManeuverOverride> &maneuver_overrides,
|
||||||
|
const std::vector<NodeID> &node_sequences)
|
||||||
|
{
|
||||||
|
const auto fingerprint = storage::io::FileWriter::GenerateFingerprint;
|
||||||
|
storage::io::FileWriter writer{path, fingerprint};
|
||||||
|
|
||||||
|
serialization::write(writer, maneuver_overrides, node_sequences);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -304,10 +304,17 @@ inline void write(storage::io::FileWriter &writer,
|
|||||||
const std::vector<StorageManeuverOverride> &maneuver_overrides,
|
const std::vector<StorageManeuverOverride> &maneuver_overrides,
|
||||||
const std::vector<NodeID> &node_sequences)
|
const std::vector<NodeID> &node_sequences)
|
||||||
{
|
{
|
||||||
writer.WriteElementCount64(maneuver_overrides.size());
|
storage::serialization::write(writer, maneuver_overrides);
|
||||||
writer.WriteElementCount64(node_sequences.size());
|
storage::serialization::write(writer, node_sequences);
|
||||||
writer.WriteFrom(maneuver_overrides);
|
}
|
||||||
writer.WriteFrom(node_sequences);
|
|
||||||
|
template <typename ManeuverOverridesT, typename NodeSequenceT>
|
||||||
|
inline void read(storage::io::FileReader &reader,
|
||||||
|
ManeuverOverridesT &maneuver_overrides,
|
||||||
|
NodeSequenceT &node_sequences)
|
||||||
|
{
|
||||||
|
storage::serialization::read(reader, maneuver_overrides);
|
||||||
|
storage::serialization::read(reader, node_sequences);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,10 +16,14 @@ namespace partitioner
|
|||||||
struct PartitionerConfig final : storage::IOConfig
|
struct PartitionerConfig final : storage::IOConfig
|
||||||
{
|
{
|
||||||
PartitionerConfig()
|
PartitionerConfig()
|
||||||
: IOConfig(
|
: IOConfig({".osrm", ".osrm.fileIndex", ".osrm.ebg_nodes"},
|
||||||
{".osrm", ".osrm.fileIndex", ".osrm.ebg_nodes"},
|
{".osrm.hsgr", ".osrm.cnbg"},
|
||||||
{".osrm.hsgr", ".osrm.cnbg"},
|
{".osrm.ebg",
|
||||||
{".osrm.ebg", ".osrm.cnbg", ".osrm.cnbg_to_ebg", ".osrm.partition", ".osrm.cells"}),
|
".osrm.cnbg",
|
||||||
|
".osrm.cnbg_to_ebg",
|
||||||
|
".osrm.partition",
|
||||||
|
".osrm.cells",
|
||||||
|
".osrm.maneuver_overrides"}),
|
||||||
requested_num_threads(0), balance(1.2), boundary_factor(0.25), num_optimizing_cuts(10),
|
requested_num_threads(0), balance(1.2), boundary_factor(0.25), num_optimizing_cuts(10),
|
||||||
small_component_size(1000),
|
small_component_size(1000),
|
||||||
max_cell_sizes({128, 128 * 32, 128 * 32 * 16, 128 * 32 * 16 * 32})
|
max_cell_sizes({128, 128 * 32, 128 * 32 * 16, 128 * 32 * 16 * 32})
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#define OSRM_PARTITIONER_RENUMBER_HPP
|
#define OSRM_PARTITIONER_RENUMBER_HPP
|
||||||
|
|
||||||
#include "extractor/edge_based_node_segment.hpp"
|
#include "extractor/edge_based_node_segment.hpp"
|
||||||
|
#include "extractor/maneuver_override.hpp"
|
||||||
#include "extractor/nbg_to_ebg.hpp"
|
#include "extractor/nbg_to_ebg.hpp"
|
||||||
#include "extractor/node_data_container.hpp"
|
#include "extractor/node_data_container.hpp"
|
||||||
|
|
||||||
@ -73,6 +74,25 @@ inline void renumber(std::vector<extractor::NBGToEBG> &mapping,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void renumber(std::vector<NodeID> &node_ids, const std::vector<std::uint32_t> &permutation)
|
||||||
|
{
|
||||||
|
for (auto &node_id : node_ids)
|
||||||
|
{
|
||||||
|
if (node_id != SPECIAL_NODEID)
|
||||||
|
node_id = permutation[node_id];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void renumber(std::vector<extractor::StorageManeuverOverride> &maneuver_overrides,
|
||||||
|
const std::vector<std::uint32_t> &permutation)
|
||||||
|
{
|
||||||
|
for (auto &maneuver_override : maneuver_overrides)
|
||||||
|
{
|
||||||
|
if (maneuver_override.start_node != SPECIAL_NODEID)
|
||||||
|
maneuver_override.start_node = permutation[maneuver_override.start_node];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace partitioner
|
} // namespace partitioner
|
||||||
} // namespace osrm
|
} // namespace osrm
|
||||||
|
|
||||||
|
@ -1106,11 +1106,9 @@ void EdgeBasedGraphFactory::GenerateEdgeExpandedEdges(
|
|||||||
std::sort(storage_maneuver_overrides.begin(),
|
std::sort(storage_maneuver_overrides.begin(),
|
||||||
storage_maneuver_overrides.end(),
|
storage_maneuver_overrides.end(),
|
||||||
[](const auto &a, const auto &b) { return a.start_node < b.start_node; });
|
[](const auto &a, const auto &b) { return a.start_node < b.start_node; });
|
||||||
// write conditional turn penalties into the restrictions file
|
|
||||||
storage::io::FileWriter writer(maneuver_overrides_filename,
|
files::writeManeuverOverrides(
|
||||||
storage::io::FileWriter::GenerateFingerprint);
|
maneuver_overrides_filename, storage_maneuver_overrides, maneuver_override_sequences);
|
||||||
extractor::serialization::write(
|
|
||||||
writer, storage_maneuver_overrides, maneuver_override_sequences);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
util::Log() << "done.";
|
util::Log() << "done.";
|
||||||
|
@ -145,6 +145,15 @@ int Partitioner::Run(const PartitionerConfig &config)
|
|||||||
renumber(node_data, permutation);
|
renumber(node_data, permutation);
|
||||||
extractor::files::writeNodeData(config.GetPath(".osrm.ebg_nodes"), node_data);
|
extractor::files::writeNodeData(config.GetPath(".osrm.ebg_nodes"), node_data);
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
const auto &filename = config.GetPath(".osrm.maneuver_overrides");
|
||||||
|
std::vector<extractor::StorageManeuverOverride> maneuver_overrides;
|
||||||
|
std::vector<NodeID> node_sequences;
|
||||||
|
extractor::files::readManeuverOverrides(filename, maneuver_overrides, node_sequences);
|
||||||
|
renumber(maneuver_overrides, permutation);
|
||||||
|
renumber(node_sequences, permutation);
|
||||||
|
extractor::files::writeManeuverOverrides(filename, maneuver_overrides, node_sequences);
|
||||||
|
}
|
||||||
if (boost::filesystem::exists(config.GetPath(".osrm.hsgr")))
|
if (boost::filesystem::exists(config.GetPath(".osrm.hsgr")))
|
||||||
{
|
{
|
||||||
util::Log(logWARNING) << "Found existing .osrm.hsgr file, removing. You need to re-run "
|
util::Log(logWARNING) << "Found existing .osrm.hsgr file, removing. You need to re-run "
|
||||||
|
@ -445,10 +445,11 @@ void Storage::PopulateLayout(DataLayout &layout)
|
|||||||
{
|
{
|
||||||
io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"),
|
io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"),
|
||||||
io::FileReader::VerifyFingerprint);
|
io::FileReader::VerifyFingerprint);
|
||||||
const auto number_of_overrides = maneuver_overrides_file.ReadElementCount64();
|
const auto number_of_overrides =
|
||||||
|
maneuver_overrides_file.ReadVectorSize<extractor::StorageManeuverOverride>();
|
||||||
layout.SetBlockSize<extractor::StorageManeuverOverride>(DataLayout::MANEUVER_OVERRIDES,
|
layout.SetBlockSize<extractor::StorageManeuverOverride>(DataLayout::MANEUVER_OVERRIDES,
|
||||||
number_of_overrides);
|
number_of_overrides);
|
||||||
const auto number_of_nodes = maneuver_overrides_file.ReadElementCount64();
|
const auto number_of_nodes = maneuver_overrides_file.ReadVectorSize<NodeID>();
|
||||||
layout.SetBlockSize<NodeID>(DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES, number_of_nodes);
|
layout.SetBlockSize<NodeID>(DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES, number_of_nodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1089,18 +1090,21 @@ void Storage::PopulateData(const DataLayout &layout, char *memory_ptr)
|
|||||||
|
|
||||||
// load maneuver overrides
|
// load maneuver overrides
|
||||||
{
|
{
|
||||||
io::FileReader maneuver_overrides_file(config.GetPath(".osrm.maneuver_overrides"),
|
|
||||||
io::FileReader::VerifyFingerprint);
|
|
||||||
const auto number_of_overrides = maneuver_overrides_file.ReadElementCount64();
|
|
||||||
const auto number_of_nodes = maneuver_overrides_file.ReadElementCount64();
|
|
||||||
const auto maneuver_overrides_ptr =
|
const auto maneuver_overrides_ptr =
|
||||||
layout.GetBlockPtr<extractor::StorageManeuverOverride, true>(
|
layout.GetBlockPtr<extractor::StorageManeuverOverride, true>(
|
||||||
memory_ptr, DataLayout::MANEUVER_OVERRIDES);
|
memory_ptr, DataLayout::MANEUVER_OVERRIDES);
|
||||||
maneuver_overrides_file.ReadInto(maneuver_overrides_ptr, number_of_overrides);
|
|
||||||
|
|
||||||
const auto maneuver_override_node_sequences_ptr = layout.GetBlockPtr<NodeID, true>(
|
const auto maneuver_override_node_sequences_ptr = layout.GetBlockPtr<NodeID, true>(
|
||||||
memory_ptr, DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES);
|
memory_ptr, DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES);
|
||||||
maneuver_overrides_file.ReadInto(maneuver_override_node_sequences_ptr, number_of_nodes);
|
|
||||||
|
util::vector_view<extractor::StorageManeuverOverride> maneuver_overrides(
|
||||||
|
maneuver_overrides_ptr, layout.num_entries[DataLayout::MANEUVER_OVERRIDES]);
|
||||||
|
util::vector_view<NodeID> maneuver_override_node_sequences(
|
||||||
|
maneuver_override_node_sequences_ptr,
|
||||||
|
layout.num_entries[DataLayout::MANEUVER_OVERRIDE_NODE_SEQUENCES]);
|
||||||
|
|
||||||
|
extractor::files::readManeuverOverrides(config.GetPath(".osrm.maneuver_overrides"),
|
||||||
|
maneuver_overrides,
|
||||||
|
maneuver_override_node_sequences);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user