die if $prs2region{$prs};
$prs2region{$prs} = $rn;
}
+
+ # bodgery for the sea and land
+ $prs2region{'NZ | L'} = 'NZ';
+ $prs2region{'L | NZ'} = 'NZ';
}
our $sre = qr{(?:(\")|(?=\w))(.*)\1$}; # 2 captures, $2 is the name
# Sets
# $region{NAME}{Adj}[]{Ends}[]{VxName}
# $region{NAME}{Adj}[]{Ends}[]{Pos}
+ # $region{'NZ'}{Polygon}{Pos}
#
# also incidentally
# $region{NAME}{Adj}[]{Ends}[]{Adjoins} which should be ignored
my @edges;
my $process_rr = sub {
my $last_ai;
- for my $ei (0..$#edges) {
- my $ej = $ei % @edges;
- if (!defined $last_ai) {
- my $ai;
- for my $ai (0..$#{ $rr->{Adj} }) {
- next unless $rr->{Adj}[$ai]{Name} eq $edges[$ei]{Adjoins};
- $last_ai = $ai+1;
+ if ($rr->{Name} eq 'NZ') {
+ # We combined L and NZ; now we must split them again
+ # in fact, we just throw away L entirely.
+ # Here, when processing NZ, we keep only vertices that
+ # are part of NZ.
+ @edges = grep {
+ my $evxname = $_->{VxName};
+ my @eregions = split / \| ?/, $evxname;
+ grep { $_ eq 'NZ' } @eregions
+ } @edges;
+ $rr->{Polygon} = [ @edges ];
+ } else {
+ for my $ei (0..$#edges) {
+ my $ej = $ei % @edges;
+ if (!defined $last_ai) {
+ my $ai;
+ for my $ai (0..$#{ $rr->{Adj} }) {
+ next unless $rr->{Adj}[$ai]{Name} eq $edges[$ei]{Adjoins};
+ $last_ai = $ai+1;
+ }
+ confess $edges[$ei]{Adjoins}.' ?' unless defined $last_ai;
}
- confess unless defined $last_ai;
- }
- my $ai = ($last_ai-1+@edges) % @edges;
- $last_ai = $ai;
- my $adj = $rr->{Adj}[$ai];
- confess Dumper($rr, \@edges, $ei, $ej, $adj, $last_ai, $ai)." ?"
- unless $adj->{Name} eq $edges[$ei]{Adjoins};
+ my $ai = ($last_ai-1+@edges) % @edges;
+ $last_ai = $ai;
+ my $adj = $rr->{Adj}[$ai];
+ confess Dumper($rr, \@edges, $ei, $ej, $adj, $last_ai, $ai)." ?"
+ unless $adj->{Name} eq $edges[$ei]{Adjoins};
- for my $endi (0..1) {
- $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ];
+ for my $endi (0..1) {
+ $adj->{Ends}[$endi] = $edges[ ($ei + $endi) % @edges ];
+ }
}
}
@edges = ();
} elsif (m/^\s+\^\@([-e.0-9]+)\,([-e.0-9]+)$/) {
my $pos = Math::GSL::Vector->new([$1,$2]);
confess unless defined $vxname;
- #$edges[-1]{Pos} = $pos;
+ $edges[-1]{Pos} = $pos;
$vxname2pos{$vxname} = $pos;
}
}