リレーションを使うように変更
@@ -8,27 +8,17 @@ | ||
8 | 8 | |
9 | 9 | use Geo::KSJ; |
10 | 10 | |
11 | -#binmode(STDOUT, ':encoding(shift_jis)'); | |
11 | +my $ksj = Geo::KSJ->new_file('W09-05.xml', { | |
12 | + generator => 'extract_lake.pl', | |
13 | +}); | |
12 | 14 | |
13 | 15 | my $x = XML::TreePP->new(); |
14 | - | |
15 | -#my $h = $x->parsefile($ARGV[0]); | |
16 | -$x->set( force_array => [ 'jps:GM_Surface.patch' ] ); | |
16 | +$x->set( force_array => [ 'jps:GM_Surface.patch', 'jps:GM_SurfaceBoundary.exterior', 'jps:GM_SurfaceBoundary.interior' ] ); | |
17 | 17 | $x->set( utf8_flag => 1 ); |
18 | -my $h = $x->parsefile('W09-05.xml'); # 湖沼 | |
18 | +my $h = $x->parse($ksj->xml); | |
19 | 19 | |
20 | -#print Dumper($h); | |
21 | -#exit; | |
22 | - | |
23 | - | |
24 | -my $ksj = Geo::KSJ->new($h, { | |
25 | - generator => 'extract_lake.pl', | |
26 | -}); | |
27 | - | |
28 | 20 | my $base = $h->{"ksj:GI"}->{dataset}->{'ksj:object'}->{'ksj:AA01'}->{'ksj:OBJ'}; |
29 | 21 | |
30 | -#print Dumper($base); | |
31 | - | |
32 | 22 | my %point = %{$ksj->point}; |
33 | 23 | my %curve = %{$ksj->curve}; |
34 | 24 | my %pointid = %{$ksj->pointid}; |
@@ -51,42 +41,40 @@ | ||
51 | 41 | } |
52 | 42 | } |
53 | 43 | |
54 | - | |
55 | -my %surface_curve; | |
44 | +my %surface; | |
56 | 45 | { |
57 | 46 | my $s = $base->{'jps:GM_Surface'}; |
58 | 47 | |
59 | -#print Dumper($s); | |
60 | - | |
61 | 48 | for (@$s){ |
49 | + my %s; | |
50 | + my @inner = (); | |
51 | + my @outer = (); | |
62 | 52 | my $id = $_->{'-id'}; |
63 | - my $v1 = $_->{'jps:GM_Surface.patch'}; | |
64 | - | |
65 | - for(@$v1){ | |
66 | - my $vals = $_->{'jps:GM_Polygon'}->{'jps:GM_Polygon.boundary'}-> | |
67 | - {'jps:GM_SurfaceBoundary'}->{'jps:GM_SurfaceBoundary.exterior'}-> | |
68 | - {'jps:GM_Ring'}->{'jps:GM_CompositeCurve.generator'}->{'-idref'}; | |
69 | - | |
70 | -# print $id . "\t" . $orientable_curve{$vals} . "\n"; | |
71 | - | |
72 | - $surface_curve{$orientable_curve{$vals}} = $id; | |
53 | + for (@{$_->{'jps:GM_Surface.patch'}}){ | |
54 | + my $v1 = $_->{'jps:GM_Polygon'}->{'jps:GM_Polygon.boundary'}-> | |
55 | + {'jps:GM_SurfaceBoundary'}; | |
56 | + for (@{$v1->{'jps:GM_SurfaceBoundary.exterior'}}){ | |
57 | + push @outer, $orientable_curve{$_->{'jps:GM_Ring'}->{'jps:GM_CompositeCurve.generator'}->{'-idref'}}; | |
58 | + } | |
59 | + for (@{$v1->{'jps:GM_SurfaceBoundary.interior'}}){ | |
60 | + push @inner, $orientable_curve{$_->{'jps:GM_Ring'}->{'jps:GM_CompositeCurve.generator'}->{'-idref'}}; | |
61 | + } | |
73 | 62 | } |
63 | + $s{outer} = \@outer; | |
64 | + $s{inner} = \@inner; | |
65 | + $surface{$id} = \%s; | |
74 | 66 | } |
75 | 67 | } |
76 | 68 | |
77 | -my %lake_name; | |
69 | +#my %lake_name; | |
78 | 70 | { |
79 | 71 | my $s = $base->{'ksj:GC01'}; |
80 | 72 | |
81 | -#print Dumper($s); | |
82 | - | |
83 | 73 | for (@$s){ |
84 | 74 | my $id = $_->{'ksj:ARE'}->{'-idref'}; |
85 | 75 | my $val = $_->{'ksj:LPN'}; |
86 | - | |
87 | -# print $id . "\t" . decode('shift_jis', $val) . "\n"; | |
88 | 76 | |
89 | - $lake_name{$id} = $val; | |
77 | + $surface{$id}->{name} = $val; | |
90 | 78 | } |
91 | 79 | } |
92 | 80 |
@@ -96,34 +84,62 @@ | ||
96 | 84 | |
97 | 85 | $ksj->put_point; |
98 | 86 | |
99 | -for (sort keys %curve){ | |
100 | - my $id = $_; | |
101 | - my %tag = ( | |
102 | - source => "MLIT, Japan", | |
103 | - 'source:ja' => "国土数値情報(湖沼データ)平成17年 国土交通省", | |
104 | - source_ref => 'http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-C23.html', | |
105 | - natural => 'water', | |
106 | -# natural => 'coastline', | |
87 | +my %tagbase = ( | |
88 | + source => "MLIT, Japan", | |
89 | + 'source:ja' => "国土数値情報(湖沼データ)平成17年 国土交通省", | |
90 | + source_ref => 'http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-W09.html', | |
107 | 91 | ); |
108 | 92 | |
109 | - if(defined $surface_curve{$id} && defined $lake_name{$surface_curve{$id}}){ | |
110 | -# $tag{name} = encode('utf-8', $lake_name{$surface_curve{$id}}); | |
111 | - $tag{name} = $lake_name{$surface_curve{$id}}; | |
112 | - } | |
93 | +for (sort keys %surface){ | |
94 | + my $s = $surface{$_}; | |
95 | + if($#{$s->{inner}} == -1 && $#{$s->{outer}} == 0 && $#{$curve{${$s->{outer}}[0]}} < 1950){ | |
96 | + my $id = $s->{outer}[0]; | |
97 | + my %tag = %tagbase; | |
98 | + $tag{natural} = 'water'; | |
99 | + $tag{'KSJ2:curve_id'} = $id; | |
100 | + if(defined $s->{name}){ | |
101 | + $tag{name} = $s->{name}; | |
102 | + } | |
113 | 103 | |
114 | - my @c = @{$curve{$id}}; | |
115 | - while($#c >= 1600){ | |
116 | - my @nc = (); | |
117 | - for(my $i = 0; $i < 1500; $i++){ | |
118 | - my $x = shift @c; | |
119 | - push @nc, $x; | |
104 | + $ksj->put_curve_1($id, $newid--, $curve{$id}, \%tag); | |
105 | + } else | |
106 | + { | |
107 | + my @imem; | |
108 | + my @omem; | |
109 | + | |
110 | + my $id; | |
111 | + | |
112 | + | |
113 | + for (@{$s->{outer}}){ | |
114 | + $id = $_; | |
115 | + my %tag = %tagbase; | |
116 | + $tag{'KSJ2:curve_id'} = $id; | |
117 | + | |
118 | + my ($newnewid, $ids) = $ksj->put_curves($id, $newid, \%tag); | |
119 | + $newid = $newnewid; | |
120 | + push @omem, @$ids; | |
120 | 121 | } |
121 | - push @nc, $c[0]; | |
122 | - $ksj->put_curve_1($id, $newid--, \@nc, \%tag); | |
122 | + | |
123 | + for (@{$s->{inner}}){ | |
124 | + $id = $_; | |
125 | + my %tag = %tagbase; | |
126 | + $tag{'KSJ2:curve_id'} = $id; | |
127 | + | |
128 | + my ($newnewid, $ids) = $ksj->put_curves($id, $newid, \%tag); | |
129 | + $newid = $newnewid; | |
130 | + push @imem, @$ids; | |
131 | + } | |
132 | + | |
133 | + { | |
134 | + my %tag = %tagbase; | |
135 | + $tag{natural} = 'water'; | |
136 | + if(defined $s->{name}){ | |
137 | + $tag{name} = $s->{name}; | |
138 | + } | |
139 | + | |
140 | + $ksj->put_relation($newid--, \@omem, \@imem, \%tag); | |
141 | + } | |
123 | 142 | } |
124 | - | |
125 | - $ksj->put_curve_1($id, $newid--, \@c, \%tag); | |
126 | -# $ksj->put_curve_1($id, $newid--, $curve{$id}, \%tag); | |
127 | 143 | } |
128 | 144 | |
129 | 145 | $ksj->close; |