diff --git a/skills/telegram-collector/telegram_collector.session b/skills/telegram-collector/telegram_collector.session index a91c1fa..f7d872f 100644 Binary files a/skills/telegram-collector/telegram_collector.session and b/skills/telegram-collector/telegram_collector.session differ diff --git a/tasks/enduro-trails/osrm/enduro.lua b/tasks/enduro-trails/osrm/enduro.lua index b54993a..222a081 100644 --- a/tasks/enduro-trails/osrm/enduro.lua +++ b/tasks/enduro-trails/osrm/enduro.lua @@ -1,12 +1,11 @@ -- enduro.lua — OSRM профиль для эндуро-роутинга "Дикий путь" --- Стратегия: weight = distance_meters * penalty --- Грунтовки penalty=1, асфальт penalty=10+ --- OSRM минимизирует суммарный weight → выбирает грунтовки +-- weight = штраф для выбора маршрута (грунтовки дешевле асфальта) +-- duration = реальное время (для ETA) +-- Разделены явно через result.weight и result.duration api_version = 4 -- Штраф за метр пути (меньше = предпочтительнее) --- Грунтовки ~1, асфальт ~10+ local highway_penalty = { track = 1.0, bridleway = 1.2, @@ -16,19 +15,19 @@ local highway_penalty = { unclassified = 3.0, residential = 5.0, service = 6.0, - tertiary = 12.0, - tertiary_link= 12.0, - secondary = 18.0, - secondary_link = 18.0, - primary = 25.0, - primary_link = 25.0, - trunk = 40.0, - trunk_link = 40.0, + tertiary = 15.0, + tertiary_link= 15.0, + secondary = 25.0, + secondary_link = 25.0, + primary = 40.0, + primary_link = 40.0, + trunk = 60.0, + trunk_link = 60.0, motorway = 999.0, motorway_link= 999.0, } --- Скорости (км/ч) — только для ETA, не влияют на выбор маршрута +-- Скорости (км/ч) — только для ETA local highway_speeds = { track = 30, bridleway = 20, @@ -50,7 +49,7 @@ local highway_speeds = { motorway_link= 90, } --- Мультипликатор по качеству грунтовки (grade1=лучший, grade5=тяжёлый) +-- Мультипликатор по качеству грунтовки local tracktype_multiplier = { grade1 = 1.0, grade2 = 1.1, @@ -62,7 +61,7 @@ local tracktype_multiplier = { function setup() return { properties = { - weight_name = 'duration', + weight_name = 'routability', max_speed_for_map_matching = 30/3.6, call_tagless_node_function = false, traffic_light_penalty = 2, @@ -89,7 +88,7 @@ function process_way(profile, way, result) local speed = highway_speeds[highway] or 30 - -- Мультипликатор по tracktype для грунтовок + -- Мультипликатор по tracktype local tracktype = way:get_value_by_key("tracktype") if tracktype and tracktype_multiplier[tracktype] then penalty = penalty * tracktype_multiplier[tracktype] @@ -97,16 +96,16 @@ function process_way(profile, way, result) result.forward_mode = mode.driving result.backward_mode = mode.driving + + -- duration = реальное время (секунды на метр) + local speed_mps = speed / 3.6 result.forward_speed = speed result.backward_speed = speed - -- duration = реальное время (секунды) — используется для ETA - -- weight = штраф для роутера — грунтовки дешевле асфальта - -- Задаём rate: weight_per_meter = penalty / speed_mps - -- OSRM считает weight = rate * distance - local speed_mps = speed / 3.6 - result.forward_rate = penalty / speed_mps - result.backward_rate = penalty / speed_mps + -- weight = штраф для роутера (penalty на метр) + -- forward_rate/backward_rate задают weight_per_meter + result.forward_rate = penalty + result.backward_rate = penalty -- Одностороннее движение local oneway = way:get_value_by_key("oneway")