Overlaps and Gap grouping in SQL Server
One possible approach is to define when there are breaks in time values using LAG() and then define the groups using SUM():

;WITH ChangedCTE AS (
   SELECT
      *,
      CASE 
         WHEN [start] = LAG([end]) OVER (PARTITION BY [runid], [year], [road] ORDER BY [start]) THEN 0
         ELSE 1
      END AS Changed
   FROM [dbo].[runners]
)
SELECT
   [runid], [year], [start], [end], [road],
   SUM([Changed]) OVER (PARTITION BY [runid], [year], [road] ORDER BY [start]) AS Groups
FROM ChangedCTE


Output:

runid   year    start   end road    Groups
01010000    9   0.000   0.585   2   1
01010000    9   0.585   4.980   2   1
01010000    9   4.980   7.777   2   1
01010000    9   7.777   11.857  2   1
01010000    9   11.857  13.274  2   1
01010000    9   15.235  21.021  2   2
01010000    9   21.021  22.142  2   2
01010000    9   22.142  25.946  2   2
01010000    9   0.000   7.777   3   1
01010000    9   7.777   11.857  3   1
01010000    9   11.857  13.274  3   1
01010000    9   15.235  21.021  3   2
01010000    9   21.021  22.142  3   2
01010000    9   22.142  25.946  3   2