User:Tatata/ksj2osm-lake.pl

From OpenStreetMap Wiki
Jump to navigation Jump to search

This perl script convert KSJ2 lake and pond data xml file to osm xml file. (ja)このperlスクリプトは国土数値情報(湖沼データ)のxmlファイルをosmのxmlファイルに変換します。

Preparation

(ja)準備

  • Installation of JOSM (a java program; needs J2SE SDK or JRE). (ja)JOSMの導入(javaプログラムなので実行にはJ2SE SDK或いはJREが必要。)
  • Installation of perl. You can download ActivePerl from ActiveState site (free of charge). (ja)perlの導入。ActiveStateのサイトからActivePerlをでダウンロードできる(無料)。
  • Save the code below as a file with proper name. (e.g. ksj2osm-lake.pl) (ja)適切なファイル名を付けて下のソースコードを保存する。(例えばksj2osm-lake.plなど。)

How to convert the data

(ja)変換手順

  • Download KSJ2 lake and pond data decompress from zip file to xml file. (ja)国土数値情報(湖沼データ)をダウンロードし、zipファイルを解凍してxmlファイルにする。
  • Put the xml file on the same directory of the script. (ja)xmlファイルをスクリプトと同じディレクトリに置く。
  • Open the perl script by editor program, edit the initial values of $target_lpn to specify lake/pond name with UTF-8 characters (you can copy and paste from list), $lake_type (0, 1 or 2) to specify lake/pond type and $water_type (0 or 1) to specify water type, and then save the script. (ja)このperlスクリプトをエディタープログラムで開き、$target_lpnの初期値にUTF-8の文字による湖沼名(このリストからコピペ可)、$lake_typeの初期値に湖沼のタイプ (0、1又は2) 、$water_typeの初期値に水のタイプ (0又は1) を書き込んでスクリプトを保存する。
    • As to "$lake_type=2" (landuse=reservoir), a list of artificial lakes in Japan (ja:wikipedia) is useful information. (ja)"$lake_type=2" (landuse=reservoir) については、ウィキペデアの日本の人造湖一覧が参考になります。
  • Open command prompt window and run the script on the directory where you put the script and xml file. Output files (ksj2osm-lake.osm, ksj2osm-lake.log) will be created on the same directory. (ja)コマンドプロンプトを開いて、スクリプトとxmlファイルを置いたディレクトリでスクリプトを実行する。出力ファイル (ksj2osm-lake.osm, ksj2osm-lake.log) は同じディレクトリに作成される。
  • Open ksj2osm-lake.osm by JOSM, check and edit the data (see notes below), and then upload to server. (ja)JOSMでksj2osm-lake.osmを開いてデータの確認や編集を行い(下の注意を参照)、それからサーバーにアップロードする。

Notes

(ja)注意

  • KSJ2 lake and pond data doesn't have information below, so you need to input them manually into the outer closed ways. (ja)国土数値情報の湖沼データには以下の情報が無いので、外側にあるクローズドウェイについてはそれらを手入力する必要があります。
    • Lake/pond name in English; "name" tag (in round brackets) and "name:en" tag. (ja)英語の湖沼名("name"タグの丸括弧内と"name:en"タグ)。
    • Lake/pond name in romanization of Japanese; "name:ja_rm" tag. (ja)ローマ字表記の湖沼名("name:ja_rm"タグ)。
  • Direction of ways (ja)ウェイの方向
    • The outer ring of the area (area of water), the closed way should be clockwise. (ja)外側にある面データ(水域)については、クローズドウェイを時計回りにして下さい。
    • An inner ring of an area (area of land), the closed way should be anti-clockwise. (ja)内側にある面データ(陸地)については、クローズドウェイを反時計回りにして下さい。

Code

As of 2008-04-12.
Bugfix 2010-04-08 by Tom.



#!/usr/bin/perl

use strict;
use warnings;
# use encoding "utf8"; 
use encoding "utf8", STDOUT => "shiftjis", STDERR => "shiftjis"; # for Windows
use Encode;
use open IO => "utf8";
use XML::Parser;
use XML::Simple;

#####
#
# KSJ2 Lake and Pond Data
#
# National-Land Numerical Information (Lake and Pond) 2005, MLIT Japan
# 国土数値情報(湖沼データ)平成17年 国土交通省
#
# Files
#   Input
#     XML file : W09-05.xml
#   Output
#     Osm file : ksj2osm-lake.osm
#     Log file : ksj2osm-lake.log
#
#####

our $file_in = "W09-05";
our $file_name = "ksj2osm-lake";

our $target_lpn = "亀山湖"; # lake/pond name (UTF-8) "亀山湖", "*", ""

our $lake_type = 2; # 0 : for natural lake (approximate depth 5 meters and over), tagged with "natural=water".
                    # 0 : 天然湖(概ねの深さが5m以上)、タグは "natural=water"。
                    # 1 : for natural pond/marsh (approximate depth under 5 meters), tagged with "natural=marsh".
                    # 1 : 天然の池・沼(概ねの深さが5m未満)、タグは "natural=marsh"。
                    # 2 : for artificial lake/pond/marsh, tagged with "landuse=reservoir".
                    # 2 : 人造湖(池・沼を含む)、タグは "landuse=reservoir"。

our $water_type = 0; # 0 : for fresh water, tagged with "water_type=fresh".
                     # 0 : 淡水、タグは "water_type=fresh"。
                     # 1 : for brackish water/brine/salt water/seawater, tagged with "water_type=salt".
                     # 1 : 汽水・塩水・鹹水(かんすい)・海水、タグは "water_type=salt"。

our $aac_code;
our %curveHash;
our %indirectHash;
our %lakeHash;
our $negative_id = 0;
our $node_ref;
our %nodes = ();
our $num_lands = 0;
our $num_nodes;
our $num_waters;
our $num_ways;
our $pref_code;
our %surfaceHash;
our @workArray;
our %workHash;
our $workString;
our $xml_aac;
our $xml_pref;

sub main() {

  my $parser = new XML::Parser(ErrorContext => 3,
                               Handlers => {Init => \&handle_init,
                                            Start => \&handle_start,
                                            Char => \&handle_char,
                                            End => \&handle_end,
                                            Final => \&handle_final});

  $parser->parsefile("$file_in.xml");

}


sub handle_init() {

  open_log();
  get_codelist();

}


sub handle_start() {

  my ($expat, $element, %hash) = @_;
  if ($element eq "jps:GM_Point"
    || $element eq "jps:GM_Curve"
    || $element eq "GM_PointRef.point"
    || $element eq "jps:GM_Surface"
    || $element eq "jps:GM_CompositeCurve.generator"
    || $element eq "jps:GM_OrientableCurve"
    || $element eq "jps:GM_OrientablePrimitive.primitive"
    || $element eq "ksj:GC01"
    || $element eq "ksj:ARE") {get_id(@_);}
  $workString = "";                              # add 2009-05-26

}


sub handle_char () {

  my ($expat, $string) = @_;
#  $workString = $string;
#  $workString .= "";                             # mod 2009-05-26
  $workString = $string;                          # mod 2010-04-08 by Tom
}


sub handle_end() {

  my ($expat, $element) = @_;
  if ($element eq "DirectPosition.coordinate"
    || $element eq "ksj:LPN"
    || $element eq "ksj:AAC"
    || $element eq "ksj:LDM"
    || $element eq "ksj:HOW") {get_element(@_);}
  elsif ($element eq "jps:GM_Point") {add_indirect();}
  elsif ($element eq "jps:GM_Curve") {add_curve();}
  elsif ($element eq "jps:GM_SurfaceBoundary.exterior") {add_exterior();}
  elsif ($element eq "jps:GM_SurfaceBoundary.interior") {add_interior();}
  elsif ($element eq "jps:GM_Surface") {add_surface();}
  elsif ($element eq "ksj:GC01") {add_lake();}

}


sub handle_final() {

  my $time = localtime(time);
  print LOG "***** End of processing $file_in.xml : $time\n";
  print "***** End of processing $file_in.xml : $time\n";

  print LOG "*****\n";
  foreach my $item(keys %lakeHash) {
    print LOG "* 1st key: $item\n";
    foreach my $item2(keys %{$lakeHash{$item}}) {
      print LOG "** 2nd key: $item2, value: $lakeHash{$item}{$item2}\n";
      if ($item2 eq "ARE") {
        foreach my $item3(keys %{$surfaceHash{$lakeHash{$item}{$item2}}}) {
          print LOG "** 3rd key: $item3, value: $surfaceHash{$lakeHash{$item}{$item2}}{$item3}\n";
          if ($item3 eq "exterior" || $item3 eq "interior") {
            @workArray = split(/,/, $surfaceHash{$lakeHash{$item}{$item2}}{$item3});
            foreach my $item4(@workArray) {
              print LOG "** 4th key: $item4, value: $curveHash{$item4}\n";
            }
          }
        }
      }
    }
    print LOG "*****\n";
  }

  create_osm();

  close_log();

}


sub open_log() {

  my $time = localtime(time);
  open(LOG, ">$file_name.log");
  print LOG "***** KSJ2 Lake and Pond Data 2005 : Start $time\n";
  print "***** KSJ2 Lake and Pond Data 2005 : Start $time\n";
  print LOG "***** Target : $target_lpn, lake type = $lake_type, water type = $water_type\n";
  print "***** Target : $target_lpn, lake type = $lake_type, water type = $water_type\n";
  print LOG "***** Extracting from $file_in.xml\n";
  print "***** Extracting from $file_in.xml\n";

}


sub close_log() {

  my $time = localtime(time);
  print LOG "***** Done!: End $time\n";
  close LOG;
  print "***** Done!: End $time\n";

}


sub get_codelist() {

  # AdminAreaCd.xml 行政コード

  $aac_code = XMLin($xml_aac, keyattr => ["code"]);

  # PrefCode.xml 都道府県コード

  $pref_code = XMLin($xml_pref, keyattr => ["code"]);

}


sub get_id() {

  my ($expat, $element, %hash) = @_;
  if ($element eq "GM_PointRef.point") {
    if (exists($hash{"idref"})) {
      if (exists($workHash{"points"})) {
        $workHash{"points"} .= ",";
      }
      $workHash{"points"} .= $indirectHash{$hash{"idref"}};
    }
    else {
      print LOG "* id not found in element GM_PointRef.point.\n";
      print "* id not found in element GM_PointRef.point.\n";
      while (my ($key, $value) = each(%hash)) {
        print LOG "key: $key , value: $value \n";
        print "key: $key , value: $value \n";
      }
      die "id not found in element GM_PointRef.point.";
    }
  }
  elsif ($element eq "jps:GM_CompositeCurve.generator" ) {
    if (exists($hash{"idref"})) {
      $workHash{"CompositeCurve"} = $hash{"idref"};
    }
    else {
      print LOG "* idref not found in element jps:GM_CompositeCurve.generator.\n";
      print "* idref not found in element jps:GM_CompositeCurve.generator.\n";
      while (my ($key, $value) = each(%hash)) {
        print LOG "key: $key , value: $value \n";
        print "key: $key , value: $value \n";
      }
      die "idref not found in element jps:GM_CompositeCurve.generator.";
    }
  }
  elsif ($element eq "jps:GM_OrientableCurve" ) {
    if (exists($hash{"id"})) {
      $workHash{"id"} = $hash{"id"};
      $workHash{"element"} = $hash{"jps:GM_OrientableCurve"};
    }
    else {
      print LOG "* id not found in element jps:GM_Curve.\n";
      print "* id not found in element jps:GM_Curve.\n";
      while (my ($key, $value) = each(%hash)) {
        print LOG "key: $key , value: $value \n";
        print "key: $key , value: $value \n";
      }
      die "id not found in element jps:GM_Curve.";
    }
  }
  elsif ($element eq "jps:GM_OrientablePrimitive.primitive" ) {
    if (exists($workHash{"element"})) {
      if (exists($hash{"idref"})) {
        foreach my $item(keys %surfaceHash) {
          foreach my $item2(keys %{$surfaceHash{$item}}) {
            $surfaceHash{$item}{$item2} =~ s/$workHash{"id"}/$hash{"idref"}/g;
          }
        }
        %workHash = ();
      }
      else {
        print LOG "* idref not found in element jps:GM_OrientablePrimitive.primitive.\n";
        print "* idref not found in element jps:GM_OrientablePrimitive.primitive.\n";
        while (my ($key, $value) = each(%hash)) {
          print LOG "key: $key , value: $value \n";
          print "key: $key , value: $value \n";
        }
        die "idref not found in element jps:GM_OrientablePrimitive.primitive.";
      }
    }
  }
  elsif ($element eq "ksj:ARE" ) {
    if (exists($hash{"idref"})) {
      $workHash{"ARE"} = $hash{"idref"};
    }
    else {
      print LOG "* idref not found in element ksj:ARE.\n";
      print "* idref not found in element ksj:ARE.\n";
      while (my ($key, $value) = each(%hash)) {
        print LOG "key: $key , value: $value \n";
        print "key: $key , value: $value \n";
      }
      die "idref not found in element ksj:ARE.";
    }
  }
  else {
    if (exists($hash{"id"})) {
      $workHash{"id"} = $hash{"id"};
    }
    else {
      print LOG "* id not found in element $element.\n";
      print "* id not found in element $element.\n";
      while (my ($key, $value) = each(%hash)) {
        print LOG "key: $key , value: $value \n";
        print "key: $key , value: $value \n";
      }
      die "id not found in element $element";
    }
  }
}


sub get_element() {

  my ($expat, $element) = @_;
  if ($element eq "DirectPosition.coordinate" ) {
    if (exists($workHash{"points"})) {
      $workHash{"points"} .= ",";
    }
    $workHash{"points"} .= $workString;
  }
  elsif ($element eq "ksj:LPN" ) {$workHash{"LPN"} = $workString;}
  elsif ($element eq "ksj:AAC" ) {
    if ($workString =~ /[^0-9]/) {
      print LOG "* AAC is not numeric : $workString\n";
      print "* AAC is not numeric : $workString\n";
      while (my ($key, $value) = each(%workHash)) {
        print LOG "key: $key , value: $value \n";
        print "key: $key , value: $value \n";
      }
    }
    else {
      $workString = sprintf("%05d", $workString);
      if (exists($workHash{"AAC"})) {
        $workHash{"AAC"} .= ",";
      }
      $workHash{"AAC"} .= $workString;
      my $str = $aac_code->{'ksjc:C002'}->{'codelabel'}->{$workString}->{'label'};
      unless ($str) { 
        $str = substr($workString, 0, 2);
        $str = $pref_code->{'ksjc:C001'}->{'codelabel'}->{$str}->{'label'};
        $str .= "*";
      }
      if (exists($workHash{"AAC_label"})) {
        $workHash{"AAC_label"} .= ",";
      }
      $workHash{"AAC_label"} .= $str;
    }
  }
  elsif ($element eq "ksj:LDM" ) {$workHash{"LDM"} = $workString;}
  elsif ($element eq "ksj:HOW" ) {$workHash{"HOW"} = $workString;}

  $workString = "";                              # add 2009-05-26

}


sub add_indirect() {
  $indirectHash{$workHash{"id"}} = $workHash{"points"};
  %workHash = ();
}


sub add_curve() {
  $curveHash{$workHash{"id"}} = $workHash{"points"};
  %workHash = ();
}


sub add_exterior() {
  if (exists($workHash{"exterior"})) {
    $workHash{"exterior"} .= ",";
  }
  $workHash{"exterior"} .= $workHash{"CompositeCurve"};
  delete $workHash{"CompositeCurve"};
}


sub add_interior() {
  if (exists($workHash{"interior"})) {
    $workHash{"interior"} .= ",";
  }
  $workHash{"interior"} .= $workHash{"CompositeCurve"};
  delete $workHash{"CompositeCurve"};
}


sub add_surface() {

  while (my ($key, $value) = each(%workHash)) {
    $surfaceHash{$workHash{"id"}}{$key} = $value;
  }
  %workHash = ();
}


sub add_lake() {

  if ($target_lpn eq $workHash{"LPN"} || $target_lpn eq "*" || $target_lpn eq "") {

    $lakeHash{$workHash{"id"}}{"id"} = $workHash{"id"};
    $lakeHash{$workHash{"id"}}{"ARE"} = $workHash{"ARE"};
    $lakeHash{$workHash{"id"}}{"LPN"} = $workHash{"LPN"};
    $lakeHash{$workHash{"id"}}{"AAC"} = $workHash{"AAC"};
    $lakeHash{$workHash{"id"}}{"AAC_label"} = $workHash{"AAC_label"};
    if (exists($workHash{"LDM"})) {
      $lakeHash{$workHash{"id"}}{"LDM"} = $workHash{"LDM"};
    }
    if (exists($workHash{"HOW"})) {
      $lakeHash{$workHash{"id"}}{"HOW"} = $workHash{"HOW"};
    }
  }
  %workHash = ();
}


sub create_osm(){

  my $i = 0;
  my @array;

  open(OSM, ">$file_name.osm");
  print OSM "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
  print OSM "<osm version=\"0.5\" generator=\"KSJ2OSM\">\n";

  foreach my $item(keys %lakeHash) {
    foreach my $item2(keys %{$surfaceHash{$lakeHash{$item}{"ARE"}}}) {
      if ($item2 eq "exterior" || $item2 eq "interior") {
        @array = split(/,/, $surfaceHash{$lakeHash{$item}{"ARE"}}{$item2});
        foreach my $item3(@array) {
          @workArray = split(/,/, $curveHash{$item3});
          foreach my $coordinate(@workArray) {
            $i = write_node($i, $item, $item2, $item3, $coordinate);
          }
          write_way($i, $item, $item2, $item3);
          $i = 0;
        }
      }
    }
  }

  print OSM "</osm>";
  close OSM;
  printf LOG 
    "***** Lake and Pond : %d nodes on %d ways\n"
    , $num_nodes, $num_ways;
  printf LOG 
    "***** Lake and Pond : water = %d ways, island = %d ways\n"
    , $num_waters, $num_lands;
  printf 
    "***** Lake and Pond : %d nodes on %d ways\n"
    , $num_nodes, $num_ways;
  printf 
    "***** Lake and Pond : water = %d ways, island = %d ways\n"
    , $num_waters, $num_lands;

}


sub write_node() {

  my ($i, $item, $item2, $item3, $coordinate) = @_;
  my $node_id = 0;
  my ($lat, $long) = split(/\s/, $coordinate);

  unless (defined($lat) && defined($long)) {
    print LOG "Skip error data : id = $item/$item2/$item3, coordinate = $coordinate\n";
    print "Skip error data : id = $item/$item2/$item3, coordinate = $coordinate\n";
    return $i;
  }
  if (($lat eq "") || ($long eq "")) {
    print LOG "Skip error data : id = $item/$item2/$item3, coordinate = $coordinate, lat = $lat, long = $long\n";
    print "Skip error data : id = $item/$item2/$item3, coordinate = $coordinate, lat = $lat, long = $long\n";
    return $i;
  }
  if (($lat > 90) || ($lat < -90) || ($lat == 0) 
    || ($long > 180) || ($long < -180) || ($long == 0)) {
    print LOG "Skip error data : id = $item/$item2/$item3, coordinate = $coordinate, lat = $lat, long = $long\n";
    print "Skip error data : id = $item/$item2/$item3, coordinate = $coordinate, lat = $lat, long = $long\n";
    return $i;
  }

  my $tags = "<tag k=\"created_by\" v=\"National-Land-Numerical-Information_MLIT_Japan\"/>";
  $tags .= "<tag k=\"source\" v=\"KSJ2\"/>";
  $tags .= "<tag k=\"source_ref\" v=\"http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-W09.html\"/>";
  $tags .= "<tag k=\"note\" v=\"National-Land Numerical Information (Lake and Pond) 2005, MLIT Japan\"/>";
  $tags .= "<tag k=\"note:ja\" v=\"国土数値情報(湖沼データ)平成17年 国土交通省\"/>";
  $tags .= "<tag k=\"KSJ2:lake_id\" v=\"$item\"/>";
  $tags .= "<tag k=\"KSJ2:ARE\" v=\"$lakeHash{$item}{'ARE'}\"/>";
  $tags .= "<tag k=\"KSJ2:curve_type\" v=\"$item2\"/>";
  $tags .= "<tag k=\"KSJ2:curve_id\" v=\"$item3\"/>";
  $tags .= "<tag k=\"KSJ2:coordinate\" v=\"$coordinate\"/>";
  $tags .= "<tag k=\"KSJ2:lat\" v=\"$lat\"/>";
  $tags .= "<tag k=\"KSJ2:long\" v=\"$long\"/>";
  $tags .= "<tag k=\"KSJ2:LPN\" v=\"$lakeHash{$item}{'LPN'}\"/>";

  if (exists($nodes{"$lat $long"})) {
    $node_id = $nodes{"$lat $long"};
  }
  else {
    $negative_id--;
    $node_id = $negative_id;
    $nodes{"$lat $long"} = $node_id;
    my $node 
      = sprintf("<node id=\"%d\" visible=\"true\" lat=\"%s\" lon=\"%s\">$tags</node>"
      , $node_id, $lat, $long);
    print OSM "$node\n";
    $num_nodes++;
  }

  $node_ref .= sprintf("<nd ref=\"%d\" />", $node_id);
  printf LOG "Node %d: %s, %s\n", $node_id, $lat, $long;
  $i++;
  return $i;

}


sub write_way() {

  my ($i, $item, $item2, $item3) = @_;
  my $tmp_tags;
  $negative_id--;

  my $tags = "<tag k=\"created_by\" v=\"National-Land-Numerical-Information_MLIT_Japan\"/>";
  $tags .= "<tag k=\"source\" v=\"KSJ2\"/>";
  $tags .= "<tag k=\"source_ref\" v=\"http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-W09.html\"/>";
  $tags .= "<tag k=\"note\" v=\"National-Land Numerical Information (Lake and Pond) 2005, MLIT Japan\"/>";
  $tags .= "<tag k=\"note:ja\" v=\"国土数値情報(湖沼データ)平成17年 国土交通省\"/>";
  $tags .= "<tag k=\"KSJ2:lake_id\" v=\"$item\"/>";
  $tags .= "<tag k=\"KSJ2:ARE\" v=\"$lakeHash{$item}{'ARE'}\"/>";
  $tags .= "<tag k=\"KSJ2:curve_type\" v=\"$item2\"/>";
  $tags .= "<tag k=\"KSJ2:curve_id\" v=\"$item3\"/>";
  $tags .= "<tag k=\"KSJ2:AAC\" v=\"$lakeHash{$item}{'AAC'}\"/>";
  $tags .= "<tag k=\"KSJ2:AAC_label\" v=\"$lakeHash{$item}{'AAC_label'}\"/>";
  $tags .= "<tag k=\"KSJ2:LPN\" v=\"$lakeHash{$item}{'LPN'}\"/>";
  if (exists($lakeHash{$item}{"LDM"})) {
    $tags .= "<tag k=\"KSJ2:LDM\" v=\"$lakeHash{$item}{'LDM'}\"/>";
  }
  if (exists($lakeHash{$item}{"HOW"})) {
    $tags .= "<tag k=\"KSJ2:HOW\" v=\"$lakeHash{$item}{'HOW'}\"/>";
  }
#  $tags .= "<tag k=\"KSJ2:points\" v=\"$curveHash{$item3}\"/>"; # comment out to reduce data size.

  if ($item2 eq "exterior") {
    if    ($lake_type == 0) {$tmp_tags = "<tag k=\"natural\" v=\"water\"/>";}
    elsif ($lake_type == 1) {$tmp_tags = "<tag k=\"natural\" v=\"marsh\"/>";}
    elsif ($lake_type == 2) {$tmp_tags = "<tag k=\"landuse\" v=\"reservoir\"/>";}
    else                    {$tmp_tags = "<tag k=\"natural\" v=\"water\"/>";}

    if    ($water_type == 0) {$tmp_tags .= "<tag k=\"water_type\" v=\"fresh\"/>";}
    elsif ($water_type == 1) {$tmp_tags .= "<tag k=\"water_type\" v=\"salt\"/>";}
    else                     {$tmp_tags .= "<tag k=\"water_type\" v=\"fresh\"/>";}

    $tmp_tags .= "<tag k=\"layer\" v=\"-2\"/>";
    $tmp_tags .= "<tag k=\"name\" v=\"$lakeHash{$item}{'LPN'} ()\"/>";
    $tmp_tags .= "<tag k=\"name:en\" v=\"\"/>";
    $tmp_tags .= "<tag k=\"name:ja\" v=\"$lakeHash{$item}{'LPN'}\"/>";
    $tmp_tags .= "<tag k=\"name:ja_rm\" v=\"\"/>";

    $num_waters++;
  }
  else {
    $tmp_tags = "<tag k=\"natural\" v=\"land\"/><tag k=\"layer\" v=\"-1\"/>";
    $num_lands++;
  }

  my $way 
    = sprintf("<way id=\"%d\" action=\"modify\" visible=\"true\">$tmp_tags$node_ref$tags</way>"
    , $negative_id);
  print OSM "$way\n";
  $num_ways++;
  printf LOG "Way %d: %d nodes id=%s/%s/%s LPN=%s\n"
    , $negative_id, $i, $item, $item2, $item3, $lakeHash{$item}{"LPN"};
  $node_ref = "";

}


# extracts from AdminAreaCd.xml 行政コード(抜粋)
# 「国土数値情報(コードリスト)平成19年 国土交通省」
# http://nlftp.mlit.go.jp/ksj/jpgis/codelist/codelists.zip

$xml_aac =<<"End";
<?xml version="1.0" encoding="UTF-8"?>
<ksjc:CodeSet xmlns:ksjc="http://nlftp.mlit.go.jp/ksj/schemas/ksj-app-cd" xmlns:jps="http://www.gsi.go.jp/GIS/jpgis/standardSchemas" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://nlftp.mlit.go.jp/ksj/schemas/ksj-app-cd KsjCodelist.xsd">	
 <ksjc:C002>	
     <description>行政コード</description>	
     <codelabel label="北海道小樽市" code="01203"/>	
     <codelabel label="北海道釧路市" code="01206"/>	
     <codelabel label="北海道北見市" code="01208"/>	
     <codelabel label="北海道夕張市" code="01209"/>	
     <codelabel label="北海道網走市" code="01211"/>	
     <codelabel label="北海道苫小牧市" code="01213"/>	
     <codelabel label="北海道稚内市" code="01214"/>	
     <codelabel label="北海道美唄市" code="01215"/>	
     <codelabel label="北海道芦別市" code="01216"/>	
     <codelabel label="北海道紋別市" code="01219"/>	
     <codelabel label="北海道三笠市" code="01222"/>	
     <codelabel label="北海道根室市" code="01223"/>	
     <codelabel label="北海道千歳市" code="01224"/>	
     <codelabel label="北海道登別市" code="01230"/>	
     <codelabel label="北海道恵庭市" code="01231"/>	
     <codelabel label="北海道石狩郡当別町" code="01303"/>	
     <codelabel label="北海道石狩郡新篠津村" code="01304"/>	
     <codelabel label="北海道亀田郡七飯町" code="01337"/>	
     <codelabel label="北海道茅部郡森町" code="01345"/>	
     <codelabel label="北海道爾志郡熊石町" code="01365"/>	
     <codelabel label="北海道磯谷郡蘭越町" code="01394"/>	
     <codelabel label="北海道虻田郡倶知安町" code="01400"/>	
     <codelabel label="北海道空知郡南幌町" code="01423"/>	
     <codelabel label="北海道夕張郡栗山町" code="01429"/>	
     <codelabel label="北海道樺戸郡新十津川町" code="01432"/>	
     <codelabel label="北海道雨竜郡雨竜町" code="01436"/>	
     <codelabel label="北海道雨竜郡沼田町" code="01438"/>	
     <codelabel label="北海道雨竜郡幌加内町" code="01439"/>	
     <codelabel label="北海道上川郡上川町" code="01457"/>	
     <codelabel label="北海道空知郡南富良野町" code="01462"/>	
     <codelabel label="北海道勇払郡占冠村" code="01463"/>	
     <codelabel label="北海道上川郡朝日町" code="01466"/>	
     <codelabel label="北海道留萌郡小平町" code="01482"/>	
     <codelabel label="北海道苫前郡初山別村" code="01485"/>	
     <codelabel label="北海道天塩郡幌延町" code="01488"/>	
     <codelabel label="北海道宗谷郡猿払村" code="01511"/>	
     <codelabel label="北海道枝幸郡浜頓別町" code="01512"/>	
     <codelabel label="北海道天塩郡豊富町" code="01516"/>	
     <codelabel label="北海道礼文郡礼文町" code="01517"/>	
     <codelabel label="北海道網走郡女満別町" code="01542"/>	
     <codelabel label="北海道網走郡津別町" code="01544"/>	
     <codelabel label="北海道斜里郡斜里町" code="01545"/>	
     <codelabel label="北海道斜里郡小清水町" code="01547"/>	
     <codelabel label="北海道常呂郡置戸町" code="01550"/>	
     <codelabel label="北海道常呂郡佐呂間町" code="01552"/>	
     <codelabel label="北海道常呂郡常呂町" code="01553"/>	
     <codelabel label="北海道紋別郡湧別町" code="01559"/>	
     <codelabel label="北海道紋別郡雄武町" code="01563"/>	
     <codelabel label="北海道虻田郡虻田町" code="01572"/>	
     <codelabel label="北海道虻田郡洞爺村" code="01573"/>	
     <codelabel label="北海道有珠郡壮瞥町" code="01575"/>	
     <codelabel label="北海道白老郡白老町" code="01578"/>	
     <codelabel label="北海道勇払郡厚真町" code="01581"/>	
     <codelabel label="北海道沙流郡平取町" code="01602"/>	
     <codelabel label="北海道新冠郡新冠町" code="01604"/>	
     <codelabel label="北海道静内郡静内町" code="01605"/>	
     <codelabel label="北海道浦河郡浦河町" code="01607"/>	
     <codelabel label="北海道様似郡様似町" code="01608"/>	
     <codelabel label="北海道幌泉郡えりも町" code="01609"/>	
     <codelabel label="北海道河東郡上士幌町" code="01633"/>	
     <codelabel label="北海道河東郡鹿追町" code="01634"/>	
     <codelabel label="北海道上川郡新得町" code="01635"/>	
     <codelabel label="北海道河西郡芽室町" code="01637"/>	
     <codelabel label="北海道広尾郡大樹町" code="01641"/>	
     <codelabel label="北海道中川郡豊頃町" code="01645"/>	
     <codelabel label="北海道中川郡本別町" code="01646"/>	
     <codelabel label="北海道足寄郡足寄町" code="01647"/>	
     <codelabel label="北海道釧路郡釧路町" code="01661"/>	
     <codelabel label="北海道厚岸郡厚岸町" code="01662"/>	
     <codelabel label="北海道厚岸郡浜中町" code="01663"/>	
     <codelabel label="北海道川上郡標茶町" code="01664"/>	
     <codelabel label="北海道川上郡弟子屈町" code="01665"/>	
     <codelabel label="北海道阿寒郡阿寒町" code="01666"/>	
     <codelabel label="北海道野付郡別海町" code="01691"/>	
     <codelabel label="北海道目梨郡羅臼町" code="01694"/>	
     <codelabel label="青森県青森市" code="02201"/>	
     <codelabel label="青森県弘前市" code="02202"/>	
     <codelabel label="青森県黒石市" code="02204"/>	
     <codelabel label="青森県五所川原市" code="02205"/>	
     <codelabel label="青森県十和田市" code="02206"/>	
     <codelabel label="青森県三沢市" code="02207"/>	
     <codelabel label="青森県むつ市" code="02208"/>	
     <codelabel label="青森県西津軽郡深浦町" code="02323"/>	
     <codelabel label="青森県中津軽郡西目屋村" code="02343"/>	
     <codelabel label="青森県南津軽郡平賀町" code="02365"/>	
     <codelabel label="青森県北津軽郡鶴田町" code="02384"/>	
     <codelabel label="青森県上北郡七戸町" code="02402"/>	
     <codelabel label="青森県上北郡東北町" code="02408"/>	
     <codelabel label="青森県上北郡六ケ所村" code="02411"/>	
     <codelabel label="青森県下北郡佐井村" code="02426"/>	
     <codelabel label="岩手県盛岡市" code="03201"/>	
     <codelabel label="岩手県花巻市" code="03205"/>	
     <codelabel label="岩手県一関市" code="03209"/>	
     <codelabel label="岩手県岩手郡雫石町" code="03301"/>	
     <codelabel label="岩手県岩手郡松尾村" code="03306"/>	
     <codelabel label="岩手県岩手郡玉山村" code="03307"/>	
     <codelabel label="岩手県和賀郡東和町" code="03361"/>	
     <codelabel label="岩手県和賀郡湯田町" code="03363"/>	
     <codelabel label="岩手県胆沢郡胆沢町" code="03383"/>	
     <codelabel label="岩手県九戸郡山形村" code="03504"/>	
     <codelabel label="宮城県石巻市" code="04202"/>	
     <codelabel label="宮城県刈田郡七ケ宿町" code="04302"/>	
     <codelabel label="宮城県柴田郡川崎町" code="04324"/>	
     <codelabel label="宮城県亘理郡亘理町" code="04361"/>	
     <codelabel label="宮城県黒川郡大和町" code="04421"/>	
     <codelabel label="宮城県玉造郡鳴子町" code="04482"/>	
     <codelabel label="宮城県牡鹿郡女川町" code="04581"/>	
     <codelabel label="秋田県能代市" code="05202"/>	
     <codelabel label="秋田県男鹿市" code="05206"/>	
     <codelabel label="秋田県湯沢市" code="05207"/>	
     <codelabel label="秋田県鹿角郡小坂町" code="05303"/>	
     <codelabel label="秋田県山本郡藤里町" code="05346"/>	
     <codelabel label="秋田県南秋田郡五城目町" code="05361"/>	
     <codelabel label="秋田県南秋田郡井川町" code="05366"/>	
     <codelabel label="秋田県南秋田郡大潟村" code="05368"/>	
     <codelabel label="秋田県仙北郡田沢湖町" code="05426"/>	
     <codelabel label="秋田県仙北郡西木村" code="05430"/>	
     <codelabel label="秋田県雄勝郡東成瀬村" code="05464"/>	
     <codelabel label="山形県山形市" code="06201"/>	
     <codelabel label="山形県米沢市" code="06202"/>	
     <codelabel label="山形県尾花沢市" code="06212"/>	
     <codelabel label="山形県南陽市" code="06213"/>	
     <codelabel label="山形県西村山郡西川町" code="06322"/>	
     <codelabel label="山形県東置賜郡高畠町" code="06381"/>	
     <codelabel label="山形県西置賜郡飯豊町" code="06403"/>	
     <codelabel label="山形県東田川郡朝日村" code="06427"/>	
     <codelabel label="山形県飽海郡遊佐町" code="06461"/>	
     <codelabel label="福島県会津若松市" code="07202"/>	
     <codelabel label="福島県郡山市" code="07203"/>	
     <codelabel label="福島県白河市" code="07205"/>	
     <codelabel label="福島県相馬市" code="07209"/>	
     <codelabel label="福島県岩瀬郡天栄村" code="07344"/>	
     <codelabel label="福島県南会津郡下郷町" code="07362"/>	
     <codelabel label="福島県南会津郡檜枝岐村" code="07364"/>	
     <codelabel label="福島県南会津郡只見町" code="07367"/>	
     <codelabel label="福島県耶麻郡熱塩加納村" code="07401"/>	
     <codelabel label="福島県耶麻郡北塩原村" code="07402"/>	
     <codelabel label="福島県耶麻郡猪苗代町" code="07408"/>	
     <codelabel label="福島県大沼郡金山町" code="07445"/>	
     <codelabel label="福島県石川郡石川町" code="07501"/>	
     <codelabel label="福島県石川郡玉川村" code="07502"/>	
     <codelabel label="福島県石川郡平田村" code="07503"/>	
     <codelabel label="福島県田村郡三春町" code="07521"/>	
     <codelabel label="茨城県水戸市" code="08201"/>	
     <codelabel label="茨城県土浦市" code="08203"/>	
     <codelabel label="茨城県石岡市" code="08205"/>	
     <codelabel label="茨城県龍ケ崎市" code="08208"/>	
     <codelabel label="茨城県水海道市" code="08211"/>	
     <codelabel label="茨城県常陸太田市" code="08212"/>	
     <codelabel label="茨城県笠間市" code="08216"/>	
     <codelabel label="茨城県つくば市" code="08220"/>	
     <codelabel label="茨城県鹿嶋市" code="08222"/>	
     <codelabel label="茨城県潮来市" code="08223"/>	
     <codelabel label="茨城県東茨城郡茨城町" code="08302"/>	
     <codelabel label="茨城県東茨城郡小川町" code="08303"/>	
     <codelabel label="茨城県東茨城郡大洗町" code="08309"/>	
     <codelabel label="茨城県鹿島郡旭村" code="08401"/>	
     <codelabel label="茨城県鹿島郡鉾田町" code="08402"/>	
     <codelabel label="茨城県鹿島郡大洋村" code="08403"/>	
     <codelabel label="茨城県鹿島郡神栖町" code="08406"/>	
     <codelabel label="茨城県行方郡麻生町" code="08421"/>	
     <codelabel label="茨城県行方郡北浦町" code="08424"/>	
     <codelabel label="茨城県行方郡玉造町" code="08425"/>	
     <codelabel label="茨城県稲敷郡美浦村" code="08442"/>	
     <codelabel label="茨城県稲敷郡阿見町" code="08443"/>	
     <codelabel label="茨城県新治郡玉里村" code="08462"/>	
     <codelabel label="栃木県日光市" code="09206"/>	
     <codelabel label="栃木県塩谷郡栗山村" code="09382"/>	
     <codelabel label="栃木県塩谷郡藤原町" code="09383"/>	
     <codelabel label="栃木県塩谷郡塩谷町" code="09384"/>	
     <codelabel label="栃木県那須郡那須町" code="09407"/>	
     <codelabel label="群馬県桐生市" code="10203"/>	
     <codelabel label="群馬県沼田市" code="10206"/>	
     <codelabel label="群馬県藤岡市" code="10209"/>	
     <codelabel label="群馬県勢多郡東村" code="10309"/>	
     <codelabel label="群馬県群馬郡榛名町" code="10321"/>	
     <codelabel label="群馬県群馬郡箕郷町" code="10323"/>	
     <codelabel label="群馬県多野郡鬼石町" code="10362"/>	
     <codelabel label="群馬県碓氷郡松井田町" code="10401"/>	
     <codelabel label="群馬県吾妻郡中之条町" code="10421"/>	
     <codelabel label="群馬県吾妻郡吾妻町" code="10423"/>	
     <codelabel label="群馬県吾妻郡長野原町" code="10424"/>	
     <codelabel label="群馬県吾妻郡嬬恋村" code="10425"/>	
     <codelabel label="群馬県吾妻郡六合村" code="10427"/>	
     <codelabel label="群馬県利根郡片品村" code="10443"/>	
     <codelabel label="群馬県利根郡水上町" code="10446"/>	
     <codelabel label="群馬県利根郡新治村" code="10447"/>	
     <codelabel label="埼玉県秩父市" code="11207"/>	
     <codelabel label="埼玉県所沢市" code="11208"/>	
     <codelabel label="埼玉県飯能市" code="11209"/>	
     <codelabel label="埼玉県入間市" code="11225"/>	
     <codelabel label="埼玉県入間郡毛呂山町" code="11326"/>	
     <codelabel label="埼玉県比企郡吉見町" code="11347"/>	
     <codelabel label="埼玉県児玉郡美里町" code="11381"/>	
     <codelabel label="埼玉県児玉郡児玉町" code="11382"/>	
     <codelabel label="埼玉県児玉郡神泉村" code="11384"/>	
     <codelabel label="埼玉県大里郡寄居町" code="11408"/>	
     <codelabel label="千葉県佐原市" code="12209"/>	
     <codelabel label="千葉県茂原市" code="12210"/>	
     <codelabel label="千葉県成田市" code="12211"/>	
     <codelabel label="千葉県佐倉市" code="12212"/>	
     <codelabel label="千葉県東金市" code="12213"/>	
     <codelabel label="千葉県柏市" code="12217"/>	
     <codelabel label="千葉県市原市" code="12219"/>	
     <codelabel label="千葉県八千代市" code="12221"/>	
     <codelabel label="千葉県我孫子市" code="12222"/>	
     <codelabel label="千葉県君津市" code="12225"/>	
     <codelabel label="千葉県印旛郡印旛村" code="12325"/>	
     <codelabel label="千葉県印旛郡本埜村" code="12328"/>	
     <codelabel label="千葉県印旛郡栄町" code="12329"/>	
     <codelabel label="千葉県香取郡小見川町" code="12344"/>	
     <codelabel label="千葉県長生郡一宮町" code="12421"/>	
     <codelabel label="千葉県長生郡長柄町" code="12426"/>	
     <codelabel label="東京都東村山市" code="13213"/>	
     <codelabel label="東京都東大和市" code="13220"/>	
     <codelabel label="東京都西多摩郡奥多摩町" code="13308"/>	
     <codelabel label="神奈川県秦野市" code="14211"/>	
     <codelabel label="神奈川県足柄上郡中井町" code="14361"/>	
     <codelabel label="神奈川県足柄上郡山北町" code="14364"/>	
     <codelabel label="神奈川県足柄下郡箱根町" code="14382"/>	
     <codelabel label="神奈川県愛甲郡愛川町" code="14401"/>	
     <codelabel label="神奈川県愛甲郡清川村" code="14402"/>	
     <codelabel label="神奈川県津久井郡城山町" code="14421"/>	
     <codelabel label="神奈川県津久井郡津久井町" code="14422"/>	
     <codelabel label="神奈川県津久井郡相模湖町" code="14423"/>	
     <codelabel label="神奈川県津久井郡藤野町" code="14424"/>	
     <codelabel label="新潟県新潟市" code="15201"/>	
     <codelabel label="新潟県柏崎市" code="15205"/>	
     <codelabel label="新潟県新発田市" code="15206"/>	
     <codelabel label="新潟県新井市" code="15217"/>	
     <codelabel label="新潟県阿賀野市" code="15223"/>	
     <codelabel label="新潟県佐渡市" code="15224"/>	
     <codelabel label="新潟県南蒲原郡下田村" code="15362"/>	
     <codelabel label="新潟県岩船郡朝日村" code="15584"/>	
     <codelabel label="富山県富山市" code="16201"/>	
     <codelabel label="富山県中新川郡立山町" code="16323"/>	
     <codelabel label="石川県金沢市" code="17201"/>	
     <codelabel label="石川県小松市" code="17203"/>	
     <codelabel label="石川県加賀市" code="17206"/>	
     <codelabel label="石川県羽咋市" code="17207"/>	
     <codelabel label="石川県河北郡内灘町" code="17365"/>	
     <codelabel label="福井県大野市" code="18205"/>	
     <codelabel label="福井県あわら市" code="18208"/>	
     <codelabel label="福井県大野郡和泉村" code="18342"/>	
     <codelabel label="福井県坂井郡丸岡町" code="18364"/>	
     <codelabel label="福井県三方郡美浜町" code="18442"/>	
     <codelabel label="山梨県甲府市" code="19201"/>	
     <codelabel label="山梨県南アルプス市" code="19208"/>	
     <codelabel label="山梨県西八代郡上九一色村" code="19341"/>	
     <codelabel label="山梨県西八代郡市川大門町" code="19343"/>	
     <codelabel label="山梨県南巨摩郡早川町" code="19364"/>	
     <codelabel label="山梨県南巨摩郡身延町" code="19365"/>	
     <codelabel label="山梨県南巨摩郡南部町" code="19366"/>	
     <codelabel label="山梨県南都留郡山中湖村" code="19425"/>	
     <codelabel label="山梨県南都留郡富士河口湖町" code="19430"/>	
     <codelabel label="山梨県北都留郡小菅村" code="19442"/>	
     <codelabel label="山梨県北都留郡丹波山村" code="19443"/>	
     <codelabel label="長野県長野市" code="20201"/>	
     <codelabel label="長野県松本市" code="20202"/>	
     <codelabel label="長野県上田市" code="20203"/>	
     <codelabel label="長野県岡谷市" code="20204"/>	
     <codelabel label="長野県諏訪市" code="20206"/>	
     <codelabel label="長野県駒ケ根市" code="20210"/>	
     <codelabel label="長野県大町市" code="20212"/>	
     <codelabel label="長野県飯山市" code="20213"/>	
     <codelabel label="長野県茅野市" code="20214"/>	
     <codelabel label="長野県塩尻市" code="20215"/>	
     <codelabel label="長野県佐久市" code="20217"/>	
     <codelabel label="長野県南佐久郡小海町" code="20303"/>	
     <codelabel label="長野県南佐久郡南相木村" code="20306"/>	
     <codelabel label="長野県北佐久郡軽井沢町" code="20321"/>	
     <codelabel label="長野県北佐久郡立科町" code="20324"/>	
     <codelabel label="長野県小県郡丸子町" code="20341"/>	
     <codelabel label="長野県小県郡真田町" code="20345"/>	
     <codelabel label="長野県諏訪郡下諏訪町" code="20361"/>	
     <codelabel label="長野県諏訪郡富士見町" code="20362"/>	
     <codelabel label="長野県上伊那郡高遠町" code="20381"/>	
     <codelabel label="長野県上伊那郡箕輪町" code="20383"/>	
     <codelabel label="長野県上伊那郡中川村" code="20386"/>	
     <codelabel label="長野県上伊那郡長谷村" code="20387"/>	
     <codelabel label="長野県下伊那郡松川町" code="20402"/>	
     <codelabel label="長野県下伊那郡阿南町" code="20404"/>	
     <codelabel label="長野県下伊那郡根羽村" code="20410"/>	
     <codelabel label="長野県下伊那郡大鹿村" code="20417"/>	
     <codelabel label="長野県木曽郡三岳村" code="20428"/>	
     <codelabel label="長野県木曽郡王滝村" code="20429"/>	
     <codelabel label="長野県東筑摩郡麻績村" code="20446"/>	
     <codelabel label="長野県下高井郡野沢温泉村" code="20563"/>	
     <codelabel label="長野県上水内郡信州新町" code="20581"/>	
     <codelabel label="長野県上水内郡信濃町" code="20583"/>	
     <codelabel label="長野県上水内郡牟礼村" code="20584"/>	
     <codelabel label="岐阜県高山市" code="21203"/>	
     <codelabel label="岐阜県中津川市" code="21206"/>	
     <codelabel label="岐阜県瑞浪市" code="21208"/>	
     <codelabel label="岐阜県恵那市" code="21210"/>	
     <codelabel label="岐阜県山県市" code="21215"/>	
     <codelabel label="岐阜県飛騨市" code="21217"/>	
     <codelabel label="岐阜県下呂市" code="21220"/>	
     <codelabel label="岐阜県養老郡上石津町" code="21342"/>	
     <codelabel label="岐阜県不破郡垂井町" code="21361"/>	
     <codelabel label="岐阜県揖斐郡揖斐川町" code="21401"/>	
     <codelabel label="岐阜県加茂郡八百津町" code="21505"/>	
     <codelabel label="岐阜県可児郡御嵩町" code="21521"/>	
     <codelabel label="岐阜県可児郡兼山町" code="21523"/>	
     <codelabel label="岐阜県大野郡白川村" code="21604"/>	
     <codelabel label="静岡県浜松市" code="22202"/>	
     <codelabel label="静岡県富士宮市" code="22207"/>	
     <codelabel label="静岡県伊東市" code="22208"/>	
     <codelabel label="静岡県御殿場市" code="22215"/>	
     <codelabel label="静岡県天竜市" code="22217"/>	
     <codelabel label="静岡県湖西市" code="22221"/>	
     <codelabel label="静岡県伊豆市" code="22222"/>	
     <codelabel label="静岡県磐田郡龍山村" code="22486"/>	
     <codelabel label="静岡県磐田郡佐久間町" code="22487"/>	
     <codelabel label="静岡県磐田郡水窪町" code="22488"/>	
     <codelabel label="静岡県浜名郡舞阪町" code="22502"/>	
     <codelabel label="静岡県浜名郡新居町" code="22503"/>	
     <codelabel label="静岡県浜名郡雄踏町" code="22505"/>	
     <codelabel label="静岡県引佐郡細江町" code="22521"/>	
     <codelabel label="静岡県引佐郡引佐町" code="22522"/>	
     <codelabel label="静岡県引佐郡三ケ日町" code="22523"/>	
     <codelabel label="愛知県豊田市" code="23211"/>	
     <codelabel label="愛知県犬山市" code="23215"/>	
     <codelabel label="愛知県日進市" code="23230"/>	
     <codelabel label="愛知県愛知郡東郷町" code="23302"/>	
     <codelabel label="愛知県西加茂郡三好町" code="23521"/>	
     <codelabel label="愛知県北設楽郡設楽町" code="23561"/>	
     <codelabel label="愛知県北設楽郡豊根村" code="23563"/>	
     <codelabel label="愛知県北設楽郡富山村" code="23564"/>	
     <codelabel label="愛知県南設楽郡鳳来町" code="23581"/>	
     <codelabel label="三重県松阪市" code="24204"/>	
     <codelabel label="三重県名張市" code="24208"/>	
     <codelabel label="三重県熊野市" code="24212"/>	
     <codelabel label="三重県安芸郡芸濃町" code="24382"/>	
     <codelabel label="三重県多気郡宮川村" code="24445"/>	
     <codelabel label="三重県北牟婁郡海山町" code="24542"/>	
     <codelabel label="滋賀県大津市" code="25201"/>	
     <codelabel label="滋賀県彦根市" code="25202"/>	
     <codelabel label="滋賀県長浜市" code="25203"/>	
     <codelabel label="滋賀県近江八幡市" code="25204"/>	
     <codelabel label="滋賀県草津市" code="25206"/>	
     <codelabel label="滋賀県守山市" code="25207"/>	
     <codelabel label="滋賀県滋賀郡志賀町" code="25301"/>	
     <codelabel label="滋賀県蒲生郡安土町" code="25381"/>	
     <codelabel label="滋賀県神崎郡能登川町" code="25403"/>	
     <codelabel label="滋賀県坂田郡近江町" code="25464"/>	
     <codelabel label="滋賀県東浅井郡湖北町" code="25483"/>	
     <codelabel label="滋賀県東浅井郡びわ町" code="25484"/>	
     <codelabel label="滋賀県伊香郡高月町" code="25501"/>	
     <codelabel label="滋賀県伊香郡木之本町" code="25502"/>	
     <codelabel label="滋賀県伊香郡余呉町" code="25503"/>	
     <codelabel label="滋賀県伊香郡西浅井町" code="25504"/>	
     <codelabel label="京都府宮津市" code="26205"/>	
     <codelabel label="京都府京丹後市" code="26212"/>	
     <codelabel label="京都府北桑田郡美山町" code="26382"/>	
     <codelabel label="京都府船井郡園部町" code="26401"/>	
     <codelabel label="京都府船井郡日吉町" code="26404"/>	
     <codelabel label="京都府与謝郡岩滝町" code="26462"/>	
     <codelabel label="大阪府豊能郡豊能町" code="27321"/>	
     <codelabel label="兵庫県西宮市" code="28204"/>	
     <codelabel label="兵庫県加古川市" code="28210"/>	
     <codelabel label="兵庫県宝塚市" code="28214"/>	
     <codelabel label="兵庫県三木市" code="28215"/>	
     <codelabel label="兵庫県川西市" code="28217"/>	
     <codelabel label="兵庫県三田市" code="28219"/>	
     <codelabel label="兵庫県川辺郡猪名川町" code="28301"/>	
     <codelabel label="兵庫県加東郡東条町" code="28343"/>	
     <codelabel label="兵庫県多可郡中町" code="28361"/>	
     <codelabel label="兵庫県飾磨郡夢前町" code="28422"/>	
     <codelabel label="兵庫県赤穂郡上郡町" code="28481"/>	
     <codelabel label="兵庫県宍粟郡安富町" code="28522"/>	
     <codelabel label="奈良県桜井市" code="29206"/>	
     <codelabel label="奈良県山辺郡山添村" code="29322"/>	
     <codelabel label="奈良県宇陀郡榛原町" code="29383"/>	
     <codelabel label="奈良県宇陀郡室生村" code="29384"/>	
     <codelabel label="奈良県吉野郡吉野町" code="29441"/>	
     <codelabel label="奈良県吉野郡十津川村" code="29449"/>	
     <codelabel label="奈良県吉野郡下北山村" code="29450"/>	
     <codelabel label="奈良県吉野郡上北山村" code="29451"/>	
     <codelabel label="奈良県吉野郡川上村" code="29452"/>	
     <codelabel label="和歌山県有田郡清水町" code="30365"/>	
     <codelabel label="和歌山県西牟婁郡大塔村" code="30403"/>	
     <codelabel label="和歌山県西牟婁郡日置川町" code="30405"/>	
     <codelabel label="和歌山県東牟婁郡北山村" code="30427"/>	
     <codelabel label="鳥取県鳥取市" code="31201"/>	
     <codelabel label="鳥取県米子市" code="31202"/>	
     <codelabel label="鳥取県境港市" code="31204"/>	
     <codelabel label="鳥取県日野郡日南町" code="31401"/>	
     <codelabel label="鳥取県日野郡江府町" code="31403"/>	
     <codelabel label="島根県松江市" code="32201"/>	
     <codelabel label="島根県出雲市" code="32203"/>	
     <codelabel label="島根県益田市" code="32204"/>	
     <codelabel label="島根県安来市" code="32206"/>	
     <codelabel label="島根県八束郡東出雲町" code="32304"/>	
     <codelabel label="島根県簸川郡斐川町" code="32401"/>	
     <codelabel label="島根県那賀郡弥栄村" code="32464"/>	
     <codelabel label="島根県那賀郡三隅町" code="32465"/>	
     <codelabel label="岡山県岡山市" code="33201"/>	
     <codelabel label="岡山県倉敷市" code="33202"/>	
     <codelabel label="岡山県玉野市" code="33204"/>	
     <codelabel label="岡山県高梁市" code="33209"/>	
     <codelabel label="岡山県新見市" code="33210"/>	
     <codelabel label="岡山県御津郡建部町" code="33303"/>	
     <codelabel label="岡山県御津郡加茂川町" code="33305"/>	
     <codelabel label="岡山県苫田郡鏡野町" code="33606"/>	
     <codelabel label="広島県三原市" code="34204"/>	
     <codelabel label="広島県尾道市" code="34205"/>	
     <codelabel label="広島県府中市" code="34208"/>	
     <codelabel label="広島県庄原市" code="34210"/>	
     <codelabel label="広島県大竹市" code="34211"/>	
     <codelabel label="広島県東広島市" code="34212"/>	
     <codelabel label="広島県廿日市市" code="34213"/>	
     <codelabel label="広島県安芸高田市" code="34214"/>	
     <codelabel label="広島県世羅郡世羅町" code="34462"/>	
     <codelabel label="山口県下関市" code="35201"/>	
     <codelabel label="山口県宇部市" code="35202"/>	
     <codelabel label="山口県山口市" code="35203"/>	
     <codelabel label="山口県萩市" code="35204"/>	
     <codelabel label="山口県下松市" code="35207"/>	
     <codelabel label="山口県岩国市" code="35208"/>	
     <codelabel label="山口県長門市" code="35211"/>	
     <codelabel label="山口県周南市" code="35215"/>	
     <codelabel label="山口県玖珂郡周東町" code="35325"/>	
     <codelabel label="山口県玖珂郡美川町" code="35328"/>	
     <codelabel label="山口県玖珂郡美和町" code="35329"/>	
     <codelabel label="山口県佐波郡徳地町" code="35381"/>	
     <codelabel label="山口県阿武郡阿東町" code="35504"/>	
     <codelabel label="香川県坂出市" code="37203"/>	
     <codelabel label="香川県綾歌郡綾上町" code="37381"/>	
     <codelabel label="香川県綾歌郡綾南町" code="37382"/>	
     <codelabel label="香川県仲多度郡満濃町" code="37402"/>	
     <codelabel label="香川県仲多度郡仲南町" code="37405"/>	
     <codelabel label="愛媛県松山市" code="38201"/>	
     <codelabel label="愛媛県今治市" code="38202"/>	
     <codelabel label="愛媛県西条市" code="38206"/>	
     <codelabel label="愛媛県大洲市" code="38207"/>	
     <codelabel label="愛媛県四国中央市" code="38213"/>	
     <codelabel label="愛媛県西予市" code="38214"/>	
     <codelabel label="高知県南国市" code="39204"/>	
     <codelabel label="高知県安芸郡北川村" code="39305"/>	
     <codelabel label="高知県安芸郡馬路村" code="39306"/>	
     <codelabel label="高知県香美郡土佐山田町" code="39323"/>	
     <codelabel label="高知県香美郡香北町" code="39326"/>	
     <codelabel label="高知県香美郡物部村" code="39328"/>	
     <codelabel label="高知県長岡郡本山町" code="39341"/>	
     <codelabel label="高知県土佐郡土佐町" code="39363"/>	
     <codelabel label="高知県土佐郡大川村" code="39364"/>	
     <codelabel label="佐賀県佐賀郡富士町" code="41306"/>	
     <codelabel label="佐賀県神埼郡三瀬村" code="41326"/>	
     <codelabel label="長崎県大村市" code="42205"/>	
     <codelabel label="熊本県熊本市" code="43201"/>	
     <codelabel label="熊本県阿蘇郡小国町" code="43424"/>	
     <codelabel label="熊本県八代郡鏡町" code="43463"/>	
     <codelabel label="熊本県球磨郡水上村" code="43507"/>	
     <codelabel label="大分県大分市" code="44201"/>	
     <codelabel label="大分県別府市" code="44202"/>	
     <codelabel label="大分県日田市" code="44204"/>	
     <codelabel label="大分県竹田市" code="44208"/>	
     <codelabel label="大分県大分郡庄内町" code="44363"/>	
     <codelabel label="大分県大分郡湯布院町" code="44364"/>	
     <codelabel label="宮崎県西都市" code="45208"/>	
     <codelabel label="宮崎県北諸県郡高崎町" code="45345"/>	
     <codelabel label="宮崎県西諸県郡高原町" code="45361"/>	
     <codelabel label="宮崎県西諸県郡野尻町" code="45362"/>	
     <codelabel label="宮崎県西諸県郡須木村" code="45363"/>	
     <codelabel label="宮崎県児湯郡西米良村" code="45403"/>	
     <codelabel label="宮崎県東臼杵郡東郷町" code="45422"/>	
     <codelabel label="宮崎県東臼杵郡南郷村" code="45423"/>	
     <codelabel label="宮崎県東臼杵郡西郷村" code="45424"/>	
     <codelabel label="宮崎県東臼杵郡諸塚村" code="45429"/>	
     <codelabel label="宮崎県東臼杵郡椎葉村" code="45430"/>	
     <codelabel label="鹿児島県鹿屋市" code="46203"/>	
     <codelabel label="鹿児島県大口市" code="46209"/>	
     <codelabel label="鹿児島県指宿市" code="46210"/>	
     <codelabel label="鹿児島県揖宿郡山川町" code="46322"/>	
     <codelabel label="鹿児島県揖宿郡開聞町" code="46324"/>	
     <codelabel label="鹿児島県日置郡吹上町" code="46367"/>	
     <codelabel label="沖縄県那覇市" code="47201"/>	
     <codelabel label="沖縄県豊見城市" code="47212"/>	
     <codelabel label="沖縄県国頭郡国頭村" code="47301"/>	
     <codelabel label="沖縄県国頭郡東村" code="47303"/>	
     <codelabel label="沖縄県国頭郡宜野座村" code="47313"/>	
 </ksjc:C002>	
</ksjc:CodeSet>	
End


# PrefCode.xml 都道府県コード
# 「国土数値情報(コードリスト)平成19年 国土交通省」
# http://nlftp.mlit.go.jp/ksj/jpgis/codelist/codelists.zip

$xml_pref =<<"End";
<?xml version="1.0" encoding="UTF-8"?>
<ksjc:CodeSet xmlns:ksjc="http://nlftp.mlit.go.jp/ksj/schemas/ksj-app-cd" xmlns:jps="http://www.gsi.go.jp/GIS/jpgis/standardSchemas" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://nlftp.mlit.go.jp/ksj/schemas/ksj-app-cd KsjCodelist.xsd">
 <ksjc:C001>
     <description>都道府県コード</description>
     <codelabel label="北海道" code="01"/>
     <codelabel label="青森県" code="02"/>
     <codelabel label="岩手県" code="03"/>
     <codelabel label="宮城県" code="04"/>
     <codelabel label="秋田県" code="05"/>
     <codelabel label="山形県" code="06"/>
     <codelabel label="福島県" code="07"/>
     <codelabel label="茨城県" code="08"/>
     <codelabel label="栃木県" code="09"/>
     <codelabel label="群馬県" code="10"/>
     <codelabel label="埼玉県" code="11"/>
     <codelabel label="千葉県" code="12"/>
     <codelabel label="東京都" code="13"/>
     <codelabel label="神奈川県" code="14"/>
     <codelabel label="新潟県" code="15"/>
     <codelabel label="富山県" code="16"/>
     <codelabel label="石川県" code="17"/>
     <codelabel label="福井県" code="18"/>
     <codelabel label="山梨県" code="19"/>
     <codelabel label="長野県" code="20"/>
     <codelabel label="岐阜県" code="21"/>
     <codelabel label="静岡県" code="22"/>
     <codelabel label="愛知県" code="23"/>
     <codelabel label="三重県" code="24"/>
     <codelabel label="滋賀県" code="25"/>
     <codelabel label="京都府" code="26"/>
     <codelabel label="大阪府" code="27"/>
     <codelabel label="兵庫県" code="28"/>
     <codelabel label="奈良県" code="29"/>
     <codelabel label="和歌山県" code="30"/>
     <codelabel label="鳥取県" code="31"/>
     <codelabel label="島根県" code="32"/>
     <codelabel label="岡山県" code="33"/>
     <codelabel label="広島県" code="34"/>
     <codelabel label="山口県" code="35"/>
     <codelabel label="徳島県" code="36"/>
     <codelabel label="香川県" code="37"/>
     <codelabel label="愛媛県" code="38"/>
     <codelabel label="高知県" code="39"/>
     <codelabel label="福岡県" code="40"/>
     <codelabel label="佐賀県" code="41"/>
     <codelabel label="長崎県" code="42"/>
     <codelabel label="熊本県" code="43"/>
     <codelabel label="大分県" code="44"/>
     <codelabel label="宮崎県" code="45"/>
     <codelabel label="鹿児島県" code="46"/>
     <codelabel label="沖縄県" code="47"/>
 </ksjc:C001>
</ksjc:CodeSet>
End

# run this script.

main();


# end of script

__END__