-- Rasterbot profile api_version = 2 function setup() local raster_path = os.getenv('OSRM_RASTER_SOURCE') or "rastersource.asc" return { properties = { force_split_edges = true, process_call_tagless_node = false, }, raster_source = raster:load( raster_path, 0, -- lon_min 0.1, -- lon_max 0, -- lat_min 0.1, -- lat_max 5, -- nrows 4 -- ncols ) } end -- Minimalist process_ways in order to test source_ and process_segments function process_way (profile, way, result) local highway = way:get_value_by_key("highway") local name = way:get_value_by_key("name") if name then result.name = name end result.forward_mode = mode.cycling result.backward_mode = mode.cycling result.forward_speed = 15 result.backward_speed = 15 end function process_segment (profile, segment) local sourceData = raster:query(profile.raster_source, segment.source.lon, segment.source.lat) local targetData = raster:query(profile.raster_source, segment.target.lon, segment.target.lat) io.write("evaluating segment: " .. sourceData.datum .. " " .. targetData.datum .. "\n") local invalid = sourceData.invalid_data() local scaled_weight = segment.weight local scaled_duration = segment.duration if sourceData.datum ~= invalid and targetData.datum ~= invalid then local slope = (targetData.datum - sourceData.datum) / segment.distance scaled_weight = scaled_weight / (1.0 - (slope * 5.0)) scaled_duration = scaled_duration / (1.0 - (slope * 5.0)) io.write(" slope: " .. slope .. "\n") io.write(" was weight: " .. segment.weight .. "\n") io.write(" new weight: " .. scaled_weight .. "\n") io.write(" was duration: " .. segment.duration .. "\n") io.write(" new duration: " .. scaled_duration .. "\n") end segment.weight = scaled_weight segment.duration = scaled_duration end return { setup = setup, process_way = process_way, process_segment = process_segment }