Конвертер OSM -> MP

äà, ñëåäèò
ñîáñòâåííî, âîò ïðîñòåíüêèé “ïåðåíóìåðîâûâàòåëü” :wink:

my $cnode = 1;
my %nodes;

my $croad = 1;
my %roads;

while (<>) {
    s/^RoadID=(\d+)/sprintf "RoadID=%d", reroad($1)/ie;
    s/^Nod(\d+)=(\d+),(\d+),(\d+)/sprintf "Nod$1=$2,%d,$4", renode($3)/ie;

    s/^Nod=(\d+)/sprintf "Nod=%d", renode($1)/ie;
    s/^TraffPoints=(\d+),(\d+),(\d+)/sprintf "TraffPoints=%d,%d,%d", renode($1), renode($2), renode($3)/ie;
    s/^TraffRoads=(\d+),(\d+)/sprintf "TraffRoads=%d,%d", reroad($1), reroad($2)/ie;

    print;
}

sub renode {    
    if (!$nodes{$_[0]})  {  $nodes{$_[0]} = $cnode++;  }
    return $nodes{$_[0]};
}
sub reroad {    
    if (!$roads{$_[0]})  {  $roads{$_[0]} = $croad++;  }
    return $roads{$_[0]};
}