[routing] OSM tag based time and turn penalties

Signed-off-by: Henry Sternberg <dev@bluelightmaps.com>
Co-Authored-By: eisa01 <eisa01@gmail.com>
Co-Authored-By: x7z4w <x7z4w@noreply.codeberg.org>
Co-Authored-By: Yannik Bloscheck <git@yannikbloscheck.com>
This commit is contained in:
Henry Sternberg
2025-07-28 17:48:44 +01:00
committed by x7z4w
parent daf2a7d8e7
commit c59b63d784
29 changed files with 1301 additions and 45 deletions

View File

@@ -7,6 +7,7 @@
#include <algorithm>
#include <sstream>
#include <unordered_map>
namespace routing
{
@@ -378,4 +379,41 @@ string DebugPrint(HighwayType type)
UNREACHABLE();
}
void FromString(std::string_view s, HighwayType & highwayType)
{
// Build reverse lookup from DebugPrint function
static std::unordered_map<std::string, HighwayType> const stringToEnum = []()
{
std::unordered_map<std::string, HighwayType> map;
// All possible HighwayType values
constexpr HighwayType allTypes[] = {
HighwayType::HighwayResidential, HighwayType::HighwayService, HighwayType::HighwayUnclassified,
HighwayType::HighwayFootway, HighwayType::HighwayTrack, HighwayType::HighwayTertiary,
HighwayType::HighwaySecondary, HighwayType::HighwayPath, HighwayType::HighwayPrimary,
HighwayType::HighwayRoad, HighwayType::HighwayCycleway, HighwayType::HighwayMotorwayLink,
HighwayType::HighwayLivingStreet, HighwayType::HighwayMotorway, HighwayType::HighwaySteps,
HighwayType::HighwayTrunk, HighwayType::HighwayPedestrian, HighwayType::HighwayTrunkLink,
HighwayType::HighwayPrimaryLink, HighwayType::ManMadePier, HighwayType::HighwayBridleway,
HighwayType::HighwaySecondaryLink, HighwayType::RouteFerry, HighwayType::HighwayTertiaryLink,
HighwayType::HighwayBusway, HighwayType::RouteShuttleTrain};
for (auto type : allTypes)
map[DebugPrint(type)] = type;
return map;
}();
auto it = stringToEnum.find(std::string(s));
if (it != stringToEnum.end())
{
highwayType = it->second;
}
else
{
ASSERT(false, ("Could not read HighwayType from string", s));
highwayType = HighwayType::HighwayResidential; // default fallback
}
}
} // namespace routing