Похоже прочитал часть кода и он не учитывает oneway.

      my $lt = extract_number($tags->{'lanes'}) // q{};
      my $lf = extract_number($tags->{'lanes:forward'}) // q{};
      my $lb = extract_number($tags->{'lanes:backward'}) // q{};

Здесь вроде так - lt из lanes; lf из lanes:forward; lb из lanes:backward

      if ( $lt ) {
          $lf = length $lb ? $lt-$lb : int($lt/2+0.5)  if !length $lf;
          $lb = length $lf ? $lt-$lf : int($lt/2)  if !length $lb;
      }

Здесь lf= lt-lb, или если нет и lb, то lf=lt/2 + коррекция до целого числа
Если у нас 3 lanes, а lf и lb нет, то 3 (lt) делим на 2 плюс коррекция 0,5 = 2 (lf)
Тогда появляется lf и lb будет считаться из lt-lf= 1 (lb)
А то что здесь надо все полосы отдать на lf (по условию oneway) код не описывает!

      return undef  if !length $lf || !length $lb || $lt<0 || $lb<0;
      return "$lf,0,0,$lb,0,0";

Здесь пока не пойму, но концовка описывает вывод - TrafficLanes.