OSDN Git Service

RELEASE: 2015-02-21
authoryuuhayashi <hayashi.yuu@gmail.com>
Sun, 22 Feb 2015 02:36:07 +0000 (11:36 +0900)
committeryuuhayashi <hayashi.yuu@gmail.com>
Sun, 22 Feb 2015 02:36:07 +0000 (11:36 +0900)
16 files changed:
.gitignore
ConvBusstop.sh [deleted file]
build.xml
dest/ConvBusstop.bat [deleted file]
dest/database.properties [deleted file]
expBusstop.bat [new file with mode: 0644]
src/ConvBusstop.bat
src/ConvBusstop.sh [changed mode: 0755->0644]
src/database.properties
src/expBusstop.bat
src/osm/jp/ConvBusroute.java
src/osm/jp/ConvBusstop.java
src/osm/jp/DbBusstop.java
src/osm/jp/RectArea.java
src/osm/jp/api/HttpGET.java
src/osm/jp/api/HttpPOST.java

index 68bdc7d..107128c 100644 (file)
@@ -1,7 +1,26 @@
-*.class
-*.jar
-*.zip
-bin/
-classes/
-sample/
-P11-10_14_GML/
\ No newline at end of file
+*.class\r
+*.jar\r
+*.zip\r
+bin/\r
+classes/\r
+sample/\r
+dest/
+\r
+P*-*_GML/\r
+\r
+# ============ #\r
+# Eclipse      #\r
+# ============ #\r
+.metadata\r
+.settings\r
+\r
+# ============ #\r
+# OS generated #\r
+# ============ #\r
+.DS_Store*\r
+._*\r
+.Spotlight-V100\r
+.Trashes\r
+Icon?\r
+ehthumbs.db\r
+[Tt]humbs.db
diff --git a/ConvBusstop.sh b/ConvBusstop.sh
deleted file mode 100644 (file)
index b977c22..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-rm -r database
-java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusroute
-
-rm -r database
-java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop -nocheck
index 9fb4284..f9c6677 100644 (file)
--- a/build.xml
+++ b/build.xml
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE configuration>
-<project name="ConvBusstop" default="all" basedir=".">
-       <!--
-       ソース以外にビルドに必要なライブラリ
-       ../hayashi_0225.jar
-       ../hsqldb_2_2_8.jar
-       ../jar-in-jar-loader.zip
-       -->
-    <property name="src" value="${basedir}/src" />
-    <property name="classes" value="${basedir}/classes" />
-       <property name="dest" value="${basedir}/bin"></property>
-       <property name="javalib" value="lib"></property>
-       <property name="appname" value="ConvBusstop"></property>
-       <property name="version" value=""></property>
-       <property name="dblib" value="hsqldb_2.2.9.jar"></property>
-       <property name="hayashilib" value="hayashi_0225.jar"></property>
-
-
-       <!--
-       [STEP 1] クリーンナップ
-       -->
-       <target name="clean" description="前回作成したclassファイルを削除する">
-               <delete>
-                       <fileset dir="${classes}" includes="**/*.class" />
-                       <fileset dir="${src}" includes="**/*.class" />
-               </delete>
-       </target>
-
-       <!--
-       [STEP 2] コンパイル
-       -->
-       <target name="compile_src" depends="clean" description="コンパイル src">
-           <javac target="1.6" source="1.6" optimize="off" debug="on" verbose="false" srcdir="${src}" destdir="${classes}" encoding="UTF-8" >
-                       <include name="**" />
-               <exclude name="**/*.smap" />
-
-               <classpath>
-                               <pathelement path="${src}"/>
-                               <fileset dir="${javalib}">
-                                       <include name="${hayashilib}"/>
-                                       <include name="${dblib}"/>
-                               </fileset>
-                       </classpath>
-               </javac>
-       </target>
-
-       <!--
-       [STEP 3] リンク
-       -->
-    <target name="create_run_jar" depends="compile_src" description="'${appname}.jar'を作成する">
-               <tstamp>
-                       <format property="ts" pattern="yyyy/MM/dd-HH:mm:ss-z"/>
-               </tstamp>
-        <jar destfile="${basedir}/${appname}.jar">
-                       <fileset dir="${src}" includes="**/*.png" />
-                       <fileset dir="${src}" includes="**/*.gif" />
-                       <fileset dir="${src}" includes="**/*.jpg" />
-
-                       <manifest>
-                               <attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>
-                               <attribute name="Rsrc-Main-Class" value="osm.jp.ConvBusstop"/>
-                               <attribute name="Class-Path" value="."/>
-                               <attribute name="Rsrc-Class-Path" value="./ ../ ${javalib}/${hayashilib} ${javalib}/${dblib}"/>
-                               <attribute name="Implementation-Title"   value="${appname}"/>
-                               <attribute name="Implementation-Version" value="${appname}"/>
-                               <attribute name="Implementation-Vendor"  value="hayashi"/>
-                               <attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}])"/>
-                       </manifest>
-                       <!-- zipfileset src="${javalib}/jar-in-jar-loader.zip"/ -->
-           <!-- zipfileset dir="${javalib}" includes="${hayashilib}"/ -->
-           <!-- zipfileset dir="${javalib}" includes="${dblib}"/ -->
-                       <zipfileset dir="classes"/>
-                       <zipfileset dir="${src}"/>
-        </jar>
-    </target>
-
-       <!--
-       [STEP 4] デプロイ
-       -->
-    <target name="deploy" depends="create_run_jar" description="'${appname}.jar'を作成する">
-       <zip destfile="${appname}.zip">
-           <fileset dir="${basedir}" includes="${appname}.jar"/>
-                       <fileset dir="${javalib}">
-                               <include name="${hayashilib}"/>
-                               <include name="${dblib}"/>
-                       </fileset>
-           <fileset dir="${src}" includes="ConvBusstop.bat"/>
-           <fileset dir="${src}" includes="ConvBusstop.sh"/>
-           <fileset dir="${src}" includes="database.properties"/>
-       </zip>
-               <copy preservelastmodified="true" todir="${dest}">
-                       <fileset file="${basedir}/${appname}.jar"/>
-                       <fileset dir="${javalib}">
-                               <include name="${hayashilib}"/>
-                               <include name="${dblib}"/>
-                       </fileset>
-                       <fileset file="${src}/ConvBusstop.bat"/>
-           <fileset file="${src}/ConvBusstop.sh"/>
-                       <fileset file="${src}/database.properties" />
-               </copy>
-    </target>
-
-       <target name="all" depends="deploy"></target>
-</project>
-
+<?xml version="1.0" encoding="utf-8" ?>\r
+<!DOCTYPE configuration>\r
+<project name="ConvBusstop" default="all" basedir=".">\r
+       <!--\r
+       ソース以外にビルドに必要なライブラリ\r
+       ../hayashi_0225.jar\r
+       ../hsqldb_2_2_8.jar\r
+       ../jar-in-jar-loader.zip\r
+       -->\r
+    <property name="src" value="${basedir}/src" />\r
+    <property name="classes" value="${basedir}/classes" />\r
+       <property name="dest" value="${basedir}/bin"></property>\r
+       <property name="javalib" value="lib"></property>\r
+       <property name="appname" value="ConvBusstop"></property>\r
+       <property name="version" value=""></property>\r
+       <property name="dblib" value="hsqldb_2.2.9.jar"></property>\r
+       <property name="hayashilib" value="hayashi_0225.jar"></property>\r
+\r
+\r
+       <!--\r
+       [STEP 1] クリーンナップ\r
+       -->\r
+       <target name="clean" description="前回作成したclassファイルを削除する">\r
+               <delete>\r
+                       <fileset dir="${classes}" includes="**/*.class" />\r
+                       <fileset dir="${src}" includes="**/*.class" />\r
+               </delete>\r
+       </target>\r
+\r
+       <!--\r
+       [STEP 2] コンパイル\r
+       -->\r
+       <target name="compile_src" depends="clean" description="コンパイル src">\r
+           <javac target="1.7" source="1.7" optimize="off" debug="on" verbose="false" srcdir="${src}" destdir="${classes}" encoding="UTF-8" includeantruntime="false">\r
+                       <include name="**" />\r
+               <exclude name="**/*.smap" />\r
+\r
+               <classpath>\r
+                               <pathelement path="${src}"/>\r
+                               <fileset dir="${javalib}">\r
+                                       <include name="${hayashilib}"/>\r
+                                       <include name="${dblib}"/>\r
+                               </fileset>\r
+                       </classpath>\r
+               </javac>\r
+       </target>\r
+\r
+       <!--\r
+       [STEP 3] リンク\r
+       -->\r
+    <target name="create_run_jar" depends="compile_src" description="'${appname}.jar'を作成する">\r
+               <tstamp>\r
+                       <format property="ts" pattern="yyyy/MM/dd-HH:mm:ss-z"/>\r
+               </tstamp>\r
+        <jar destfile="${basedir}/${appname}.jar">\r
+                       <fileset dir="${src}" includes="**/*.png" />\r
+                       <fileset dir="${src}" includes="**/*.gif" />\r
+                       <fileset dir="${src}" includes="**/*.jpg" />\r
+\r
+                       <manifest>\r
+                               <attribute name="Main-Class" value="org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader"/>\r
+                               <attribute name="Rsrc-Main-Class" value="osm.jp.ConvBusstop"/>\r
+                               <attribute name="Class-Path" value="."/>\r
+                               <attribute name="Rsrc-Class-Path" value="./ ../ ${javalib}/${hayashilib} ${javalib}/${dblib}"/>\r
+                               <attribute name="Implementation-Title"   value="${appname}"/>\r
+                               <attribute name="Implementation-Version" value="${appname}"/>\r
+                               <attribute name="Implementation-Vendor"  value="hayashi"/>\r
+                               <attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}])"/>\r
+                       </manifest>\r
+                       <!-- zipfileset src="${javalib}/jar-in-jar-loader.zip"/ -->\r
+           <!-- zipfileset dir="${javalib}" includes="${hayashilib}"/ -->\r
+           <!-- zipfileset dir="${javalib}" includes="${dblib}"/ -->\r
+                       <zipfileset dir="classes"/>\r
+                       <zipfileset dir="${src}"/>\r
+        </jar>\r
+    </target>\r
+\r
+       <!--\r
+       [STEP 4] デプロイ\r
+       -->\r
+    <target name="deploy" depends="create_run_jar" description="'${appname}.jar'を作成する">\r
+       <zip destfile="${appname}.zip">\r
+           <fileset dir="${basedir}" includes="${appname}.jar"/>\r
+                       <fileset dir="${javalib}">\r
+                               <include name="${hayashilib}"/>\r
+                               <include name="${dblib}"/>\r
+                       </fileset>\r
+           <fileset dir="${src}" includes="ConvBusstop.bat"/>\r
+           <fileset dir="${src}" includes="ConvBusstop.sh"/>\r
+           <fileset dir="${src}" includes="database.properties"/>\r
+       </zip>\r
+               <copy preservelastmodified="true" todir="${dest}">\r
+                       <fileset file="${basedir}/${appname}.jar"/>\r
+                       <fileset dir="${javalib}">\r
+                               <include name="${hayashilib}"/>\r
+                               <include name="${dblib}"/>\r
+                       </fileset>\r
+                       <fileset file="${src}/ConvBusstop.bat"/>\r
+           <fileset file="${src}/ConvBusstop.sh"/>\r
+                       <fileset file="${src}/database.properties" />\r
+               </copy>\r
+    </target>\r
+\r
+       <target name="all" depends="deploy"></target>\r
+</project>\r
+\r
diff --git a/dest/ConvBusstop.bat b/dest/ConvBusstop.bat
deleted file mode 100644 (file)
index 09a806a..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-rem java -jar ConvBusstop.jar
-
-java -jar ConvBusstop.jar -nocheck
-
-pause
\ No newline at end of file
diff --git a/dest/database.properties b/dest/database.properties
deleted file mode 100644 (file)
index b8aa951..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-db_driver=org.hsqldb.jdbcDriver
-db_url=jdbc:hsqldb:file:./database/db
-db_user=sa
-db_passwd=
diff --git a/expBusstop.bat b/expBusstop.bat
new file mode 100644 (file)
index 0000000..e7e1035
--- /dev/null
@@ -0,0 +1,3 @@
+java -jar ReadKIBAN.jar DbBusstop\r
+\r
+pause
\ No newline at end of file
index 9a2c2ee..9af83d8 100644 (file)
@@ -1,7 +1,7 @@
-del -f database
-java -cp .;ConvBusstop.jar;hayashi_0225.jar;hsqldb_2.2.9.jar osm.jp.ConvBusroute
-
-del -f database
-java -cp .;ConvBusstop.jar;hayashi_0225.jar;hsqldb_2.2.9.jar osm.jp.ConvBusstop -nocheck
-
+rem del -f database\r
+rem java -cp .;ConvBusstop.jar;hayashi_0225.jar;hsqldb_2.2.9.jar osm.jp.ConvBusroute -nocheck\r
+\r
+del -f database\r
+java -cp .;ConvBusstop.jar;hayashi_0225.jar;hsqldb_2.2.9.jar osm.jp.ConvBusstop -check\r
+\r
 pause
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index b977c22..f52ae0a
@@ -1,5 +1,5 @@
-rm -r database
-java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusroute
-
-rm -r database
-java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop -nocheck
+rm -r database\r
+java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusroute\r
+\r
+rm -r database\r
+java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop -nocheck\r
index b8aa951..e66e66c 100644 (file)
@@ -1,4 +1,4 @@
-db_driver=org.hsqldb.jdbcDriver
-db_url=jdbc:hsqldb:file:./database/db
-db_user=sa
-db_passwd=
+db_driver=org.hsqldb.jdbcDriver\r
+db_url=jdbc:hsqldb:file:./database/db\r
+db_user=sa\r
+db_passwd=\r
index 895a323..e7e1035 100644 (file)
@@ -1,3 +1,3 @@
-java -jar ReadKIBAN.jar DbBusstop
-
+java -jar ReadKIBAN.jar DbBusstop\r
+\r
 pause
\ No newline at end of file
index c161d69..cb19ba6 100644 (file)
-package osm.jp;
-import hayashi.yuu.tools.logger.LoggerFactory;
-
-import javax.xml.parsers.*;
-import javax.xml.transform.TransformerException;
-
-import org.w3c.dom.*;
-import org.xml.sax.*;
-
-import java.io.*;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.logging.Logger;
-
-import jp.co.areaweb.tools.database.*;
-
-public class ConvBusroute {
-
-       String filter = "";
-       String urlStr = "";
-
-       public static final boolean DB_INIT = false;
-
-       // 近くのバス停を探す範囲(バス停を中心としたNEER×2m四方の領域
-       static final int NEER = 75;
-       static boolean nocheck = true;
-       static Logger logger = LoggerFactory.getInstance();
-
-       /**
-        * メイン
-        *
-        *      java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusroute
-        *
-        * @throws IOException
-        * @throws SQLException
-        * @throws ClassNotFoundException
-        * @throws FileNotFoundException
-        * @throws TransformerException
-        * @throws SAXException
-        * @throws ParserConfigurationException */
-       public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException, TransformerException
-       {
-               /**
-                * アプリケーション [ConvBusroute]
-                * > java -jar ConvBusstop.jar <オプション>
-                *      オプション: -exp 実行する直前にデータベースを初期化する(省略可能)
-                */
-               File dbdir = new File("database");
-               if (!dbdir.isDirectory()) {
-                       dbdir.mkdir();
-               }
-
-               Connection con = DatabaseTool.openDb("database");
-               ConvBusroute.initDb(con);
-
-               try {
-                       /**
-                        * バスルートデータ変換のメイン処理
-                        */
-                       int fcounter = 0;
-                       File dir = new File(".");
-                       File[] files = dir.listFiles();
-                       for (File iFile : files) {
-                               if (checkFile(iFile)) {
-                                       fcounter++;
-                                       ConvBusroute.clearDb(con);
-                                       inputFile(con, iFile);
-
-                                       // ローカルデータベース内の情報を出力する
-                                       String iStr = iFile.getName();
-                                       outputDb(con, iStr.substring(0, iStr.length() - 4));
-                               }
-                       }
-                       logger.info("["+ fcounter +"]つのファイルをインポートしました。");
-               }
-               finally {
-                       DatabaseTool.closeDb(con);
-               }
-       }
-
-       /**
-        * ソースファイルを読み取ってローカルベータベースへ記録する
-        * @param con
-        * @param iFile
-        * @throws FileNotFoundException
-        * @throws ClassNotFoundException
-        * @throws SQLException
-        * @throws IOException
-        * @throws ParserConfigurationException 
-        * @throws SAXException 
-        */
-       public static void inputFile (Connection con, File iFile) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {
-               int iCounter = 0;
-
-               String iStr = iFile.getName();
-               File dir = new File(iStr.substring(0, iStr.length() - 4));
-               dir.mkdir();
-
-               DocumentBuilderFactory factory;
-               DocumentBuilder        builder;
-               Node root;
-
-               iCounter = 0;
-               factory = DocumentBuilderFactory.newInstance();
-               builder = factory.newDocumentBuilder();
-               factory.setIgnoringElementContentWhitespace(true);
-               factory.setIgnoringComments(true);
-               factory.setValidating(true);
-               root    = builder.parse(iStr);
-
-               iCounter += importNodes(con, root, iStr.substring(0, iStr.length() - 4));
-               logger.info("バスルート数["+ iCounter +"]");
-       }
-
-       public static void clearDb(Connection con) throws SQLException {
-               Statement stmt = con.createStatement();
-               long count = stmt.executeUpdate("delete from bus_route");
-           logger.info("'bus_route'から "+ count +" 件のデータを削除しました。");
-           
-           count = stmt.executeUpdate("delete from bus_Curve");
-           logger.info("'bus_Curve'から "+ count +" 件のデータを削除しました。");
-           
-           stmt.close();
-       }
-
-       public static void initDb(Connection con) throws SQLException {
-               String createSt;
-               PreparedStatement ps;
-
-               // 'table.BUS_STOP'を新規に作る
-               DbBusstop.create(con);
-
-               // 'table.bus_route'を新規に作る
-               createSt = "CREATE TABLE bus_route (cvid VARCHAR(12), bsc int, boc VARCHAR(128) NOT NULL, bln VARCHAR(512));";
-               logger.info(createSt);
-               ps = con.prepareStatement(createSt);
-               try {
-                       ps.executeUpdate();
-               }
-               catch (SQLException e) {
-                       if (!(e.toString().startsWith("Table already exists:"))) {
-                               throw e;
-                       }
-               }
-               finally {
-                       ps.close();
-               }
-
-               // 'table.bus_Curve'を新規に作る
-               createSt = "CREATE TABLE bus_Curve (idref VARCHAR(12), seq INT, lat DOUBLE, lon DOUBLE, CONSTRAINT bus_curve_pk PRIMARY KEY(idref,seq));";
-               logger.info(createSt);
-               ps = con.prepareStatement(createSt);
-               try {
-                       ps.executeUpdate();
-               }
-               catch (SQLException e) {
-                       if (!(e.toString().startsWith("Table already exists:"))) {
-                               throw e;
-                       }
-               }
-               finally {
-                       ps.close();
-               }
-       }
-
-
-       /**
-        * ローカルデータベース内の情報を出力する
-        * @param con
-        * @param iCode
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static void outputDb(Connection con, String iCode) throws IOException, SQLException {
-               File dir = new File(iCode);
-               dir.mkdir();
-
-               BufferedWriter gw = null;
-               BufferedWriter hw = null;
-
-               // HTML header
-               File htmlFile = new File(iCode  +".html");
-               hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
-               hw.write("<!DOCTYPE html>");
-               hw.newLine();
-               hw.write("<html><head><meta charset=\"utf-8\" /></head>");
-               hw.newLine();
-               hw.write("<body><table border='1'>");
-               hw.newLine();
-               hw.write("<tr>");
-               hw.write("<td>boc</td>");
-               hw.write("<td>bln</td>");
-               hw.write("<td>GPX</td>");
-               hw.write("</tr>");
-               hw.newLine();
-               
-               String maeid = "";
-               String maeroute = "";
-               File gpxFile = null;
-
-               System.out.println("Database request....");
-               PreparedStatement ps7 = con.prepareStatement("SELECT bus_route.bsc, bus_route.boc, bus_route.bln, bus_Curve.idref, bus_Curve.seq, bus_Curve.lat, bus_Curve.lon FROM bus_route INNER JOIN bus_Curve ON bus_route.cvid = bus_Curve.idref ORDER BY bus_route.bsc,bus_route.boc,bus_route.bln, bus_route.cvid,bus_Curve.seq");
-               ResultSet rset7 = ps7.executeQuery();
-               while (rset7.next()) {
-                       int bsc = rset7.getInt(1);
-                       String boc = rset7.getString(2);
-                       String bln = rset7.getString(3);
-                       String cvid = rset7.getString(4);
-                       //int seq = rset7.getInt(5);
-                       Double lat = rset7.getDouble(6);
-                       Double lon = rset7.getDouble(7);
-
-                       if (!maeroute.equals(boc +" "+ bln)) {
-                               // GPX file
-                               if (!maeroute.equals("")) {
-                                       if (!maeid.equals(cvid)) {
-                                               // GPX <trkseg/>
-                                               if (!maeid.equals("")) {
-                                                       gw.write("</trkseg>");
-                                                       gw.newLine();
-                                                       maeid = "";
-                                               }
-                                       }
-                                       
-                                       // GPX file footer
-                                       gw.write("</trk>");
-                                       gw.write("</gpx>");
-                                       gw.newLine();
-                                       gw.close();
-                                       System.out.println();
-                               }
-                               maeroute = new String(boc +" "+ bln);
-
-                               System.out.print("export course("+ maeroute +") ");
-
-                               gpxFile = new File(dir, iCode + cvid +".gpx");
-                               gw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(gpxFile), "UTF-8"));
-                               gw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
-                               gw.newLine();
-                               gw.write("<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">");
-                               gw.newLine();
-
-                               // GPX <trk/>
-                               gw.write("<trk>");
-                               gw.write(" <name>"+ bsc +" "+ boc +" "+ bln +" "+ cvid +"</name>");
-                               gw.newLine();
-
-                               // INDEX file
-                               hw.write("<tr>");
-                               hw.write("<td>"+ boc +"</td>");
-                               hw.write("<td>"+ bln +"</td>");
-                               hw.write("<td><a href='"+ dir.getName() +"/"+ gpxFile.getName() +"'>"+ gpxFile.getName() +"</a></td>");
-                               hw.write("</tr>");
-                               hw.newLine();
-                       }
-                       
-                       if (!maeid.equals(cvid)) {
-                               if (!maeid.equals("")) {
-                                       // GPX file footer
-                                       gw.write("</trkseg>");
-                                       gw.newLine();
-                               }
-                               System.out.println();
-
-                               // GPX <trkseg/>
-                               gw.write("<trkseg>");
-                               gw.newLine();
-                       }
-                       maeid = new String(cvid);
-                       
-                       // GPX <trkpt/>
-                       System.out.print(".");
-                       gw.write("<trkpt lat=\""+ lat +"\" lon=\""+ lon +"\"></trkpt>");
-                       gw.newLine();
-               }
-               rset7.close();
-
-               // GPX file footer
-               gw.write("</trkseg>");
-               gw.write("</trk>");
-               gw.write("</gpx>");
-               gw.newLine();
-               gw.close();
-
-               // index file footer
-               hw.write("</table></body></html>");
-               hw.newLine();
-               hw.close();
-       }
-       
-       public static BufferedWriter createGPX(File gpxFile, String cvid) throws IOException {
-               BufferedWriter gw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(gpxFile), "UTF-8"));
-               gw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
-               gw.newLine();
-               gw.write("<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">");
-               gw.newLine();
-               return gw;              
-       }
-
-
-       /**
-        *
-        * @param con
-        * @param node
-        * @param iFileName             // ソースファイル名(拡張子を含まない)
-        * @return
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static int importNodes(Connection con, Node node, String iFileName) throws IOException, SQLException {
-               int iCounter = 0;
-
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i<nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("gml:Curve")) {
-                               importGmlCurve(con, node2);
-                       }
-                       else if (node2.getNodeName().equals("ksj:BusRoute")) {
-                               iCounter++;
-                               importBusRoute(con, node2, iFileName);
-                       }
-                       else {
-                               iCounter += importNodes(con, node2, iFileName);
-                       }
-               }
-               return iCounter;
-       }
-       
-       public static void importGmlCurve(Connection con, Node node) throws IOException, SQLException {
-               String positionStr = "";
-               String latStr = "";
-               String lonStr = "";
-               String idStr = "";
-
-               NamedNodeMap nodeMap = node.getAttributes();
-               if ( null != nodeMap ) {
-                       for ( int j=0; j<nodeMap.getLength(); j++ ) {
-                               if (nodeMap.item(j).getNodeName().equals("gml:id")) {
-                                       idStr = nodeMap.item(j).getNodeValue();
-                               }
-                       }
-               }
-
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("gml:segments")) {
-                               NodeList nodes3 = node2.getChildNodes();
-                               for (int j=0; j < nodes3.getLength(); j++) {
-                                       Node node3 = nodes3.item(j);
-                                       if (node3.getNodeName().equals("gml:LineStringSegment")) {
-                                               NodeList nodes4 = node3.getChildNodes();
-                                               for (int k=0; k < nodes4.getLength(); k++) {
-                                                       Node node4 = nodes4.item(k);
-                                                       if (node4.getNodeName().equals("gml:posList")) {
-                                                               BufferedReader bf = new BufferedReader(new StringReader(node4.getTextContent()));
-                                                               String line;
-                                                               int seq = 0;
-                                                               while ((line = bf.readLine()) != null) {
-                                                                       seq++;
-                                                                       positionStr = line.trim();
-                                                                       if (!positionStr.equals("")) {
-                                                                               String[] str4Ary = positionStr.split(" ");
-                                                                               latStr = str4Ary[0];
-                                                                               lonStr = str4Ary[1];
-                                                                               double lat = Double.parseDouble(latStr);
-                                                                               double lon = Double.parseDouble(lonStr);
-                                                                               
-                                                                               System.out.println("import course("+ idStr+","+ seq +","+ lat +","+ lon +")");
-
-                                                                               PreparedStatement ps2 = con.prepareStatement("INSERT INTO bus_Curve (idref,seq,lat,lon) VALUES (?,?,?,?)");
-                                                                               ps2.setString(1, idStr);
-                                                                               ps2.setInt(2, seq);
-                                                                               ps2.setDouble(3, lat);
-                                                                               ps2.setDouble(4, lon);
-                                                                               ps2.executeUpdate();
-                                                                               ps2.close();
-                                                                       }
-                                                               }
-                                                       }
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-
-       public static void importBusRoute(Connection con, Node node, String iFileName) throws IOException, SQLException {
-               String cvId = "";
-               int bsc = -1;
-               String boc = "";
-               String bln = "";
-               
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("ksj:brt")) {
-                               NamedNodeMap nodeMap = node2.getAttributes();
-                               if (null != nodeMap) {
-                                       for ( int j=0; j < nodeMap.getLength(); j++ ) {
-                                               if (nodeMap.item(j).getNodeName().equals("xlink:href")) {
-                                                       cvId = nodeMap.item(j).getNodeValue();
-                                                       cvId = cvId.substring(1);
-                                                       logger.info("found idref='"+ cvId +"'");
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       else if (node2.getNodeName().equals("ksj:bsc")) {
-                               String str = node2.getTextContent();
-                               bsc = Integer.parseInt(str);
-                       }
-                       else if (node2.getNodeName().equals("ksj:boc")) {
-                               boc = node2.getTextContent();
-                       }
-                       else if (node2.getNodeName().equals("ksj:bln")) {
-                               bln = node2.getTextContent();
-                       }
-               }
-
-               PreparedStatement ps2 = con.prepareStatement("INSERT INTO bus_route (cvid,bsc,boc,bln) VALUES (?,?,?,?)");
-               ps2.setString(1, cvId);
-               ps2.setInt(2, bsc);
-               ps2.setString(3, boc);
-               ps2.setString(4, bln);
-               ps2.executeUpdate();
-               ps2.close();
-       }
-
-
-       /**
-        * exp: KANAGAWA-ken [N07-11_14.xml]
-        * 
-        * @param f
-        * @return
-        */
-       static boolean checkFile(File f) {
-               String name = f.getName();
-               if (!name.toUpperCase().startsWith("N07-")) {
-                       return false;
-               }
-               if (!name.toLowerCase().endsWith(".xml")) {
-                       return false;
-               }
-               return true;
-       }
+package osm.jp;\r
+import hayashi.yuu.tools.logger.LoggerFactory;\r
+\r
+import javax.xml.parsers.*;\r
+import javax.xml.transform.TransformerException;\r
+\r
+import org.w3c.dom.*;\r
+import org.xml.sax.*;\r
+\r
+import java.io.*;\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.sql.Statement;\r
+import java.util.logging.Logger;\r
+\r
+import jp.co.areaweb.tools.database.*;\r
+\r
+public class ConvBusroute {\r
+\r
+       String filter = "";\r
+       String urlStr = "";\r
+\r
+       public static final boolean DB_INIT = false;\r
+\r
+       // 近くのバス停を探す範囲(バス停を中心としたNEER×2m四方の領域\r
+       static final int NEER = 75;\r
+       static boolean nocheck = true;\r
+       static Logger logger = LoggerFactory.getInstance();\r
+\r
+       /**\r
+        * メイン\r
+        *\r
+        *      java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusroute\r
+        *\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        * @throws ClassNotFoundException\r
+        * @throws FileNotFoundException\r
+        * @throws TransformerException\r
+        * @throws SAXException\r
+        * @throws ParserConfigurationException */\r
+       public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException, TransformerException\r
+       {\r
+               /**\r
+                * アプリケーション [ConvBusroute]\r
+                * > java -jar ConvBusstop.jar <オプション>\r
+                *      オプション: -exp 実行する直前にデータベースを初期化する(省略可能)\r
+                */\r
+               File dbdir = new File("database");\r
+               if (!dbdir.isDirectory()) {\r
+                       dbdir.mkdir();\r
+               }\r
+\r
+               Connection con = DatabaseTool.openDb("database");\r
+               ConvBusroute.initDb(con);\r
+\r
+               try {\r
+                       /**\r
+                        * バスルートデータ変換のメイン処理\r
+                        */\r
+                       int fcounter = 0;\r
+                       File dir = new File(".");\r
+                       File[] files = dir.listFiles();\r
+                       for (File iFile : files) {\r
+                               if (checkFile(iFile)) {\r
+                                       fcounter++;\r
+                                       ConvBusroute.clearDb(con);\r
+                                       inputFile(con, iFile);\r
+\r
+                                       // ローカルデータベース内の情報を出力する\r
+                                       String iStr = iFile.getName();\r
+                                       outputDb(con, iStr.substring(0, iStr.length() - 4));\r
+                               }\r
+                       }\r
+                       logger.info("["+ fcounter +"]つのファイルをインポートしました。");\r
+               }\r
+               finally {\r
+                       DatabaseTool.closeDb(con);\r
+               }\r
+       }\r
+\r
+       /**\r
+        * ソースファイルを読み取ってローカルベータベースへ記録する\r
+        * @param con\r
+        * @param iFile\r
+        * @throws FileNotFoundException\r
+        * @throws ClassNotFoundException\r
+        * @throws SQLException\r
+        * @throws IOException\r
+        * @throws ParserConfigurationException \r
+        * @throws SAXException \r
+        */\r
+       public static void inputFile (Connection con, File iFile) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {\r
+               int iCounter = 0;\r
+\r
+               String iStr = iFile.getName();\r
+               File dir = new File(iStr.substring(0, iStr.length() - 4));\r
+               dir.mkdir();\r
+\r
+               DocumentBuilderFactory factory;\r
+               DocumentBuilder        builder;\r
+               Node root;\r
+\r
+               iCounter = 0;\r
+               factory = DocumentBuilderFactory.newInstance();\r
+               builder = factory.newDocumentBuilder();\r
+               factory.setIgnoringElementContentWhitespace(true);\r
+               factory.setIgnoringComments(true);\r
+               factory.setValidating(true);\r
+               root    = builder.parse(iStr);\r
+\r
+               iCounter += importNodes(con, root, iStr.substring(0, iStr.length() - 4));\r
+               logger.info("バスルート数["+ iCounter +"]");\r
+       }\r
+\r
+       public static void clearDb(Connection con) throws SQLException {\r
+               Statement stmt = con.createStatement();\r
+               long count = stmt.executeUpdate("delete from bus_route");\r
+           logger.info("'bus_route'から "+ count +" 件のデータを削除しました。");\r
+           \r
+           count = stmt.executeUpdate("delete from bus_Curve");\r
+           logger.info("'bus_Curve'から "+ count +" 件のデータを削除しました。");\r
+           \r
+           stmt.close();\r
+       }\r
+\r
+       public static void initDb(Connection con) throws SQLException {\r
+               String createSt;\r
+               PreparedStatement ps;\r
+\r
+               // 'table.BUS_STOP'を新規に作る\r
+               DbBusstop.create(con);\r
+\r
+               // 'table.bus_route'を新規に作る\r
+               createSt = "CREATE TABLE bus_route (cvid VARCHAR(12), bsc int, boc VARCHAR(128) NOT NULL, bln VARCHAR(512));";\r
+               logger.info(createSt);\r
+               ps = con.prepareStatement(createSt);\r
+               try {\r
+                       ps.executeUpdate();\r
+               }\r
+               catch (SQLException e) {\r
+                       if (!(e.toString().startsWith("Table already exists:"))) {\r
+                               throw e;\r
+                       }\r
+               }\r
+               finally {\r
+                       ps.close();\r
+               }\r
+\r
+               // 'table.bus_Curve'を新規に作る\r
+               createSt = "CREATE TABLE bus_Curve (idref VARCHAR(12), seq INT, lat DOUBLE, lon DOUBLE, CONSTRAINT bus_curve_pk PRIMARY KEY(idref,seq));";\r
+               logger.info(createSt);\r
+               ps = con.prepareStatement(createSt);\r
+               try {\r
+                       ps.executeUpdate();\r
+               }\r
+               catch (SQLException e) {\r
+                       if (!(e.toString().startsWith("Table already exists:"))) {\r
+                               throw e;\r
+                       }\r
+               }\r
+               finally {\r
+                       ps.close();\r
+               }\r
+       }\r
+\r
+\r
+       /**\r
+        * ローカルデータベース内の情報を出力する\r
+        * @param con\r
+        * @param iCode\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static void outputDb(Connection con, String iCode) throws IOException, SQLException {\r
+               File dir = new File(iCode);\r
+               dir.mkdir();\r
+\r
+               BufferedWriter gw = null;\r
+               BufferedWriter hw = null;\r
+\r
+               // HTML header\r
+               File htmlFile = new File(iCode  +".html");\r
+               hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));\r
+               hw.write("<!DOCTYPE html>");\r
+               hw.newLine();\r
+               hw.write("<html><head><meta charset=\"utf-8\" /></head>");\r
+               hw.newLine();\r
+               hw.write("<body><table border='1'>");\r
+               hw.newLine();\r
+               hw.write("<tr>");\r
+               hw.write("<td>boc</td>");\r
+               hw.write("<td>bln</td>");\r
+               hw.write("<td>GPX</td>");\r
+               hw.write("</tr>");\r
+               hw.newLine();\r
+               \r
+               String maeid = "";\r
+               String maeroute = "";\r
+               File gpxFile = null;\r
+\r
+               System.out.println("Database request....");\r
+               PreparedStatement ps7 = con.prepareStatement("SELECT bus_route.bsc, bus_route.boc, bus_route.bln, bus_Curve.idref, bus_Curve.seq, bus_Curve.lat, bus_Curve.lon FROM bus_route INNER JOIN bus_Curve ON bus_route.cvid = bus_Curve.idref ORDER BY bus_route.bsc,bus_route.boc,bus_route.bln, bus_route.cvid,bus_Curve.seq");\r
+               ResultSet rset7 = ps7.executeQuery();\r
+               while (rset7.next()) {\r
+                       int bsc = rset7.getInt(1);\r
+                       String boc = rset7.getString(2);\r
+                       String bln = rset7.getString(3);\r
+                       String cvid = rset7.getString(4);\r
+                       //int seq = rset7.getInt(5);\r
+                       Double lat = rset7.getDouble(6);\r
+                       Double lon = rset7.getDouble(7);\r
+\r
+                       if (!maeroute.equals(boc +" "+ bln)) {\r
+                               // GPX file\r
+                               if (!maeroute.equals("")) {\r
+                                       if (!maeid.equals(cvid)) {\r
+                                               // GPX <trkseg/>\r
+                                               if (!maeid.equals("")) {\r
+                                                       gw.write("</trkseg>");\r
+                                                       gw.newLine();\r
+                                                       maeid = "";\r
+                                               }\r
+                                       }\r
+                                       \r
+                                       // GPX file footer\r
+                                       gw.write("</trk>");\r
+                                       gw.write("</gpx>");\r
+                                       gw.newLine();\r
+                                       gw.close();\r
+                                       System.out.println();\r
+                               }\r
+                               maeroute = new String(boc +" "+ bln);\r
+\r
+                               System.out.print("export course("+ maeroute +") ");\r
+\r
+                               gpxFile = new File(dir, iCode + cvid +".gpx");\r
+                               gw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(gpxFile), "UTF-8"));\r
+                               gw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");\r
+                               gw.newLine();\r
+                               gw.write("<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">");\r
+                               gw.newLine();\r
+\r
+                               // GPX <trk/>\r
+                               gw.write("<trk>");\r
+                               gw.write(" <name>"+ bsc +" "+ boc +" "+ bln +" "+ cvid +"</name>");\r
+                               gw.newLine();\r
+\r
+                               // INDEX file\r
+                               hw.write("<tr>");\r
+                               hw.write("<td>"+ boc +"</td>");\r
+                               hw.write("<td>"+ bln +"</td>");\r
+                               hw.write("<td><a href='"+ dir.getName() +"/"+ gpxFile.getName() +"'>"+ gpxFile.getName() +"</a></td>");\r
+                               hw.write("</tr>");\r
+                               hw.newLine();\r
+                       }\r
+                       \r
+                       if (!maeid.equals(cvid)) {\r
+                               if (!maeid.equals("")) {\r
+                                       // GPX file footer\r
+                                       gw.write("</trkseg>");\r
+                                       gw.newLine();\r
+                               }\r
+                               System.out.println();\r
+\r
+                               // GPX <trkseg/>\r
+                               gw.write("<trkseg>");\r
+                               gw.newLine();\r
+                       }\r
+                       maeid = new String(cvid);\r
+                       \r
+                       // GPX <trkpt/>\r
+                       System.out.print(".");\r
+                       gw.write("<trkpt lat=\""+ lat +"\" lon=\""+ lon +"\"></trkpt>");\r
+                       gw.newLine();\r
+               }\r
+               rset7.close();\r
+\r
+               // GPX file footer\r
+               gw.write("</trkseg>");\r
+               gw.write("</trk>");\r
+               gw.write("</gpx>");\r
+               gw.newLine();\r
+               gw.close();\r
+\r
+               // index file footer\r
+               hw.write("</table></body></html>");\r
+               hw.newLine();\r
+               hw.close();\r
+       }\r
+       \r
+       public static BufferedWriter createGPX(File gpxFile, String cvid) throws IOException {\r
+               BufferedWriter gw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(gpxFile), "UTF-8"));\r
+               gw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");\r
+               gw.newLine();\r
+               gw.write("<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">");\r
+               gw.newLine();\r
+               return gw;              \r
+       }\r
+\r
+\r
+       /**\r
+        *\r
+        * @param con\r
+        * @param node\r
+        * @param iFileName             // ソースファイル名(拡張子を含まない)\r
+        * @return\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static int importNodes(Connection con, Node node, String iFileName) throws IOException, SQLException {\r
+               int iCounter = 0;\r
+\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i<nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("gml:Curve")) {\r
+                               importGmlCurve(con, node2);\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:BusRoute")) {\r
+                               iCounter++;\r
+                               importBusRoute(con, node2, iFileName);\r
+                       }\r
+                       else {\r
+                               iCounter += importNodes(con, node2, iFileName);\r
+                       }\r
+               }\r
+               return iCounter;\r
+       }\r
+       \r
+       public static void importGmlCurve(Connection con, Node node) throws IOException, SQLException {\r
+               String positionStr = "";\r
+               String latStr = "";\r
+               String lonStr = "";\r
+               String idStr = "";\r
+\r
+               NamedNodeMap nodeMap = node.getAttributes();\r
+               if ( null != nodeMap ) {\r
+                       for ( int j=0; j<nodeMap.getLength(); j++ ) {\r
+                               if (nodeMap.item(j).getNodeName().equals("gml:id")) {\r
+                                       idStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                       }\r
+               }\r
+\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("gml:segments")) {\r
+                               NodeList nodes3 = node2.getChildNodes();\r
+                               for (int j=0; j < nodes3.getLength(); j++) {\r
+                                       Node node3 = nodes3.item(j);\r
+                                       if (node3.getNodeName().equals("gml:LineStringSegment")) {\r
+                                               NodeList nodes4 = node3.getChildNodes();\r
+                                               for (int k=0; k < nodes4.getLength(); k++) {\r
+                                                       Node node4 = nodes4.item(k);\r
+                                                       if (node4.getNodeName().equals("gml:posList")) {\r
+                                                               BufferedReader bf = new BufferedReader(new StringReader(node4.getTextContent()));\r
+                                                               String line;\r
+                                                               int seq = 0;\r
+                                                               while ((line = bf.readLine()) != null) {\r
+                                                                       seq++;\r
+                                                                       positionStr = line.trim();\r
+                                                                       if (!positionStr.equals("")) {\r
+                                                                               String[] str4Ary = positionStr.split(" ");\r
+                                                                               latStr = str4Ary[0];\r
+                                                                               lonStr = str4Ary[1];\r
+                                                                               double lat = Double.parseDouble(latStr);\r
+                                                                               double lon = Double.parseDouble(lonStr);\r
+                                                                               \r
+                                                                               System.out.println("import course("+ idStr+","+ seq +","+ lat +","+ lon +")");\r
+\r
+                                                                               PreparedStatement ps2 = con.prepareStatement("INSERT INTO bus_Curve (idref,seq,lat,lon) VALUES (?,?,?,?)");\r
+                                                                               ps2.setString(1, idStr);\r
+                                                                               ps2.setInt(2, seq);\r
+                                                                               ps2.setDouble(3, lat);\r
+                                                                               ps2.setDouble(4, lon);\r
+                                                                               ps2.executeUpdate();\r
+                                                                               ps2.close();\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+\r
+       public static void importBusRoute(Connection con, Node node, String iFileName) throws IOException, SQLException {\r
+               String cvId = "";\r
+               int bsc = -1;\r
+               String boc = "";\r
+               String bln = "";\r
+               \r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("ksj:brt")) {\r
+                               NamedNodeMap nodeMap = node2.getAttributes();\r
+                               if (null != nodeMap) {\r
+                                       for ( int j=0; j < nodeMap.getLength(); j++ ) {\r
+                                               if (nodeMap.item(j).getNodeName().equals("xlink:href")) {\r
+                                                       cvId = nodeMap.item(j).getNodeValue();\r
+                                                       cvId = cvId.substring(1);\r
+                                                       logger.info("found idref='"+ cvId +"'");\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:bsc")) {\r
+                               String str = node2.getTextContent();\r
+                               bsc = Integer.parseInt(str);\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:boc")) {\r
+                               boc = node2.getTextContent();\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:bln")) {\r
+                               bln = node2.getTextContent();\r
+                       }\r
+               }\r
+\r
+               PreparedStatement ps2 = con.prepareStatement("INSERT INTO bus_route (cvid,bsc,boc,bln) VALUES (?,?,?,?)");\r
+               ps2.setString(1, cvId);\r
+               ps2.setInt(2, bsc);\r
+               ps2.setString(3, boc);\r
+               ps2.setString(4, bln);\r
+               ps2.executeUpdate();\r
+               ps2.close();\r
+       }\r
+\r
+\r
+       /**\r
+        * exp: KANAGAWA-ken [N07-11_14.xml]\r
+        * \r
+        * @param f\r
+        * @return\r
+        */\r
+       static boolean checkFile(File f) {\r
+               String name = f.getName();\r
+               if (!name.toUpperCase().startsWith("N07-")) {\r
+                       return false;\r
+               }\r
+               if (!name.toLowerCase().endsWith(".xml")) {\r
+                       return false;\r
+               }\r
+               return true;\r
+       }\r
 }
\ No newline at end of file
index 4ae03d1..807012b 100644 (file)
-package osm.jp;
-import osm.jp.api.HttpGET;
-
-import javax.xml.parsers.*;
-import javax.xml.transform.TransformerException;
-
-import org.w3c.dom.*;
-import org.xml.sax.*;
-
-import java.io.*;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Date;
-
-import jp.co.areaweb.tools.database.*;
-
-public class ConvBusstop {
-
-       String filter = "";
-       String urlStr = "";
-
-       public static final boolean DB_INIT = false;
-
-       // 近くのバス停を探す範囲(バス停を中心としたNEER×2m四方の領域
-       static final int NEER = 75;
-       static boolean nocheck = true;
-
-       /**
-        * メイン
-        *
-        *      java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop <option>
-        *              OPTION: -nocheck        OSMデータ上に既存のバス停が存在するかどうかをチェックしない
-        *              OPTION: -check  OSMデータ上に既存のバス停が存在するかどうかをチェックする
-        *
-        * @throws IOException
-        * @throws SQLException
-        * @throws ClassNotFoundException
-        * @throws FileNotFoundException
-        * @throws TransformerException
-        * @throws SAXException
-        * @throws ParserConfigurationException */
-       public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException, TransformerException
-       {
-               int index = 0;
-               if (args.length > index) {
-                       if (args[index].equals("-check")) {
-                               ConvBusstop.nocheck = false;
-                               index++;
-                       }
-                       if (args[index].equals("-nocheck")) {
-                               ConvBusstop.nocheck = true;
-                               index++;
-                       }
-               }
-
-               /**
-                * アプリケーション [ConvBusstop]
-                * > java -jar ConvBusstop.jar <オプション>
-                *      オプション: -exp 実行する直前にデータベースを初期化する(省略可能)
-                */
-               File dbdir = new File("database");
-               if (!dbdir.isDirectory()) {
-                       dbdir.mkdir();
-               }
-
-               Connection con = DatabaseTool.openDb("database");
-               ConvBusstop.initDb(con);
-
-               try {
-                       /**
-                        * バス停データ変換のメイン処理
-                        */
-                       int fcounter = 0;
-                       if (args.length > index) {
-                               File iFile = new File(args[index]);
-                               fcounter++;
-
-                               inputFile(con, iFile);
-                               String iStr = iFile.getName();
-                               outputDb(con, iStr.substring(0, iStr.length() - 4));
-                       }
-                       else {
-                               File dir = new File(".");
-                               File[] files = dir.listFiles();
-                               for (File iFile : files) {
-                                       if (checkFile(iFile)) {
-                                               fcounter++;
-                                               ConvBusstop.clearDb(con);
-                                               inputFile(con, iFile);
-
-                                               // ローカルデータベース内の情報を出力する
-                                               String iStr = iFile.getName();
-                                               outputDb(con, iStr.substring(0, iStr.length() - 4));
-                                       }
-                               }
-                       }
-                       System.out.println("["+ fcounter +"]つのファイルをインポートしました。");
-                       
-                       /**
-                        * 既存のOSMバス停を読み込む
-                        *              --> 'existing.xml'
-                        */
-                       if (!ConvBusstop.nocheck) {
-                               /**
-                                * インポートしたデータの緯度経度範囲を読み取る
-                                */
-                               double maxLat = -90.0D;
-                               double minLat = 90.0D;
-                               double maxLon = -180.0D;
-                               double minLon = 180.0D;
-                               PreparedStatement ps8 = con.prepareStatement("SELECT lat,lon FROM bus_stop");
-                               ResultSet rset8 = ps8.executeQuery();
-                               while (rset8.next()) {
-                                       Double lat = rset8.getDouble("lat");
-                                       Double lon = rset8.getDouble("lon");
-
-                                       if (lat > maxLat) {
-                                               maxLat = lat;
-                                       }
-                                       if (lon > maxLon) {
-                                               maxLon = lon;
-                                       }
-                                       if (lat < minLat) {
-                                               minLat = lat;
-                                       }
-                                       if (lon < minLon) {
-                                               minLon = lon;
-                                       }
-                               }
-                               rset8.close();
-
-                               readExistingFile(con, new File("existing.xml"));
-                               
-                               PreparedStatement ps1 = con.prepareStatement("SELECT idref,lat,lon FROM bus_stop");
-                               PreparedStatement ps2 = con.prepareStatement("SELECT count(idref) FROM existing_data where (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?)");
-                               PreparedStatement ps3 = con.prepareStatement("UPDATE bus_stop SET fixed=? WHERE idref=?");
-                               ResultSet rset1 = ps1.executeQuery();
-                               while (rset1.next()) {
-                                       String idref = rset1.getString("idref");
-                                       Double lat = rset1.getDouble("lat");
-                                       Double lon = rset1.getDouble("lon");
-                                       
-                                       // 指定の緯度経度を中心とする半径75m四方の矩形領域
-                                       RectArea rect = new RectArea(lat, lon, 75);
-                                       ps2.setDouble(1, rect.minlat);
-                                       ps2.setDouble(2, rect.maxlat);
-                                       ps2.setDouble(3, rect.minlon);
-                                       ps2.setDouble(4, rect.maxlon);
-                                       ResultSet rset2 = ps2.executeQuery();
-                                       if (rset2.next()) {
-                                               int count = rset2.getInt(1);
-                                               ps3.setInt(1, count);
-                                               ps3.setString(1, idref);
-                                               ps3.executeQuery();
-                                       }
-                                       rset2.close();
-                               }
-                               rset1.close();
-                       }
-                       System.out.println("["+ fcounter +"] 変換完了しました。");
-               }
-               finally {
-                       DatabaseTool.closeDb(con);
-               }
-       }
-
-       static String[] shiftArgs(String[] args) {
-               String[] values = new String[args.length - 1];
-               for (int i=1; i < args.length; i++) {
-                       values[i - 1] = new String(args[i]);
-               }
-               return values;
-       }
-
-       public static void readExistingFile (Connection con, File existingFile) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {
-               int iCounter = 0;
-
-               DocumentBuilderFactory factory;
-               DocumentBuilder        builder;
-               Node root;
-
-               iCounter = 0;
-               factory = DocumentBuilderFactory.newInstance();
-               builder = factory.newDocumentBuilder();
-               factory.setIgnoringElementContentWhitespace(true);
-               factory.setIgnoringComments(true);
-               factory.setValidating(true);
-               root    = builder.parse(existingFile);
-
-               iCounter += readExistingNodes(con, root);
-               System.out.println("既存バス停数["+ iCounter +"]");
-       }
-       
-       static int readExistingNodes(Connection con, Node node) throws IOException, SQLException {
-               int iCounter = 0;
-               
-               NodeList nodes = node.getChildNodes();
-               for (int i = 0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("node")) {
-                               iCounter++;
-                               importExistingNode(con, node2);
-                       }
-                       else {
-                               iCounter += readExistingNodes(con, node2);
-                       }
-               }
-               return iCounter;
-       }
-
-       static void importExistingNode(Connection con, Node node) throws IOException, SQLException {
-               String idrefStr = "";
-               String latStr = "";
-               String lonStr = "";
-               PreparedStatement ps5 = con.prepareStatement("INSERT INTO existing_data (idref,lat,lon) VALUES (?,?,?)");
-
-               NamedNodeMap nodeMap = node.getAttributes();
-               if (null != nodeMap) {
-                       for (int j=0; j < nodeMap.getLength(); j++) {
-                               if (nodeMap.item(j).getNodeName().equals("id")) {
-                                       idrefStr = nodeMap.item(j).getNodeValue();
-                               }
-                               if (nodeMap.item(j).getNodeName().equals("lat")) {
-                                       latStr = nodeMap.item(j).getNodeValue();
-                               }
-                               if (nodeMap.item(j).getNodeName().equals("lon")) {
-                                       lonStr = nodeMap.item(j).getNodeValue();
-                               }
-                       }
-                       
-                       // idref と nameStr をデータベースに格納する
-                       ps5.setString(1, idrefStr);
-                       ps5.setDouble(2, Double.parseDouble(latStr));
-                       ps5.setDouble(3, Double.parseDouble(lonStr));
-                       ps5.executeUpdate();
-                       ps5.close();
-               }
-       }
-       
-       /**
-        * ソースファイルを読み取ってローカルベータベースへ記録する
-        * @param con
-        * @param iFile
-        * @throws FileNotFoundException
-        * @throws ClassNotFoundException
-        * @throws SQLException
-        * @throws IOException
-        * @throws ParserConfigurationException 
-        * @throws SAXException 
-        */
-       public static void inputFile (Connection con, File iFile) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {
-               int iCounter = 0;
-               String timeStampStr = null;
-
-               String iStr = iFile.getName();
-               File dir = new File(iStr.substring(0, iStr.length() - 4));
-               dir.mkdir();
-
-               DocumentBuilderFactory factory;
-               DocumentBuilder        builder;
-               Node root;
-
-               iCounter = 0;
-               factory = DocumentBuilderFactory.newInstance();
-               builder = factory.newDocumentBuilder();
-               factory.setIgnoringElementContentWhitespace(true);
-               factory.setIgnoringComments(true);
-               factory.setValidating(true);
-               root    = builder.parse(iStr);
-
-               iCounter += showNodes(con, root, iStr.substring(0, iStr.length() - 4), timeStampStr);
-               System.out.println("バス停数["+ iCounter +"]");
-       }
-
-       public static void clearDb(Connection con) throws SQLException {
-               Statement stmt = con.createStatement();
-               long count = stmt.executeUpdate("delete from bus_stop");
-               System.out.println("'Database.bus_stop'から "+ count +" 件のデータを削除しました。");
-           
-           count = stmt.executeUpdate("delete from existing_data");
-           System.out.println("'Database.existing_data'から "+ count +" 件のデータを削除しました。");
-
-           count = stmt.executeUpdate("delete from bus_course");
-           System.out.println("'Database.bus_course'から "+ count +" 件のデータを削除しました。");
-
-           count = stmt.executeUpdate("delete from bus_ref");
-           System.out.println("'Database.bus_ref'から "+ count +" 件のデータを削除しました。");
-           stmt.close();
-       }
-
-       public static void initDb(Connection con) throws SQLException {
-               String createSt;
-
-               // 'table.BUS_STOP'を新規に作る
-               DbBusstop.create(con);
-
-               createSt = "CREATE TABLE existing_data (idref VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, CONSTRAINT existing_pk PRIMARY KEY(idref, lat, lon));";
-               DbBusstop.create(con, createSt);
-               
-               createSt = "CREATE TABLE bus_course (code int, type int, corp VARCHAR(128) NOT NULL, course VARCHAR(512), ifile VARCHAR(128), CONSTRAINT bus_course_pk PRIMARY KEY(code));";
-               DbBusstop.create(con, createSt);
-
-               createSt = "CREATE TABLE bus_ref (idref VARCHAR(12), code INT);";
-               DbBusstop.create(con, createSt);
-       }
-
-
-       /**
-        * ローカルデータベース内の情報を出力する
-        * @param con
-        * @param iCode
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static void outputDb(Connection con, String iCode) throws IOException, SQLException {
-               SimpleDateFormat timeStampFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
-               String timeStampStr = timeStampFmt.format(new Date(Calendar.getInstance().getTimeInMillis()));
-               File dir = new File(iCode);
-               dir.mkdir();
-
-               BufferedWriter ow = null;
-               BufferedWriter gw = null;
-               BufferedWriter hw = null;
-               BufferedWriter ww = null;
-
-               // HTML header
-               File htmlFile = new File(iCode  +".html");
-               hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));
-               hw.write("<!DOCTYPE html>");
-               hw.newLine();
-               hw.write("<html><head><meta charset=\"utf-8\" /></head>");
-               hw.newLine();
-               hw.write("<body><table border='1'>");
-               hw.newLine();
-               hw.write("<tr>");
-               hw.write("<td>type</td>");
-               hw.write("<td>corp</td>");
-               hw.write("<td>course</td>");
-               hw.write("<td>GPX</td>");
-               hw.write("<td>SAMPLE</td>");
-               hw.write("<td>バス停数</td>");
-               hw.write("<td>未入力</td>");
-               hw.write("<td>既存</td>");
-               hw.write("</tr>");
-               hw.newLine();
-
-               // Wiki header
-               File wikiFile = new File(iCode  +".wiki.txt");
-               ww = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wikiFile), "UTF-8"));
-               ww.write("= バス路線毎のマッピング状況 =");
-               ww.newLine();
-               ww.newLine();
-               
-               String maeCorp = "";
-               boolean firstCorp = true;
-               
-               PreparedStatement ps7 = con.prepareStatement("SELECT code,type,corp,course,ifile FROM bus_course WHERE ifile=? ORDER BY type,corp,course");
-               PreparedStatement ps9 = con.prepareStatement("SELECT idref FROM bus_ref WHERE code=?");
-               PreparedStatement ps8 = con.prepareStatement("SELECT name,lat,lon,fixed FROM bus_stop WHERE idref=?");
-               ps7.setString(1, iCode);
-               ResultSet rset7 = ps7.executeQuery();
-               while (rset7.next()) {
-                       int code = rset7.getInt(1);
-                       int type = rset7.getInt(2);
-                       String corp = rset7.getString(3);
-                       String course = rset7.getString(4);
-                       
-
-                       File osmFile = new File(dir, iCode + String.format("_%1$08d", code) +".osm");
-                       File gpxFile = new File(dir, iCode + String.format("_%1$08d", code) +".gpx");
-                       File osmSample = new File(dir, iCode + String.format("_s%1$08d", code) +".osm");
-
-                       System.out.println("course = "+ course);
-                       int stopCount = 0;
-                       int fixedCount = 0;
-                       int unfixedCount = 0;
-
-                       // index file header
-                       hw.write("<tr>");
-                       hw.write("<td>"+ type +"</td>");
-                       hw.write("<td>"+ corp +"</td>");
-                       hw.write("<td><a href='"+ dir.getName() +"/"+ osmFile.getName() +"'>"+ course +"</a></td>");
-                       hw.write("<td><a href='"+ dir.getName() +"/"+ gpxFile.getName() +"'>"+ gpxFile.getName() +"</a></td>");
-                       hw.write("<td><a href='"+ dir.getName() +"/"+ osmSample.getName() +"'>"+ osmSample.getName() +"</a></td>");
-                       hw.newLine();
-
-                       //--------------------------------------------
-                       //      Wiki見出し2: 運行会社
-                       //------------
-                       if (!maeCorp.equals(corp)) {
-                               if (firstCorp == false) {
-                                       ww.write("|}");
-                                       ww.newLine();
-                                       ww.newLine();
-                               }
-                               firstCorp = false;
-                               
-                               ww.write("=== "+ corp +" ===");
-                               ww.newLine();
-                               ww.newLine();
-
-                               ww.write(":{{JA:Tag|network||"+ corp +"}}");
-                               ww.newLine();
-                               ww.write(":{{JA:Tag|operator||"+ corp +"}}");
-                               ww.newLine();
-                               ww.newLine();
-
-                               ww.write("{| class=\"wikitable sortable\" style=\"table-layout: fixed; width: 100%\"");
-                               ww.newLine();
-                               ww.write("!style=\"width: 100px\"| ref");
-                               ww.newLine();
-                               ww.write("!class=\"unsortable\" style=\"width: 152px\"| 編集状況(マスタ)");
-                               ww.newLine();
-                               ww.write("!class=\"unsortable\" style=\"width: 152px\"| 編集状況(往路)");
-                               ww.newLine();
-                               ww.write("!class=\"unsortable\" style=\"width: 152px\"| 編集状況(復路)");
-                               ww.newLine();
-                               ww.write("!class=\"unsortable\"| 備考");
-                               ww.newLine();
-
-                               maeCorp = new String(corp);
-                       }
-                       
-                       // Wiki
-                       ww.write("|-");
-                       ww.newLine();
-                       ww.write("| "+ course +" ");            // ref
-                       ww.write("|| {{State Route|r=0}} {{relation|0|tools=no}} ");                    // 編集状況 (マスタ)
-                       ww.write("|| {{State Route|r=0|h=0}} {{relation|0|tools=no}} ");                // 編集状況 (往路)
-                       ww.write("|| {{State Route|r=0|h=0}} {{relation|0|tools=no}} ");                // 編集状況 (復路)
-                       ww.write("|| ");                // 備考
-                       ww.newLine();
-
-
-                       // OSM file header
-                       ow = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(osmFile), "UTF-8"));
-                       ow.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
-                       ow.newLine();
-                       ow.write("<osm version=\"0.6\" generator=\"ReadKIBAN\">");
-                       ow.newLine();
-
-                       // GPX file header
-                       gw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(gpxFile), "UTF-8"));
-                       gw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
-                       gw.newLine();
-                       gw.write("<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">");
-                       gw.newLine();
-
-                       double maxLat = -180.0;
-                       double minLat = 180.0;
-                       double maxLon = -180.0;
-                       double minLon = 180.0;
-
-                       ps9.setInt(1, code);
-                       ResultSet rset9 = ps9.executeQuery();
-                       while (rset9.next()) {
-                               String idref = rset9.getString(1);
-
-                               ps8.setString(1, idref);
-                               ResultSet rset8 = ps8.executeQuery();
-                               if (rset8.next()) {
-                                       stopCount++;
-                                       String name = rset8.getString(1);
-                                       Double lat = rset8.getDouble(2);
-                                       Double lon = rset8.getDouble(3);
-                                       int fixed = rset8.getInt(4);
-
-                                       if (lat > maxLat) {
-                                               maxLat = lat;
-                                       }
-                                       if (lon > maxLon) {
-                                               maxLon = lon;
-                                       }
-                                       if (lat < minLat) {
-                                               minLat = lat;
-                                       }
-                                       if (lon < minLon) {
-                                               minLon = lon;
-                                       }
-                                       
-                                       System.out.println("\tway point = "+ idref +", lat="+ lat +", lon="+ lon +", name="+ name);
-                                       fixedCount += fixed;
-                                       if (fixed == 0) {
-                                               unfixedCount++;
-
-                                               // OSM node
-                                               int nodeid = Integer.parseInt(idref.substring(1)) * -1;
-                                               String osm_node = nodeBusstop(nodeid, name, lat, lon, timeStampStr);
-                                               ow.write(osm_node);
-                                               ow.newLine();
-
-                                               // TEXT node
-                                               //File txtFile = new File(dir, iCode + idref +".txt");
-                                               //BufferedWriter gw2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(txtFile), "UTF-8"));
-                                               //gw2.write(osm_node);
-                                               //gw2.newLine();
-                                               //gw2.close();
-
-                                               // GPX waypoint
-                                               gw.write("<wpt lat=\""+ lat +"\" lon=\""+ lon +"\">\n");
-                                               gw.write(" <time>"+ timeStampStr +"Z</time>\n");
-                                               gw.write(" <name><![CDATA["+ name +"]]></name>\n");
-                                               //gw.write(" <link href=\""+ txtFile.getName() +"\"><text>"+ idref +"</text></link>\n");
-                                               gw.write("</wpt>\n");
-                                               gw.newLine();
-                                       }
-                               }
-                               rset8.close();
-                       }
-                       rset9.close();
-
-                       // INDEX file
-                       hw.write("<td>"+ stopCount +"</td>");
-                       hw.write("<td>"+ unfixedCount +"</td>");
-                       hw.write("<td>"+ fixedCount +"</td>");
-                       hw.write("</tr>");
-                       hw.newLine();
-
-                       // OSM file header
-                       BufferedWriter ow2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(osmSample), "UTF-8"));
-                       ow2.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
-                       ow2.newLine();
-                       ow2.write("<osm version=\"0.5\" generator=\"ReadKIBAN\">");
-                       ow2.newLine();
-
-                       ow2.write(nodeBusstop(code, "SAMPLE", ((maxLat+minLat)/2), ((maxLon+minLon)/2), timeStampStr));
-                       ow2.newLine();
-                       ow2.write("</osm>");
-                       ow2.newLine();
-                       ow2.close();
-
-                       // OSM file footer
-                       ow.write("</osm>");
-                       ow.newLine();
-                       ow.close();
-
-                       // GPX file footer
-                       gw.write("</gpx>");
-                       gw.newLine();
-                       gw.close();
-               }
-               rset7.close();
-
-               // Wiki footer
-               ww.close();
-
-               // index file footer
-               hw.write("</table></body></html>");
-               hw.newLine();
-               hw.close();
-       }
-
-       public static String nodeBusstop(int code, String name, Double lat, Double lon, String timeStampStr) {
-               String osm_node = ("<node id=\""+ code +"\" timestamp=\""+ timeStampStr +"Z\" lat=\""+ lat +"\" lon=\""+ lon +"\">\n");
-               osm_node += "<tag k=\"name\" v=\""+ name +"\"/>\n";
-               osm_node += "<tag k=\"fixme\" v=\"platform/stop_positionを選択して、正しい位置に移動させてください\"/>\n";
-               osm_node += "<tag k=\"source\" v=\"KSJ2\"/>\n";
-               osm_node += "<tag k=\"source_ref\" v=\"http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-P11.html\"/>\n";
-               osm_node += "<tag k=\"created_by\" v=\"National-Land-Numerical-Information_MLIT_Japan\"/>\n";
-               osm_node += "<tag k=\"note\" v=\"National-Land Numerical Information (Bus stop) 2012, MLIT Japan\"/>\n";
-               osm_node += "<tag k=\"note:ja\" v=\"国土数値情報(バス停留所)平成24年 国土交通省\"/>\n";
-               osm_node += "<tag k=\"public_transport\" v=\"platform\"/>\n";
-               osm_node += "<tag k=\"public_transport\" v=\"stop_position\"/>\n";
-               osm_node += "<tag k=\"highway\" v=\"bus_stop\"/>\n";
-               osm_node += "<tag k=\"bus\" v=\"yes\"/>\n";
-               osm_node += "</node>\n";
-               return osm_node;
-       }
-
-       /**
-        *
-        * @param con
-        * @param node
-        * @param iFileName             // ソースファイル名(拡張子を含まない)
-        * @param timeStampStr
-        * @return
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static int showNodes(Connection con, Node node, String iFileName, String timeStampStr) throws IOException, SQLException {
-               int iCounter = 0;
-               NamedNodeMap nodeMap = node.getAttributes();
-               if ( null != nodeMap ) {
-                       for ( int j=0; j < nodeMap.getLength(); j++ ) {
-                               if (nodeMap.item(j).getNodeName().equals("timeStamp")) {
-                                       timeStampStr = nodeMap.item(j).getNodeValue();
-                               }
-                       }
-               }
-
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i<nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("jps:GM_Point")) {
-                               showGmPoint(con, node2);
-                       }
-                       else if (node2.getNodeName().equals("gml:Point")) {
-                               showGmlPoint(con, node2);
-                       }
-
-                       else if (node2.getNodeName().equals("ksj:ED01")) {
-                               iCounter++;
-                               showED01(con, node2, iFileName);
-                       }
-                       else if (node2.getNodeName().equals("ksj:BusStop")) {
-                               iCounter++;
-                               showBusStop(con, node2, iFileName);
-                       }
-
-                       else {
-                               iCounter += showNodes(con, node2, iFileName, timeStampStr);
-                       }
-               }
-               return iCounter;
-       }
-
-       /**
-        *
-        * @param con
-        * @param node
-        * @param iFileName             // ソースファイル名(拡張子を含まない)
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static void showED01(Connection con, Node node, String iFileName) throws IOException, SQLException {
-               String idrefStr = "";
-               String nameStr = "";
-               PreparedStatement ps1 = con.prepareStatement("SELECT idref FROM bus_stop WHERE idref=?");
-               PreparedStatement ps2 = con.prepareStatement("INSERT INTO bus_stop (idref,name,ifile) VALUES (?,?,?)");
-               PreparedStatement ps3 = con.prepareStatement("SELECT code FROM bus_course WHERE course=? AND corp=? AND ifile=?");
-               PreparedStatement ps4 = con.prepareStatement("INSERT INTO bus_course (code,type,corp,course,ifile) VALUES (?,?,?,?,?)");
-               PreparedStatement ps5 = con.prepareStatement("INSERT INTO bus_ref (idref,code) VALUES (?,?)");
-               PreparedStatement ps6 = con.prepareStatement("SELECT max(code) FROM bus_course WHERE ifile=?");
-
-               ArrayList<String[]> bris = new ArrayList<String[]>();
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("ksj:POS")) {
-                               NamedNodeMap nodeMap = node2.getAttributes();
-                               if (null != nodeMap) {
-                                       for ( int j=0; j < nodeMap.getLength(); j++ ) {
-                                               if (nodeMap.item(j).getNodeName().equals("idref")) {
-                                                       idrefStr = nodeMap.item(j).getNodeValue();
-                                                       System.out.println("found idref='"+ idrefStr +"'");
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       else if (node2.getNodeName().equals("ksj:BSN")) {
-                               nameStr = node2.getTextContent();
-                       }
-                       else if (node2.getNodeName().equals("ksj:BRI")) {
-                               String[] rtn = anaComm(node2);
-                               if (rtn != null) {
-                                       bris.add(rtn);
-                               }
-                       }
-               }
-
-               // idref と nameStr をデータベースに格納する
-               boolean insert = true;
-               ps1.setString(1, idrefStr);
-               ResultSet rset = ps1.executeQuery();
-               if (rset.next()) {
-                       insert = false;
-               }
-               rset.close();
-
-               if (insert) {
-                       ps2.setString(1, idrefStr);
-                       ps2.setString(2, nameStr);
-                       ps2.setString(3, iFileName);
-                       System.out.println("INSERT INTO bus_stop (idref,name,ifile) VALUES ('"+ idrefStr +"','"+ nameStr +"','"+ iFileName +"')");
-                       ps2.executeUpdate();
-               }
-
-               for (String[] rtn : bris) {
-                       int code = 0;
-                       ps3.setString(1, rtn[1]);
-                       ps3.setString(2, rtn[2]);
-                       ps3.setString(3, iFileName);
-                       rset = ps3.executeQuery();
-                       if (rset.next()) {
-                               code = rset.getInt(1);
-                       }
-                       rset.close();
-
-                       if (code == 0) {
-                               ps6.setString(1, iFileName);
-                               ResultSet rset6 = ps6.executeQuery();
-                               if (rset6.next()) {
-                                       code = rset6.getInt(1);
-                               }
-                               rset6.close();
-                               code++;
-
-                               System.out.println("code="+code);
-                               ps4.setInt(1, code);
-                               ps4.setInt(2, Integer.parseInt(rtn[0]));
-                               ps4.setString(3, rtn[2]);
-                               ps4.setString(4, rtn[1]);
-                               ps4.setString(5, iFileName);
-                               ps4.executeUpdate();
-                       }
-
-                       ps5.setString(1, idrefStr);
-                       ps5.setInt(2, code);
-                       ps5.executeUpdate();
-               }
-
-               ps1.close();
-               ps2.close();
-               ps3.close();
-               ps4.close();
-               ps5.close();
-       }
-
-       /**
-        * <ksj:BusStop gml:id="ED01_1">
-        *      <ksj:position xlink:href="#n1"/>
-        *      <ksj:busStopName>城堀</ksj:busStopName>
-        *      <ksj:busRouteInformation>
-        *              <ksj:BusRouteInformation>
-        *                      <ksj:busType>1</ksj:busType>
-        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>
-        *                      <ksj:busLineName>小01</ksj:busLineName>
-        *              </ksj:BusRouteInformation>
-        *      </ksj:busRouteInformation>
-        *      <ksj:busRouteInformation>
-        *              <ksj:BusRouteInformation>
-        *                      <ksj:busType>1</ksj:busType>
-        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>
-        *                      <ksj:busLineName>湯07</ksj:busLineName>
-        *              </ksj:BusRouteInformation>
-        *      </ksj:busRouteInformation>
-        *      <ksj:busRouteInformation>
-        *              <ksj:BusRouteInformation>
-        *                      <ksj:busType>1</ksj:busType>
-        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>
-        *                      <ksj:busLineName>湯11</ksj:busLineName>
-        *              </ksj:BusRouteInformation>
-        *      </ksj:busRouteInformation>
-        * </ksj:BusStop>
-        *
-        * @param con
-        * @param node
-        * @param iFileName             // ソースファイル名(拡張子を含まない)
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static void showBusStop(Connection con, Node node, String iFileName) throws IOException, SQLException {
-               String idrefStr = "";
-               String nameStr = "";
-               PreparedStatement ps2 = con.prepareStatement("UPDATE bus_stop SET name=?,ifile=? WHERE idref=?");
-               PreparedStatement ps3 = con.prepareStatement("SELECT code FROM bus_course WHERE course=? AND corp=? AND ifile=?");
-               PreparedStatement ps4 = con.prepareStatement("INSERT INTO bus_course (code,type,corp,course,ifile) VALUES (?,?,?,?,?)");
-               PreparedStatement ps5 = con.prepareStatement("INSERT INTO bus_ref (idref,code) VALUES (?,?)");
-               PreparedStatement ps6 = con.prepareStatement("SELECT max(code) FROM bus_course WHERE ifile=?");
-
-               ArrayList<String[]> bris = new ArrayList<String[]>();
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("ksj:position")) {
-                               NamedNodeMap nodeMap = node2.getAttributes();
-                               if (null != nodeMap) {
-                                       for ( int j=0; j < nodeMap.getLength(); j++ ) {
-                                               if (nodeMap.item(j).getNodeName().equals("xlink:href")) {
-                                                       idrefStr = nodeMap.item(j).getNodeValue();
-                                                       idrefStr = idrefStr.substring(1);
-                                                       System.out.println("found idref='"+ idrefStr +"'");
-                                                       break;
-                                               }
-                                       }
-                               }
-                       }
-                       else if (node2.getNodeName().equals("ksj:busStopName")) {
-                               nameStr = node2.getTextContent();
-                       }
-                       else if (node2.getNodeName().equals("ksj:busRouteInformation")) {
-                               String[] rtn = anaCommJGD(node2);
-                               if (rtn != null) {
-                                       bris.add(rtn);
-                               }
-                       }
-               }
-
-               // idref と nameStr をデータベースに格納する
-               ps2.setString(1, nameStr);
-               ps2.setString(2, iFileName);
-               ps2.setString(3, idrefStr);
-               ps2.executeUpdate();
-
-               for (String[] rtn : bris) {
-                       int code = 0;
-                       ps3.setString(1, rtn[1]);
-                       ps3.setString(2, rtn[2]);
-                       ps3.setString(3, iFileName);
-                       ResultSet rset = ps3.executeQuery();
-                       if (rset.next()) {
-                               code = rset.getInt(1);
-                       }
-                       rset.close();
-
-                       if (code == 0) {
-                               ps6.setString(1, iFileName);
-                               ResultSet rset6 = ps6.executeQuery();
-                               if (rset6.next()) {
-                                       code = rset6.getInt(1);
-                               }
-                               rset6.close();
-                               code++;
-
-                               System.out.println("course="+ code +" : "+ rtn[0] +" : "+ rtn[1] +" : "+ rtn[2] );
-                               ps4.setInt(1, code);
-                               ps4.setInt(2, Integer.parseInt(rtn[0]));
-                               ps4.setString(3, rtn[2]);
-                               ps4.setString(4, rtn[1]);
-                               ps4.setString(5, iFileName);
-                               ps4.executeUpdate();
-                       }
-
-                       ps5.setString(1, idrefStr);
-                       ps5.setInt(2, code);
-                       ps5.executeUpdate();
-               }
-
-               ps2.close();
-               ps3.close();
-               ps4.close();
-               ps5.close();
-       }
-
-       public static String[] anaComm(Node briNode) {
-               String[] rtn = new String[3];
-               rtn[0] = "";    // corp type
-               rtn[1] = "";    // course name
-               rtn[2] = "";    // corp name
-
-               NodeList nodes = briNode.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("ksj:BSC")) {
-                               rtn[0] = node2.getTextContent();
-                       }
-                       else if (node2.getNodeName().equals("ksj:BLN")) {
-                               rtn[1] = node2.getTextContent();
-                       }
-                       else if (node2.getNodeName().equals("ksj:BOC")) {
-                               rtn[2] = node2.getTextContent();
-                       }
-               }
-               return rtn;
-       }
-
-       /**
-        *
-        *      <ksj:busRouteInformation>
-        *              <ksj:BusRouteInformation>
-        *                      <ksj:busType>1</ksj:busType>
-        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>
-        *                      <ksj:busLineName>小01</ksj:busLineName>
-        *              </ksj:BusRouteInformation>
-        *      </ksj:busRouteInformation>
-        *
-        * @param briNode
-        * @return
-        */
-       public static String[] anaCommJGD(Node briNode) {
-               String[] rtn = new String[3];
-               int vcnt = 0;
-
-               NodeList nodes2 = briNode.getChildNodes();
-               for (int i=0; i < nodes2.getLength(); i++) {
-                       Node node2 = nodes2.item(i);
-                       if (node2.getNodeName().equals("ksj:BusRouteInformation")) {
-                               NodeList nodes3 = node2.getChildNodes();
-                               for (int j=0; j < nodes3.getLength(); j++) {
-                                       Node node3 = nodes3.item(j);
-                                       if (node3.getNodeName().equals("ksj:busType")) {
-                                               rtn[0] = new String(node3.getTextContent());
-                                               vcnt++;
-                                       }
-                                       else if (node3.getNodeName().equals("ksj:busLineName")) {
-                                               rtn[1] = new String(node3.getTextContent());
-                                               vcnt++;
-                                       }
-                                       else if (node3.getNodeName().equals("ksj:busOperationCompany")) {
-                                               rtn[2] = new String(node3.getTextContent());
-                                               vcnt++;
-                                       }
-                               }
-                       }
-               }
-
-               if (vcnt > 0) {
-                       return rtn;
-               }
-               return null;
-       }
-
-       public static void showGmPoint(Connection con, Node node) throws IOException, SQLException {
-               String positionStr = "";
-               String latStr = "";
-               String lonStr = "";
-               String idStr = "";
-
-               NamedNodeMap nodeMap = node.getAttributes();
-               if ( null != nodeMap ) {
-                       for ( int j=0; j<nodeMap.getLength(); j++ ) {
-                               if (nodeMap.item(j).getNodeName().equals("id")) {
-                                       idStr = nodeMap.item(j).getNodeValue();
-                               }
-                       }
-               }
-
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("jps:GM_Point.position")) {
-                               NodeList nodes3 = node2.getChildNodes();
-                               for (int j=0; j < nodes3.getLength(); j++) {
-                                       Node node3 = nodes3.item(j);
-                                       if (node3.getNodeName().equals("jps:DirectPosition")) {
-                                               NodeList nodes4 = node3.getChildNodes();
-                                               for (int k=0; k < nodes4.getLength(); k++) {
-                                                       Node node4 = nodes4.item(k);
-                                                       if (node4.getNodeName().equals("DirectPosition.coordinate")) {
-                                                               positionStr = node4.getTextContent();
-                                                               String[] str4Ary = positionStr.split(" ");
-                                                               latStr = str4Ary[0];
-                                                               lonStr = str4Ary[1];
-                                                               break;
-                                                       }
-                                               }
-                                               break;
-                                       }
-                               }
-
-                               PreparedStatement ps6 = con.prepareStatement("UPDATE bus_stop SET lat=?,lon=?,fixed=? WHERE idref=?");
-                               double lat = Double.parseDouble(latStr);
-                               double lon = Double.parseDouble(lonStr);
-                               ps6.setDouble(1, lat);
-                               ps6.setDouble(2, lon);
-                               // ps6.setInt(3, (ConvBusstop.nocheck ? 0 : HttpGET.getMap(lat, lon, NEER)));
-                               ps6.setInt(3, 0);
-                               ps6.setString(4, idStr);
-                               System.out.println("UPDATE bus_stop("+ idStr +") lat="+ lat +", lon="+ lon +", fixed="+ (ConvBusstop.nocheck ? 0 : HttpGET.getMap(lat, lon, NEER)));
-                               ps6.executeUpdate();
-                               ps6.close();
-                       }
-               }
-       }
-
-       /**
-        * <gml:Point gml:id="n1">
-        *      <gml:pos>35.14591397 139.10569573</gml:pos>
-        * </gml:Point>
-        *
-        * @param con
-        * @param node
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static void showGmlPoint(Connection con, Node node) throws IOException, SQLException {
-               String positionStr = "";
-               String latStr = "";
-               String lonStr = "";
-               String idStr = "";
-
-               NamedNodeMap nodeMap = node.getAttributes();
-               if ( null != nodeMap ) {
-                       for ( int j=0; j<nodeMap.getLength(); j++ ) {
-                               if (nodeMap.item(j).getNodeName().equals("gml:id")) {
-                                       idStr = nodeMap.item(j).getNodeValue();
-                               }
-                       }
-               }
-
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (node2.getNodeName().equals("gml:pos")) {
-                               positionStr = node2.getTextContent().trim();
-                               String[] str4Ary = positionStr.split(" ");
-                               latStr = str4Ary[0];
-                               lonStr = str4Ary[1];
-                               
-                               PreparedStatement ps6 = con.prepareStatement("INSERT INTO bus_stop (lat,lon,fixed,idref) VALUES (?,?,?,?)");
-                               double lat = Double.parseDouble(latStr);
-                               double lon = Double.parseDouble(lonStr);
-                               System.out.println("INSERT INTO bus_stop (lat,lon,fixed,idref) VALUES ('"+ latStr +"','"+ lonStr +"','"+ (ConvBusstop.nocheck ? 0 : HttpGET.getMap(lat, lon, NEER)) +"','"+ idStr +"')");
-
-                               ps6.setDouble(1, lat);
-                               ps6.setDouble(2, lon);
-                               //ps6.setInt(3, (ConvBusstop.nocheck ? 0 : HttpGET.getMap(lat, lon, NEER)));
-                               ps6.setInt(3, 0);
-                               ps6.setString(4, idStr);
-                               ps6.executeUpdate();
-                               ps6.close();
-                       }
-               }
-       }
-
-       static boolean checkFile(File f) {
-               String name = f.getName();
-               if (!name.startsWith("P11-")) {
-                       return false;
-               }
-               if (!name.toUpperCase().endsWith(".XML")) {
-                       return false;
-               }
-               return true;
-       }
+package osm.jp;\r
+import osm.jp.api.HttpPOST;\r
+\r
+import javax.xml.parsers.*;\r
+import javax.xml.transform.TransformerException;\r
+\r
+import org.w3c.dom.*;\r
+import org.xml.sax.*;\r
+\r
+import java.io.*;\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import java.sql.Statement;\r
+import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+\r
+import jp.co.areaweb.tools.database.*;\r
+\r
+public class ConvBusstop {\r
+\r
+       String filter = "";\r
+       String urlStr = "";\r
+\r
+       public static final boolean DB_INIT = false;\r
+\r
+       // 近くのバス停を探す範囲(バス停を中心としたNEER×2m四方の領域\r
+       static final int NEER = 150;\r
+       static boolean nocheck = false;\r
+\r
+       /**\r
+        * メイン\r
+        *\r
+        *      java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop <option>\r
+        *              OPTION: -nocheck        OSMデータ上に既存のバス停が存在するかどうかをチェックしない\r
+        *              OPTION: -check  OSMデータ上に既存のバス停が存在するかどうかをチェックする\r
+        *\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        * @throws ClassNotFoundException\r
+        * @throws FileNotFoundException\r
+        * @throws TransformerException\r
+        * @throws SAXException\r
+        * @throws ParserConfigurationException */\r
+       public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException, TransformerException\r
+       {\r
+               int index = 0;\r
+               if (args.length > index) {\r
+                       if (args[index].equals("-check")) {\r
+                               ConvBusstop.nocheck = false;\r
+                               index++;\r
+                       }\r
+                       else if (args[index].equals("-nocheck")) {\r
+                               ConvBusstop.nocheck = true;\r
+                               index++;\r
+                       }\r
+               }\r
+\r
+               /**\r
+                * アプリケーション [ConvBusstop]\r
+                * > java -jar ConvBusstop.jar <オプション>\r
+                *      オプション: -exp 実行する直前にデータベースを初期化する(省略可能)\r
+                */\r
+               File dbdir = new File("database");\r
+               if (!dbdir.isDirectory()) {\r
+                       dbdir.mkdir();\r
+               }\r
+\r
+               Connection con = DatabaseTool.openDb("database");\r
+               ConvBusstop.initDb(con);\r
+\r
+               try {\r
+                       /**\r
+                        * バス停データ変換のメイン処理\r
+                        */\r
+                       int fcounter = 0;\r
+                       if (args.length > index) {\r
+                               File iFile = new File(args[index]);\r
+                               fcounter++;\r
+                               inputFile(con, iFile);\r
+                       }\r
+                       else {\r
+                               File dir = new File(".");\r
+                               File[] files = dir.listFiles();\r
+                               for (File iFile : files) {\r
+                                       if (checkFile(iFile)) {\r
+                                               fcounter++;\r
+                                               ConvBusstop.clearDb(con);\r
+                                               inputFile(con, iFile);\r
+                                       }\r
+                               }\r
+                       }\r
+                       System.out.println("["+ fcounter +"]つのファイルをインポートしました。");\r
+                       \r
+                       /**\r
+                        * 既存のOSMバス停を読み込む\r
+                        *              --> 'existing.xml'\r
+                        */\r
+                       if (!ConvBusstop.nocheck && (fcounter > 0)) {\r
+                               /*\r
+                                * 既存のOSMデータファイルがなければ、新たにダウンロードする。\r
+                                * OSMデータファイルがあるときは、ダウンロードしないでそれを使う。\r
+                                */\r
+                               File existingFile = new File("existing.xml");\r
+                               if (!existingFile.isFile()) {\r
+                                       /**\r
+                                        * インポートしたデータの緯度経度範囲を読み取る\r
+                                        */\r
+                                       double maxLat = -90.0D;\r
+                                       double minLat = 90.0D;\r
+                                       double maxLon = -180.0D;\r
+                                       double minLon = 180.0D;\r
+                                       PreparedStatement ps8 = con.prepareStatement("SELECT lat,lon FROM bus_stop");\r
+                                       ResultSet rset8 = ps8.executeQuery();\r
+                                       while (rset8.next()) {\r
+                                               Double lat = rset8.getDouble("lat");\r
+                                               Double lon = rset8.getDouble("lon");\r
+\r
+                                               if (lat > maxLat) {\r
+                                                       maxLat = lat;\r
+                                               }\r
+                                               if (lon > maxLon) {\r
+                                                       maxLon = lon;\r
+                                               }\r
+                                               if (lat < minLat) {\r
+                                                       minLat = lat;\r
+                                               }\r
+                                               if (lon < minLon) {\r
+                                                       minLon = lon;\r
+                                               }\r
+                                       }\r
+                                       rset8.close();\r
+                                       \r
+                                       /**\r
+                                        * OSM OverPassAPI を使って、既存のOSMバス停のデータを取得して、「existing.xml」に出力する\r
+                                        */\r
+                                       HttpPOST.getCapabilities(minLat, maxLat, minLon, maxLon);\r
+                               }\r
+                               readExistingFile(con, existingFile);\r
+                               \r
+                               PreparedStatement ps1 = con.prepareStatement("SELECT idref,name,lat,lon FROM bus_stop");\r
+                               PreparedStatement ps2 = con.prepareStatement("SELECT count(idref) FROM existing_data where (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?)");\r
+                               PreparedStatement ps3 = con.prepareStatement("UPDATE bus_stop SET fixed=? WHERE idref=?");\r
+                               ResultSet rset1 = ps1.executeQuery();\r
+                               while (rset1.next()) {\r
+                                       String idref = rset1.getString("idref");\r
+                                       String name = rset1.getString("name");\r
+                                       Double lat = rset1.getDouble("lat");\r
+                                       Double lon = rset1.getDouble("lon");\r
+                                       \r
+                                       // 指定の緯度経度を中心とする半径75m四方の矩形領域\r
+                                       System.out.print(idref + "("+ name + ") ....");\r
+                                       RectArea rect = new RectArea(lat, lon, NEER);           // 100m 四方\r
+                                       ps2.setDouble(1, rect.minlat);\r
+                                       ps2.setDouble(2, rect.maxlat);\r
+                                       ps2.setDouble(3, rect.minlon);\r
+                                       ps2.setDouble(4, rect.maxlon);\r
+                                       ResultSet rset2 = ps2.executeQuery();\r
+                                       if (rset2.next()) {\r
+                                               int count = rset2.getInt(1);\r
+                                               System.out.println("...."+ count);\r
+                                               ps3.setInt(1, count);\r
+                                               ps3.setString(2, idref);\r
+                                               ps3.executeUpdate();\r
+                                       }\r
+                                       rset2.close();\r
+                               }\r
+                               rset1.close();\r
+                               ps3.close();\r
+                               ps2.close();\r
+                               ps1.close();\r
+                       }\r
+                       \r
+                       // ローカルデータベース内の情報を出力する\r
+                       if (args.length > index) {\r
+                               File iFile = new File(args[index]);\r
+                               String iStr = iFile.getName();\r
+                               outputDb(con, iStr.substring(0, iStr.length() - 4));\r
+                       }\r
+                       else {\r
+                               File dir = new File(".");\r
+                               File[] files = dir.listFiles();\r
+                               for (File iFile : files) {\r
+                                       if (checkFile(iFile)) {\r
+                                               String iStr = iFile.getName();\r
+                                               outputDb(con, iStr.substring(0, iStr.length() - 4));\r
+                                       }\r
+                               }\r
+                       }\r
+                       \r
+                       // ローカルデータベース内の情報を「busstop.xml」に出力する\r
+                       int counter = outputDb(con);\r
+\r
+                       System.out.println("["+ counter +"] 変換完了しました。");\r
+               }\r
+               finally {\r
+                       DatabaseTool.closeDb(con);\r
+               }\r
+       }\r
+\r
+       static String[] shiftArgs(String[] args) {\r
+               String[] values = new String[args.length - 1];\r
+               for (int i=1; i < args.length; i++) {\r
+                       values[i - 1] = new String(args[i]);\r
+               }\r
+               return values;\r
+       }\r
+\r
+       public static void readExistingFile (Connection con, File existingFile) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {\r
+               int iCounter = 0;\r
+\r
+               DocumentBuilderFactory factory;\r
+               DocumentBuilder        builder;\r
+               Node root;\r
+\r
+               iCounter = 0;\r
+               factory = DocumentBuilderFactory.newInstance();\r
+               builder = factory.newDocumentBuilder();\r
+               factory.setIgnoringElementContentWhitespace(true);\r
+               factory.setIgnoringComments(true);\r
+               factory.setValidating(true);\r
+               root    = builder.parse(existingFile);\r
+\r
+               iCounter += readExistingNodes(con, root);\r
+               System.out.println("既存バス停数["+ iCounter +"]");\r
+       }\r
+       \r
+       static int readExistingNodes(Connection con, Node node) throws IOException, SQLException {\r
+               int iCounter = 0;\r
+               \r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i = 0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("node")) {\r
+                               iCounter++;\r
+                               importExistingNode(con, node2);\r
+                       }\r
+                       else {\r
+                               iCounter += readExistingNodes(con, node2);\r
+                       }\r
+               }\r
+               return iCounter;\r
+       }\r
+\r
+       static void importExistingNode(Connection con, Node node) throws IOException, SQLException {\r
+               String idrefStr = "";\r
+               String latStr = "";\r
+               String lonStr = "";\r
+               PreparedStatement ps5 = con.prepareStatement("INSERT INTO existing_data (idref,lat,lon) VALUES (?,?,?)");\r
+\r
+               NamedNodeMap nodeMap = node.getAttributes();\r
+               if (null != nodeMap) {\r
+                       for (int j=0; j < nodeMap.getLength(); j++) {\r
+                               if (nodeMap.item(j).getNodeName().equals("id")) {\r
+                                       idrefStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                               else if (nodeMap.item(j).getNodeName().equals("lat")) {\r
+                                       latStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                               else if (nodeMap.item(j).getNodeName().equals("lon")) {\r
+                                       lonStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                       }\r
+                       \r
+                       // idref と nameStr をデータベースに格納する\r
+                       System.out.println("import existing_data : "+ idrefStr +" ("+ latStr +","+ lonStr+")");\r
+                       ps5.setString(1, idrefStr);\r
+                       ps5.setDouble(2, Double.parseDouble(latStr));\r
+                       ps5.setDouble(3, Double.parseDouble(lonStr));\r
+                       ps5.executeUpdate();\r
+                       ps5.close();\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * ソースファイルを読み取ってローカルベータベースへ記録する\r
+        * @param con\r
+        * @param iFile\r
+        * @throws FileNotFoundException\r
+        * @throws ClassNotFoundException\r
+        * @throws SQLException\r
+        * @throws IOException\r
+        * @throws ParserConfigurationException \r
+        * @throws SAXException \r
+        */\r
+       public static void inputFile (Connection con, File iFile) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {\r
+               int iCounter = 0;\r
+               String timeStampStr = null;\r
+\r
+               String iStr = iFile.getName();\r
+               File dir = new File(iStr.substring(0, iStr.length() - 4));\r
+               dir.mkdir();\r
+\r
+               DocumentBuilderFactory factory;\r
+               DocumentBuilder        builder;\r
+               Node root;\r
+\r
+               iCounter = 0;\r
+               factory = DocumentBuilderFactory.newInstance();\r
+               builder = factory.newDocumentBuilder();\r
+               factory.setIgnoringElementContentWhitespace(true);\r
+               factory.setIgnoringComments(true);\r
+               factory.setValidating(true);\r
+               root    = builder.parse(iStr);\r
+\r
+               iCounter += showNodes(con, root, iStr.substring(0, iStr.length() - 4), timeStampStr);\r
+               System.out.println("バス停数["+ iCounter +"]");\r
+       }\r
+\r
+       public static void clearDb(Connection con) throws SQLException {\r
+               Statement stmt = con.createStatement();\r
+               long count = stmt.executeUpdate("delete from bus_stop");\r
+               System.out.println("'Database.bus_stop'から "+ count +" 件のデータを削除しました。");\r
+           \r
+           count = stmt.executeUpdate("delete from existing_data");\r
+           System.out.println("'Database.existing_data'から "+ count +" 件のデータを削除しました。");\r
+\r
+           count = stmt.executeUpdate("delete from bus_course");\r
+           System.out.println("'Database.bus_course'から "+ count +" 件のデータを削除しました。");\r
+\r
+           count = stmt.executeUpdate("delete from bus_ref");\r
+           System.out.println("'Database.bus_ref'から "+ count +" 件のデータを削除しました。");\r
+           stmt.close();\r
+       }\r
+\r
+       public static void initDb(Connection con) throws SQLException {\r
+               String createSt;\r
+\r
+               // 'table.BUS_STOP'を新規に作る\r
+               DbBusstop.create(con);\r
+\r
+               createSt = "CREATE TABLE existing_data (idref VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, CONSTRAINT existing_pk PRIMARY KEY(idref, lat, lon));";\r
+               DbBusstop.create(con, createSt);\r
+               \r
+               createSt = "CREATE TABLE bus_course (code int, type int, corp VARCHAR(128) NOT NULL, course VARCHAR(512), ifile VARCHAR(128), CONSTRAINT bus_course_pk PRIMARY KEY(code));";\r
+               DbBusstop.create(con, createSt);\r
+\r
+               createSt = "CREATE TABLE bus_ref (idref VARCHAR(12), code INT);";\r
+               DbBusstop.create(con, createSt);\r
+       }\r
+\r
+\r
+       /**\r
+        * ローカルデータベース内の情報を出力する\r
+        * @param con\r
+        * @param iCode\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static void outputDb(Connection con, String iCode) throws IOException, SQLException {\r
+               SimpleDateFormat timeStampFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");\r
+               String timeStampStr = timeStampFmt.format(new Date(Calendar.getInstance().getTimeInMillis()));\r
+               File dir = new File(iCode);\r
+               dir.mkdir();\r
+\r
+               BufferedWriter ow = null;\r
+               BufferedWriter gw = null;\r
+               BufferedWriter hw = null;\r
+               BufferedWriter ww = null;\r
+\r
+               // HTML header\r
+               File htmlFile = new File(iCode  +".html");\r
+               hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlFile), "UTF-8"));\r
+               hw.write("<!DOCTYPE html>");\r
+               hw.newLine();\r
+               hw.write("<html><head><meta charset=\"utf-8\" /></head>");\r
+               hw.newLine();\r
+               hw.write("<body><table border='1'>");\r
+               hw.newLine();\r
+               hw.write("<tr>");\r
+               hw.write("<td>type</td>");\r
+               hw.write("<td>corp</td>");\r
+               hw.write("<td>course</td>");\r
+               hw.write("<td>GPX</td>");\r
+               hw.write("<td>SAMPLE</td>");\r
+               hw.write("<td>バス停数</td>");\r
+               hw.write("<td>未入力</td>");\r
+               hw.write("<td>既存</td>");\r
+               hw.write("</tr>");\r
+               hw.newLine();\r
+\r
+               // Wiki header\r
+               File wikiFile = new File(iCode  +".wiki.txt");\r
+               ww = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wikiFile), "UTF-8"));\r
+               ww.write("= バス路線毎のマッピング状況 =");\r
+               ww.newLine();\r
+               ww.newLine();\r
+               \r
+               String maeCorp = "";\r
+               boolean firstCorp = true;\r
+               \r
+               PreparedStatement ps7 = con.prepareStatement("SELECT code,type,corp,course,ifile FROM bus_course WHERE ifile=? ORDER BY type,corp,course");\r
+               PreparedStatement ps9 = con.prepareStatement("SELECT idref FROM bus_ref WHERE code=?");\r
+               PreparedStatement ps8 = con.prepareStatement("SELECT name,lat,lon,fixed FROM bus_stop WHERE idref=?");\r
+               ps7.setString(1, iCode);\r
+               ResultSet rset7 = ps7.executeQuery();\r
+               while (rset7.next()) {\r
+                       int code = rset7.getInt(1);\r
+                       int type = rset7.getInt(2);\r
+                       String corp = rset7.getString(3);\r
+                       String course = rset7.getString(4);\r
+                       \r
+\r
+                       File osmFile = new File(dir, iCode + String.format("_%1$08d", code) +".osm");\r
+                       File gpxFile = new File(dir, iCode + String.format("_%1$08d", code) +".gpx");\r
+                       File osmSample = new File(dir, iCode + String.format("_s%1$08d", code) +".osm");\r
+\r
+                       System.out.println("course = "+ course);\r
+                       int stopCount = 0;\r
+                       int fixedCount = 0;\r
+                       int unfixedCount = 0;\r
+\r
+                       // index file header\r
+                       hw.write("<tr>");\r
+                       hw.write("<td>"+ type +"</td>");\r
+                       hw.write("<td>"+ corp +"</td>");\r
+                       hw.write("<td><a href='"+ dir.getName() +"/"+ osmFile.getName() +"'>"+ course +"</a></td>");\r
+                       hw.write("<td><a href='"+ dir.getName() +"/"+ gpxFile.getName() +"'>"+ gpxFile.getName() +"</a></td>");\r
+                       hw.write("<td><a href='"+ dir.getName() +"/"+ osmSample.getName() +"'>"+ osmSample.getName() +"</a></td>");\r
+                       hw.newLine();\r
+\r
+                       //--------------------------------------------\r
+                       //      Wiki見出し2: 運行会社\r
+                       //------------\r
+                       if (!maeCorp.equals(corp)) {\r
+                               if (firstCorp == false) {\r
+                                       ww.write("|}");\r
+                                       ww.newLine();\r
+                                       ww.newLine();\r
+                               }\r
+                               firstCorp = false;\r
+                               \r
+                               ww.write("=== "+ corp +" ===");\r
+                               ww.newLine();\r
+                               ww.newLine();\r
+\r
+                               ww.write(":{{JA:Tag|network||"+ corp +"}}");\r
+                               ww.newLine();\r
+                               ww.write(":{{JA:Tag|operator||"+ corp +"}}");\r
+                               ww.newLine();\r
+                               ww.newLine();\r
+\r
+                               ww.write("{| class=\"wikitable sortable\" style=\"table-layout: fixed; width: 100%\"");\r
+                               ww.newLine();\r
+                               ww.write("!style=\"width: 100px\"| ref");\r
+                               ww.newLine();\r
+                               ww.write("!class=\"unsortable\" style=\"width: 152px\"| 編集状況(マスタ)");\r
+                               ww.newLine();\r
+                               ww.write("!class=\"unsortable\" style=\"width: 152px\"| 編集状況(往路)");\r
+                               ww.newLine();\r
+                               ww.write("!class=\"unsortable\" style=\"width: 152px\"| 編集状況(復路)");\r
+                               ww.newLine();\r
+                               ww.write("!class=\"unsortable\"| 備考");\r
+                               ww.newLine();\r
+\r
+                               maeCorp = new String(corp);\r
+                       }\r
+                       \r
+                       // Wiki\r
+                       ww.write("|-");\r
+                       ww.newLine();\r
+                       ww.write("| "+ course +" ");            // ref\r
+                       ww.write("|| {{State Route|r=0}} {{relation|0|tools=no}} ");                    // 編集状況 (マスタ)\r
+                       ww.write("|| {{State Route|r=0|h=0}} {{relation|0|tools=no}} ");                // 編集状況 (往路)\r
+                       ww.write("|| {{State Route|r=0|h=0}} {{relation|0|tools=no}} ");                // 編集状況 (復路)\r
+                       ww.write("|| ");                // 備考\r
+                       ww.newLine();\r
+\r
+\r
+                       // OSM file header\r
+                       ow = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(osmFile), "UTF-8"));\r
+                       ow.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");\r
+                       ow.newLine();\r
+                       ow.write("<osm version=\"0.6\" generator=\"ConvBusstop\">");\r
+                       ow.newLine();\r
+\r
+                       // GPX file header\r
+                       gw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(gpxFile), "UTF-8"));\r
+                       gw.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");\r
+                       gw.newLine();\r
+                       gw.write("<gpx xmlns=\"http://www.topografix.com/GPX/1/1\" version=\"1.1\" creator=\"osmtracker-android\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd \">");\r
+                       gw.newLine();\r
+\r
+                       double maxLat = -180.0;\r
+                       double minLat = 180.0;\r
+                       double maxLon = -180.0;\r
+                       double minLon = 180.0;\r
+\r
+                       ps9.setInt(1, code);\r
+                       ResultSet rset9 = ps9.executeQuery();\r
+                       while (rset9.next()) {\r
+                               String idref = rset9.getString(1);\r
+\r
+                               ps8.setString(1, idref);\r
+                               ResultSet rset8 = ps8.executeQuery();\r
+                               if (rset8.next()) {\r
+                                       stopCount++;\r
+                                       String name = rset8.getString(1);\r
+                                       Double lat = rset8.getDouble(2);\r
+                                       Double lon = rset8.getDouble(3);\r
+                                       int fixed = rset8.getInt(4);\r
+\r
+                                       if (lat > maxLat) {\r
+                                               maxLat = lat;\r
+                                       }\r
+                                       if (lon > maxLon) {\r
+                                               maxLon = lon;\r
+                                       }\r
+                                       if (lat < minLat) {\r
+                                               minLat = lat;\r
+                                       }\r
+                                       if (lon < minLon) {\r
+                                               minLon = lon;\r
+                                       }\r
+                                       \r
+                                       System.out.println("\tway point = "+ idref +", lat="+ lat +", lon="+ lon +", name="+ name);\r
+                                       fixedCount += fixed;\r
+                                       if (fixed == 0) {\r
+                                               unfixedCount++;\r
+\r
+                                               // OSM node\r
+                                               int nodeid = Integer.parseInt(idref.substring(1)) * -1;\r
+                                               String osm_node = nodeBusstop(nodeid, name, lat, lon, timeStampStr);\r
+                                               ow.write(osm_node);\r
+                                               ow.newLine();\r
+\r
+                                               // TEXT node\r
+                                               //File txtFile = new File(dir, iCode + idref +".txt");\r
+                                               //BufferedWriter gw2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(txtFile), "UTF-8"));\r
+                                               //gw2.write(osm_node);\r
+                                               //gw2.newLine();\r
+                                               //gw2.close();\r
+\r
+                                               // GPX waypoint\r
+                                               gw.write("<wpt lat=\""+ lat +"\" lon=\""+ lon +"\">\n");\r
+                                               gw.write(" <time>"+ timeStampStr +"Z</time>\n");\r
+                                               gw.write(" <name><![CDATA["+ name +"]]></name>\n");\r
+                                               //gw.write(" <link href=\""+ txtFile.getName() +"\"><text>"+ idref +"</text></link>\n");\r
+                                               gw.write("</wpt>\n");\r
+                                               gw.newLine();\r
+                                       }\r
+                               }\r
+                               rset8.close();\r
+                       }\r
+                       rset9.close();\r
+\r
+                       // INDEX file\r
+                       hw.write("<td>"+ stopCount +"</td>");\r
+                       hw.write("<td>"+ unfixedCount +"</td>");\r
+                       hw.write("<td>"+ fixedCount +"</td>");\r
+                       hw.write("</tr>");\r
+                       hw.newLine();\r
+\r
+                       // OSM file header\r
+                       BufferedWriter ow2 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(osmSample), "UTF-8"));\r
+                       ow2.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");\r
+                       ow2.newLine();\r
+                       ow2.write("<osm version=\"0.5\" generator=\"ConvBusstop\">");\r
+                       ow2.newLine();\r
+\r
+                       ow2.write(nodeBusstop(code, "SAMPLE", ((maxLat+minLat)/2), ((maxLon+minLon)/2), timeStampStr));\r
+                       ow2.newLine();\r
+                       ow2.write("</osm>");\r
+                       ow2.newLine();\r
+                       ow2.close();\r
+\r
+                       // OSM file footer\r
+                       ow.write("</osm>");\r
+                       ow.newLine();\r
+                       ow.close();\r
+\r
+                       // GPX file footer\r
+                       gw.write("</gpx>");\r
+                       gw.newLine();\r
+                       gw.close();\r
+               }\r
+               rset7.close();\r
+\r
+               // Wiki footer\r
+               ww.close();\r
+\r
+               // index file footer\r
+               hw.write("</table></body></html>");\r
+               hw.newLine();\r
+               hw.close();\r
+       }\r
+\r
+       public static int outputDb(Connection con) throws IOException, SQLException {\r
+               File osmFile = new File("busstop.osm");\r
+               int counter = 0;\r
+\r
+               SimpleDateFormat timeStampFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");\r
+               String timeStampStr = timeStampFmt.format(new Date(Calendar.getInstance().getTimeInMillis()));\r
+               BufferedWriter ow = null;\r
+               \r
+               // OSM file header\r
+               ow = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(osmFile), "UTF-8"));\r
+               ow.write("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");\r
+               ow.newLine();\r
+               ow.write("<osm version=\"0.6\" generator=\"ConvBusstop\">");\r
+               ow.newLine();\r
+               \r
+               PreparedStatement ps8 = con.prepareStatement("SELECT idref,name,lat,lon,fixed FROM bus_stop");\r
+               ResultSet rset8 = ps8.executeQuery();\r
+               while (rset8.next()) {\r
+                       String idref = rset8.getString("idref");\r
+                       String name = rset8.getString("name");\r
+                       Double lat = rset8.getDouble("lat");\r
+                       Double lon = rset8.getDouble("lon");\r
+                       int fixed = rset8.getInt("fixed");\r
+                       \r
+                       if (ConvBusstop.nocheck || (fixed < 1)) {\r
+                               // OSM node\r
+                               counter++;\r
+                               int nodeid = Integer.parseInt(idref.substring(1)) * -1;\r
+                               String osm_node = nodeBusstop(nodeid, name, lat, lon, timeStampStr);\r
+                               System.out.println(osm_node);\r
+                               ow.write(osm_node);\r
+                               ow.newLine();\r
+                       }\r
+               }\r
+               rset8.close();\r
+\r
+               // OSM file footer\r
+               ow.write("</osm>");\r
+               ow.newLine();\r
+               ow.close();\r
+               return counter;\r
+       }\r
+       \r
+       public static String nodeBusstop(int code, String name, Double lat, Double lon, String timeStampStr) {\r
+               String osm_node = ("<node id=\""+ code +"\" timestamp=\""+ timeStampStr +"Z\" lat=\""+ lat +"\" lon=\""+ lon +"\">\n");\r
+               osm_node += "<tag k=\"name\" v=\""+ name +"\"/>\n";\r
+               osm_node += "<tag k=\"fixme\" v=\"platform/stop_positionを選択して、正しい位置に移動させてください\"/>\n";\r
+               osm_node += "<tag k=\"source\" v=\"KSJ2\"/>\n";\r
+               osm_node += "<tag k=\"source_ref\" v=\"http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-P11.html\"/>\n";\r
+               osm_node += "<tag k=\"created_by\" v=\"National-Land-Numerical-Information_MLIT_Japan\"/>\n";\r
+               osm_node += "<tag k=\"note\" v=\"National-Land Numerical Information (Bus stop) 2012, MLIT Japan\"/>\n";\r
+               osm_node += "<tag k=\"note:ja\" v=\"国土数値情報(バス停留所)平成24年 国土交通省\"/>\n";\r
+               osm_node += "<tag k=\"public_transport\" v=\"platform\"/>\n";\r
+               osm_node += "<tag k=\"public_transport\" v=\"stop_position\"/>\n";\r
+               osm_node += "<tag k=\"highway\" v=\"bus_stop\"/>\n";\r
+               osm_node += "<tag k=\"bus\" v=\"yes\"/>\n";\r
+               osm_node += "</node>\n";\r
+               return osm_node;\r
+       }\r
+\r
+       /**\r
+        *\r
+        * @param con\r
+        * @param node\r
+        * @param iFileName             // ソースファイル名(拡張子を含まない)\r
+        * @param timeStampStr\r
+        * @return\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static int showNodes(Connection con, Node node, String iFileName, String timeStampStr) throws IOException, SQLException {\r
+               int iCounter = 0;\r
+               NamedNodeMap nodeMap = node.getAttributes();\r
+               if ( null != nodeMap ) {\r
+                       for ( int j=0; j < nodeMap.getLength(); j++ ) {\r
+                               if (nodeMap.item(j).getNodeName().equals("timeStamp")) {\r
+                                       timeStampStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                       }\r
+               }\r
+\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i<nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("jps:GM_Point")) {\r
+                               showGmPoint(con, node2);\r
+                       }\r
+                       else if (node2.getNodeName().equals("gml:Point")) {\r
+                               showGmlPoint(con, node2);\r
+                       }\r
+\r
+                       else if (node2.getNodeName().equals("ksj:ED01")) {\r
+                               iCounter++;\r
+                               showED01(con, node2, iFileName);\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:BusStop")) {\r
+                               iCounter++;\r
+                               showBusStop(con, node2, iFileName);\r
+                       }\r
+\r
+                       else {\r
+                               iCounter += showNodes(con, node2, iFileName, timeStampStr);\r
+                       }\r
+               }\r
+               return iCounter;\r
+       }\r
+\r
+       /**\r
+        *\r
+        * @param con\r
+        * @param node\r
+        * @param iFileName             // ソースファイル名(拡張子を含まない)\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static void showED01(Connection con, Node node, String iFileName) throws IOException, SQLException {\r
+               String idrefStr = "";\r
+               String nameStr = "";\r
+               PreparedStatement ps1 = con.prepareStatement("SELECT idref FROM bus_stop WHERE idref=?");\r
+               PreparedStatement ps2 = con.prepareStatement("INSERT INTO bus_stop (idref,name,ifile) VALUES (?,?,?)");\r
+               PreparedStatement ps3 = con.prepareStatement("SELECT code FROM bus_course WHERE course=? AND corp=? AND ifile=?");\r
+               PreparedStatement ps4 = con.prepareStatement("INSERT INTO bus_course (code,type,corp,course,ifile) VALUES (?,?,?,?,?)");\r
+               PreparedStatement ps5 = con.prepareStatement("INSERT INTO bus_ref (idref,code) VALUES (?,?)");\r
+               PreparedStatement ps6 = con.prepareStatement("SELECT max(code) FROM bus_course WHERE ifile=?");\r
+\r
+               ArrayList<String[]> bris = new ArrayList<String[]>();\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("ksj:POS")) {\r
+                               NamedNodeMap nodeMap = node2.getAttributes();\r
+                               if (null != nodeMap) {\r
+                                       for ( int j=0; j < nodeMap.getLength(); j++ ) {\r
+                                               if (nodeMap.item(j).getNodeName().equals("idref")) {\r
+                                                       idrefStr = nodeMap.item(j).getNodeValue();\r
+                                                       System.out.println("found idref='"+ idrefStr +"'");\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:BSN")) {\r
+                               nameStr = node2.getTextContent();\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:BRI")) {\r
+                               String[] rtn = anaComm(node2);\r
+                               if (rtn != null) {\r
+                                       bris.add(rtn);\r
+                               }\r
+                       }\r
+               }\r
+\r
+               // idref と nameStr をデータベースに格納する\r
+               boolean insert = true;\r
+               ps1.setString(1, idrefStr);\r
+               ResultSet rset = ps1.executeQuery();\r
+               if (rset.next()) {\r
+                       insert = false;\r
+               }\r
+               rset.close();\r
+\r
+               if (insert) {\r
+                       ps2.setString(1, idrefStr);\r
+                       ps2.setString(2, nameStr);\r
+                       ps2.setString(3, iFileName);\r
+                       System.out.println("INSERT INTO bus_stop (idref,name,ifile) VALUES ('"+ idrefStr +"','"+ nameStr +"','"+ iFileName +"')");\r
+                       ps2.executeUpdate();\r
+               }\r
+\r
+               for (String[] rtn : bris) {\r
+                       int code = 0;\r
+                       ps3.setString(1, rtn[1]);\r
+                       ps3.setString(2, rtn[2]);\r
+                       ps3.setString(3, iFileName);\r
+                       rset = ps3.executeQuery();\r
+                       if (rset.next()) {\r
+                               code = rset.getInt(1);\r
+                       }\r
+                       rset.close();\r
+\r
+                       if (code == 0) {\r
+                               ps6.setString(1, iFileName);\r
+                               ResultSet rset6 = ps6.executeQuery();\r
+                               if (rset6.next()) {\r
+                                       code = rset6.getInt(1);\r
+                               }\r
+                               rset6.close();\r
+                               code++;\r
+\r
+                               System.out.println("code="+code);\r
+                               ps4.setInt(1, code);\r
+                               ps4.setInt(2, Integer.parseInt(rtn[0]));\r
+                               ps4.setString(3, rtn[2]);\r
+                               ps4.setString(4, rtn[1]);\r
+                               ps4.setString(5, iFileName);\r
+                               ps4.executeUpdate();\r
+                       }\r
+\r
+                       ps5.setString(1, idrefStr);\r
+                       ps5.setInt(2, code);\r
+                       ps5.executeUpdate();\r
+               }\r
+\r
+               ps1.close();\r
+               ps2.close();\r
+               ps3.close();\r
+               ps4.close();\r
+               ps5.close();\r
+       }\r
+\r
+       /**\r
+        * <ksj:BusStop gml:id="ED01_1">\r
+        *      <ksj:position xlink:href="#n1"/>\r
+        *      <ksj:busStopName>城堀</ksj:busStopName>\r
+        *      <ksj:busRouteInformation>\r
+        *              <ksj:BusRouteInformation>\r
+        *                      <ksj:busType>1</ksj:busType>\r
+        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>\r
+        *                      <ksj:busLineName>小01</ksj:busLineName>\r
+        *              </ksj:BusRouteInformation>\r
+        *      </ksj:busRouteInformation>\r
+        *      <ksj:busRouteInformation>\r
+        *              <ksj:BusRouteInformation>\r
+        *                      <ksj:busType>1</ksj:busType>\r
+        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>\r
+        *                      <ksj:busLineName>湯07</ksj:busLineName>\r
+        *              </ksj:BusRouteInformation>\r
+        *      </ksj:busRouteInformation>\r
+        *      <ksj:busRouteInformation>\r
+        *              <ksj:BusRouteInformation>\r
+        *                      <ksj:busType>1</ksj:busType>\r
+        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>\r
+        *                      <ksj:busLineName>湯11</ksj:busLineName>\r
+        *              </ksj:BusRouteInformation>\r
+        *      </ksj:busRouteInformation>\r
+        * </ksj:BusStop>\r
+        *\r
+        * @param con\r
+        * @param node\r
+        * @param iFileName             // ソースファイル名(拡張子を含まない)\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static void showBusStop(Connection con, Node node, String iFileName) throws IOException, SQLException {\r
+               String idrefStr = "";\r
+               String nameStr = "";\r
+               PreparedStatement ps2 = con.prepareStatement("UPDATE bus_stop SET name=?,ifile=? WHERE idref=?");\r
+               PreparedStatement ps3 = con.prepareStatement("SELECT code FROM bus_course WHERE course=? AND corp=? AND ifile=?");\r
+               PreparedStatement ps4 = con.prepareStatement("INSERT INTO bus_course (code,type,corp,course,ifile) VALUES (?,?,?,?,?)");\r
+               PreparedStatement ps5 = con.prepareStatement("INSERT INTO bus_ref (idref,code) VALUES (?,?)");\r
+               PreparedStatement ps6 = con.prepareStatement("SELECT max(code) FROM bus_course WHERE ifile=?");\r
+\r
+               ArrayList<String[]> bris = new ArrayList<String[]>();\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("ksj:position")) {\r
+                               NamedNodeMap nodeMap = node2.getAttributes();\r
+                               if (null != nodeMap) {\r
+                                       for ( int j=0; j < nodeMap.getLength(); j++ ) {\r
+                                               if (nodeMap.item(j).getNodeName().equals("xlink:href")) {\r
+                                                       idrefStr = nodeMap.item(j).getNodeValue();\r
+                                                       idrefStr = idrefStr.substring(1);\r
+                                                       System.out.println("found idref='"+ idrefStr +"'");\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:busStopName")) {\r
+                               nameStr = node2.getTextContent();\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:busRouteInformation")) {\r
+                               String[] rtn = anaCommJGD(node2);\r
+                               if (rtn != null) {\r
+                                       bris.add(rtn);\r
+                               }\r
+                       }\r
+               }\r
+\r
+               // idref と nameStr をデータベースに格納する\r
+               ps2.setString(1, nameStr);\r
+               ps2.setString(2, iFileName);\r
+               ps2.setString(3, idrefStr);\r
+               ps2.executeUpdate();\r
+\r
+               for (String[] rtn : bris) {\r
+                       int code = 0;\r
+                       ps3.setString(1, rtn[1]);\r
+                       ps3.setString(2, rtn[2]);\r
+                       ps3.setString(3, iFileName);\r
+                       ResultSet rset = ps3.executeQuery();\r
+                       if (rset.next()) {\r
+                               code = rset.getInt(1);\r
+                       }\r
+                       rset.close();\r
+\r
+                       if (code == 0) {\r
+                               ps6.setString(1, iFileName);\r
+                               ResultSet rset6 = ps6.executeQuery();\r
+                               if (rset6.next()) {\r
+                                       code = rset6.getInt(1);\r
+                               }\r
+                               rset6.close();\r
+                               code++;\r
+\r
+                               System.out.println("course="+ code +" : "+ rtn[0] +" : "+ rtn[1] +" : "+ rtn[2] );\r
+                               ps4.setInt(1, code);\r
+                               ps4.setInt(2, Integer.parseInt(rtn[0]));\r
+                               ps4.setString(3, rtn[2]);\r
+                               ps4.setString(4, rtn[1]);\r
+                               ps4.setString(5, iFileName);\r
+                               ps4.executeUpdate();\r
+                       }\r
+\r
+                       ps5.setString(1, idrefStr);\r
+                       ps5.setInt(2, code);\r
+                       ps5.executeUpdate();\r
+               }\r
+\r
+               ps2.close();\r
+               ps3.close();\r
+               ps4.close();\r
+               ps5.close();\r
+       }\r
+\r
+       public static String[] anaComm(Node briNode) {\r
+               String[] rtn = new String[3];\r
+               rtn[0] = "";    // corp type\r
+               rtn[1] = "";    // course name\r
+               rtn[2] = "";    // corp name\r
+\r
+               NodeList nodes = briNode.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("ksj:BSC")) {\r
+                               rtn[0] = node2.getTextContent();\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:BLN")) {\r
+                               rtn[1] = node2.getTextContent();\r
+                       }\r
+                       else if (node2.getNodeName().equals("ksj:BOC")) {\r
+                               rtn[2] = node2.getTextContent();\r
+                       }\r
+               }\r
+               return rtn;\r
+       }\r
+\r
+       /**\r
+        *\r
+        *      <ksj:busRouteInformation>\r
+        *              <ksj:BusRouteInformation>\r
+        *                      <ksj:busType>1</ksj:busType>\r
+        *                      <ksj:busOperationCompany>箱根登山バス</ksj:busOperationCompany>\r
+        *                      <ksj:busLineName>小01</ksj:busLineName>\r
+        *              </ksj:BusRouteInformation>\r
+        *      </ksj:busRouteInformation>\r
+        *\r
+        * @param briNode\r
+        * @return\r
+        */\r
+       public static String[] anaCommJGD(Node briNode) {\r
+               String[] rtn = new String[3];\r
+               int vcnt = 0;\r
+\r
+               NodeList nodes2 = briNode.getChildNodes();\r
+               for (int i=0; i < nodes2.getLength(); i++) {\r
+                       Node node2 = nodes2.item(i);\r
+                       if (node2.getNodeName().equals("ksj:BusRouteInformation")) {\r
+                               NodeList nodes3 = node2.getChildNodes();\r
+                               for (int j=0; j < nodes3.getLength(); j++) {\r
+                                       Node node3 = nodes3.item(j);\r
+                                       if (node3.getNodeName().equals("ksj:busType")) {\r
+                                               rtn[0] = new String(node3.getTextContent());\r
+                                               vcnt++;\r
+                                       }\r
+                                       else if (node3.getNodeName().equals("ksj:busLineName")) {\r
+                                               rtn[1] = new String(node3.getTextContent());\r
+                                               vcnt++;\r
+                                       }\r
+                                       else if (node3.getNodeName().equals("ksj:busOperationCompany")) {\r
+                                               rtn[2] = new String(node3.getTextContent());\r
+                                               vcnt++;\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               if (vcnt > 0) {\r
+                       return rtn;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       public static void showGmPoint(Connection con, Node node) throws IOException, SQLException {\r
+               String positionStr = "";\r
+               String latStr = "";\r
+               String lonStr = "";\r
+               String idStr = "";\r
+\r
+               NamedNodeMap nodeMap = node.getAttributes();\r
+               if ( null != nodeMap ) {\r
+                       for ( int j=0; j<nodeMap.getLength(); j++ ) {\r
+                               if (nodeMap.item(j).getNodeName().equals("id")) {\r
+                                       idStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                       }\r
+               }\r
+\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("jps:GM_Point.position")) {\r
+                               NodeList nodes3 = node2.getChildNodes();\r
+                               for (int j=0; j < nodes3.getLength(); j++) {\r
+                                       Node node3 = nodes3.item(j);\r
+                                       if (node3.getNodeName().equals("jps:DirectPosition")) {\r
+                                               NodeList nodes4 = node3.getChildNodes();\r
+                                               for (int k=0; k < nodes4.getLength(); k++) {\r
+                                                       Node node4 = nodes4.item(k);\r
+                                                       if (node4.getNodeName().equals("DirectPosition.coordinate")) {\r
+                                                               positionStr = node4.getTextContent();\r
+                                                               String[] str4Ary = positionStr.split(" ");\r
+                                                               latStr = str4Ary[0];\r
+                                                               lonStr = str4Ary[1];\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               PreparedStatement ps6 = con.prepareStatement("UPDATE bus_stop SET lat=?,lon=?,fixed=? WHERE idref=?");\r
+                               double lat = Double.parseDouble(latStr);\r
+                               double lon = Double.parseDouble(lonStr);\r
+                               ps6.setDouble(1, lat);\r
+                               ps6.setDouble(2, lon);\r
+                               // ps6.setInt(3, (ConvBusstop.nocheck ? 0 : HttpGET.getMap(lat, lon, NEER)));\r
+                               ps6.setInt(3, 0);\r
+                               ps6.setString(4, idStr);\r
+                               System.out.println("UPDATE bus_stop("+ idStr +") lat="+ lat +", lon="+ lon +", fixed=0");\r
+                               ps6.executeUpdate();\r
+                               ps6.close();\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * <gml:Point gml:id="n1">\r
+        *      <gml:pos>35.14591397 139.10569573</gml:pos>\r
+        * </gml:Point>\r
+        *\r
+        * @param con\r
+        * @param node\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static void showGmlPoint(Connection con, Node node) throws IOException, SQLException {\r
+               String positionStr = "";\r
+               String latStr = "";\r
+               String lonStr = "";\r
+               String idStr = "";\r
+\r
+               NamedNodeMap nodeMap = node.getAttributes();\r
+               if ( null != nodeMap ) {\r
+                       for ( int j=0; j<nodeMap.getLength(); j++ ) {\r
+                               if (nodeMap.item(j).getNodeName().equals("gml:id")) {\r
+                                       idStr = nodeMap.item(j).getNodeValue();\r
+                               }\r
+                       }\r
+               }\r
+\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (node2.getNodeName().equals("gml:pos")) {\r
+                               positionStr = node2.getTextContent().trim();\r
+                               String[] str4Ary = positionStr.split(" ");\r
+                               latStr = str4Ary[0];\r
+                               lonStr = str4Ary[1];\r
+                               \r
+                               PreparedStatement ps6 = con.prepareStatement("INSERT INTO bus_stop (lat,lon,fixed,idref) VALUES (?,?,?,?)");\r
+                               double lat = Double.parseDouble(latStr);\r
+                               double lon = Double.parseDouble(lonStr);\r
+                               System.out.println("INSERT INTO bus_stop (lat,lon,fixed,idref) VALUES ('"+ latStr +"','"+ lonStr +"','0','"+ idStr +"')");\r
+\r
+                               ps6.setDouble(1, lat);\r
+                               ps6.setDouble(2, lon);\r
+                               //ps6.setInt(3, (ConvBusstop.nocheck ? 0 : HttpGET.getMap(lat, lon, NEER)));\r
+                               ps6.setInt(3, 0);\r
+                               ps6.setString(4, idStr);\r
+                               ps6.executeUpdate();\r
+                               ps6.close();\r
+                       }\r
+               }\r
+       }\r
+\r
+       static boolean checkFile(File f) {\r
+               String name = f.getName();\r
+               if (!name.startsWith("P11-")) {\r
+                       return false;\r
+               }\r
+               if (!name.toUpperCase().endsWith(".XML")) {\r
+                       return false;\r
+               }\r
+               return true;\r
+       }\r
 }
\ No newline at end of file
index f263896..f0e56f3 100644 (file)
-package osm.jp;
-
-import java.io.*;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import jp.co.areaweb.tools.database.*;
-
-public class DbBusstop {
-       File inputFile;
-       String filter = "";
-       int iCounter = 0;
-       String urlStr = "";
-       Connection con;
-       String timeStampStr = null;
-       File dir = null;
-
-       /** メイン
-        * @throws IOException
-        * @throws SQLException
-        * @throws ClassNotFoundException
-        * @throws FileNotFoundException */
-       public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, IOException, SQLException 
-       {
-               Connection con = null;
-               try {
-                       con = DatabaseTool.openDb("database");
-                       DbBusstop.export(con);
-               }
-               finally {
-                       if (con != null) {
-                               DatabaseTool.closeDb(con);
-                       }
-               }
-       }
-
-       /**
-        * 'table.BUS_STOP'を新規に作る
-        * 既にテーブルが存在する時には何もしない
-        * @param con
-        * @throws SQLException
-        */
-       public static void create(Connection con) throws SQLException {
-               create(con, "CREATE TABLE bus_stop (idref VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, fixed INT, ifile VARCHAR(128), CONSTRAINT bus_stop_pk PRIMARY KEY(idref));");
-       }
-       
-       public static void create(Connection con, String createsql) throws SQLException {
-               System.out.println(createsql);
-               PreparedStatement ps = con.prepareStatement(createsql);
-               try {
-                       ps.executeUpdate();
-               }
-               catch (SQLException e) {
-                       if (!(e.toString().startsWith("Table already exists:"))) {
-                               throw e;
-                       }
-               }
-               finally {
-                       ps.close();
-               }
-       }
-
-       /**
-        * 'table.BUS_STOP'を削除する
-        * @param con
-        * @throws SQLException
-        */
-       public static void drop(Connection con) throws SQLException {
-               String createSt = "DROP TABLE bus_stop;";
-               System.out.println(createSt);
-               PreparedStatement ps = con.prepareStatement(createSt);
-               ps.executeUpdate();
-               ps.close();
-       }
-       
-       /**
-        * 'table.BUS_STOP'の内容をCSV形式にして標準出力に出力する
-        * @param con
-        */
-       public static void export(Connection con) {
-               try {
-                       System.out.println("TABLE: BUS_STOP");
-                       System.out.println("\"name\",\"lat\",\"lon\",\"fixed\",\"ifile\"");
-                       PreparedStatement ps8 = con.prepareStatement("SELECT name,lat,lon,fixed,ifile FROM bus_stop");
-                       ResultSet rset8 = ps8.executeQuery();
-                       while (rset8.next()) {
-                               String name = rset8.getString(1);
-                               Double lat = rset8.getDouble(2);
-                               Double lon = rset8.getDouble(3);
-                               int fixed = rset8.getInt(4);
-                               String ifile = rset8.getString(5);
-                               System.out.println("\""+ name +"\","+ lat +","+ lon +","+ fixed +",\""+ ifile +"\"");
-                       }
-                       rset8.close();
-               }
-               catch (SQLException e) {
-                       e.printStackTrace();
-               }
-       }
+package osm.jp;\r
+\r
+import java.io.*;\r
+import java.sql.Connection;\r
+import java.sql.PreparedStatement;\r
+import java.sql.ResultSet;\r
+import java.sql.SQLException;\r
+import jp.co.areaweb.tools.database.*;\r
+\r
+public class DbBusstop {\r
+       File inputFile;\r
+       String filter = "";\r
+       int iCounter = 0;\r
+       String urlStr = "";\r
+       Connection con;\r
+       String timeStampStr = null;\r
+       File dir = null;\r
+\r
+       /** メイン\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        * @throws ClassNotFoundException\r
+        * @throws FileNotFoundException */\r
+       public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, IOException, SQLException \r
+       {\r
+               Connection con = null;\r
+               try {\r
+                       con = DatabaseTool.openDb("database");\r
+                       DbBusstop.export(con);\r
+               }\r
+               finally {\r
+                       if (con != null) {\r
+                               DatabaseTool.closeDb(con);\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * 'table.BUS_STOP'を新規に作る\r
+        * 既にテーブルが存在する時には何もしない\r
+        * @param con\r
+        * @throws SQLException\r
+        */\r
+       public static void create(Connection con) throws SQLException {\r
+               create(con, "CREATE TABLE bus_stop (idref VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, fixed INT, ifile VARCHAR(128), CONSTRAINT bus_stop_pk PRIMARY KEY(idref));");\r
+       }\r
+       \r
+       public static void create(Connection con, String createsql) throws SQLException {\r
+               System.out.println(createsql);\r
+               PreparedStatement ps = con.prepareStatement(createsql);\r
+               try {\r
+                       ps.executeUpdate();\r
+               }\r
+               catch (SQLException e) {\r
+                       if (!(e.toString().startsWith("Table already exists:"))) {\r
+                               throw e;\r
+                       }\r
+               }\r
+               finally {\r
+                       ps.close();\r
+               }\r
+       }\r
+\r
+       /**\r
+        * 'table.BUS_STOP'を削除する\r
+        * @param con\r
+        * @throws SQLException\r
+        */\r
+       public static void drop(Connection con) throws SQLException {\r
+               String createSt = "DROP TABLE bus_stop;";\r
+               System.out.println(createSt);\r
+               PreparedStatement ps = con.prepareStatement(createSt);\r
+               ps.executeUpdate();\r
+               ps.close();\r
+       }\r
+       \r
+       /**\r
+        * 'table.BUS_STOP'の内容をCSV形式にして標準出力に出力する\r
+        * @param con\r
+        */\r
+       public static void export(Connection con) {\r
+               try {\r
+                       System.out.println("TABLE: BUS_STOP");\r
+                       System.out.println("\"name\",\"lat\",\"lon\",\"fixed\",\"ifile\"");\r
+                       PreparedStatement ps8 = con.prepareStatement("SELECT name,lat,lon,fixed,ifile FROM bus_stop");\r
+                       ResultSet rset8 = ps8.executeQuery();\r
+                       while (rset8.next()) {\r
+                               String name = rset8.getString(1);\r
+                               Double lat = rset8.getDouble(2);\r
+                               Double lon = rset8.getDouble(3);\r
+                               int fixed = rset8.getInt(4);\r
+                               String ifile = rset8.getString(5);\r
+                               System.out.println("\""+ name +"\","+ lat +","+ lon +","+ fixed +",\""+ ifile +"\"");\r
+                       }\r
+                       rset8.close();\r
+               }\r
+               catch (SQLException e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
 }
\ No newline at end of file
index dbe33cf..c3cf151 100644 (file)
@@ -1,28 +1,47 @@
-package osm.jp;
-
-public class RectArea {
-    public double minlon;      // 経度(西)
-    public double maxlon;      // 経度(東)
-    public double minlat;      // 緯度(南)
-    public double maxlat;      // 緯度(北)
-
-    /**
-     * 矩形領域を中心点と中心点からの距離(メートル)でセットする
-     * 
-     * @param lat      // 中心点の緯度
-     * @param lon      // 中心点の経度
-     * @param m                // 距離 領域の一辺の長さの半分
-     */
-       public RectArea(double lat, double lon, int m) {
-               double BIG_Y = (40000000.0d / 2.0d / Math.PI);          // 地球の半径
-               double LAT1 = (10000000.0d / 90.0d);            // 緯度1度の距離(m)
-               double dLat = m / LAT1;                                         // 距離を表す緯度(差分)
-               minlat = lat - dLat;            // 底辺(緯度)
-               maxlat = lat + dLat;            // 上辺(緯度)
-               double y = Math.sin((90.0d - lat) / 180.0d) * BIG_Y;    // 緯線上の地球の半径
-               double lon1 = y * 2.0d * Math.PI;                       // 経度1度の距離(m)
-               double dLon = m / lon1;                                         // 距離を表す経度(差分)
-               minlon = lon - dLon;            // 左辺
-               maxlon = lon + dLon;            // 右辺
-       }
-}
+package osm.jp;\r
+\r
+public class RectArea {\r
+    public double minlon;      // 経度(西)\r
+    public double maxlon;      // 経度(東)\r
+    public double minlat;      // 緯度(南)\r
+    public double maxlat;      // 緯度(北)\r
+\r
+    /**\r
+     * 矩形領域を中心点と中心点からの距離(メートル)でセットする\r
+     * \r
+     * @param lat      // 中心点の緯度\r
+     * @param lon      // 中心点の経度\r
+     * @param m                // 距離 領域の一辺の長さの半分\r
+     */\r
+       public RectArea(double lat, double lon, int m) {\r
+               /*\r
+               double BIG_Y = (40000000.0d / 2.0d / Math.PI);          // 地球の半径\r
+               double LAT1 = (10000000.0d / 90.0d);            // 緯度1度の距離(m)\r
+               double dLat = m / LAT1;                                         // 距離を表す緯度(差分)\r
+               double y = Math.sin((90.0d - lat) / 180.0d) * BIG_Y;    // 緯線上の地球の半径\r
+               double lon1 = y * 2.0d * Math.PI;                       // 経度1度の距離(m)\r
+               double dLon = m / lon1;                                         // 距離を表す経度(差分)\r
+               */\r
+               double dLat = 0.000453D * m / 50D;                      // 距離を表す緯度(差分)\r
+               double dLon = 0.0005588D * m / 50D;                     // 距離を表す経度(差分)\r
+               minlat = lat - dLat;            // 底辺(緯度)\r
+               maxlat = lat + dLat;            // 上辺(緯度)\r
+               minlon = lon - dLon;            // 左辺\r
+               maxlon = lon + dLon;            // 右辺\r
+       }\r
+\r
+       /**\r
+        * 約100m四方\r
+        * @param lat\r
+        * @param lon\r
+        * @param m\r
+        */\r
+       public RectArea(double lat, double lon) {\r
+               double dLat = 0.000453;                 // 距離を表す緯度(差分)\r
+               double dLon = 0.0005588;                // 距離を表す経度(差分)\r
+               minlat = lat - dLat;            // 底辺(緯度)\r
+               maxlat = lat + dLat;            // 上辺(緯度)\r
+               minlon = lon - dLon;            // 左辺\r
+               maxlon = lon + dLon;            // 右辺\r
+       }\r
+}\r
index 046e8bd..bcde9ad 100644 (file)
-package osm.jp.api;
-
-import java.net.*;
-import java.io.*;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-/**
- * Java HTTP クライアントサンプル - HttpURLConnection 版 -
- *
- * @author 68user http://X68000.q-e-d.net/~68user/
- */
-public class HttpGET {
-       //public static String host = "http://api06.dev.openstreetmap.org";
-       public static String host = "http://api.openstreetmap.org";
-       
-       public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {
-        getCapabilities();
-        
-        /*
-               <node id="-4131" timestamp="2011-01-21T16:47:41Z" lat="35.4350644157973" lon="139.423684433498">
-                       <tag k="name" v="あやせ荘"/>
-               </node>
-               <node id="-4152" timestamp="2011-01-21T16:47:41Z" lat="35.4341675801122" lon="139.418362759267">
-                       <tag k="name" v="武者奇橋"/>
-               </node>
-               <node id="-4155" timestamp="2011-01-21T16:47:41Z" lat="35.4369651010672" lon="139.426400070915">
-                       <tag k="name" v="綾瀬市役所"/>
-               </node>
-         */
-
-        double minlon = 139.4197591d;
-               double maxlon = 139.4279939d;
-               double minlat = 35.4320438d;
-               double maxlat = 35.4375923d;
-               HttpGET.getMap(minlon, minlat, maxlon, maxlat);
-        
-               HttpGET.getMap(35.4350644157973d, 139.423684433498d, 50);       // あやせ荘
-               HttpGET.getMap(35.4341675801122d, 139.418362759267d, 50);       // 武者奇橋
-               HttpGET.getMap(35.4369651010672d, 139.426400070915d, 50);       // 綾瀬市役所
-    }
-       
-       public static void getCapabilities() throws MalformedURLException, ProtocolException, IOException {
-               System.out.println(host + "/api/capabilities");
-        URL url = new URL(host + "/api/capabilities");
-
-        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
-        urlconn.setRequestMethod("GET");
-        urlconn.setInstanceFollowRedirects(false);
-        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
-        urlconn.connect();
-
-        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
-                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
-        System.out.println("\n---- ボディ ----");
-
-        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
-
-        while (true){
-            String line = reader.readLine();
-            if ( line == null ){
-                break;
-            }
-            System.out.println(line);
-        }
-
-        reader.close();
-        urlconn.disconnect();
-       }
-       
-
-       public static final double BIG_Y = (6378137.0d + 6356752.314d) / 2d;    // 地球の平均半径(m)
-       public static final double LAT1 = Math.PI * 2d * BIG_Y / 360d;                  // 緯度1度の距離(m)
-       public static int getMap(double lat, double lon, int m) throws MalformedURLException, ProtocolException, IOException {
-               double dLat = m / LAT1;                                         // 距離を表す緯度(差分)
-               double minlat = lat - dLat;             // 底辺(緯度)
-               double maxlat = lat + dLat;             // 上辺(緯度)
-               
-               double y = Math.cos(lat / 180.0d * Math.PI) * BIG_Y;    // 緯線上の地球の半径
-               double lon1 = (y * 2.0d * Math.PI) / 360;                       // 経度1度の距離(m)
-               double dLon = m / lon1;                                         // 距離を表す経度(差分)
-               double minlon = lon - dLon;             // 左辺
-               double maxlon = lon + dLon;             // 右辺
-
-               System.out.println("緯線上の地球の半径= "+ y);
-               System.out.println("緯度1秒の長さ(m)= "+ LAT1 / 3600);
-               System.out.println("経度1秒の長さ(m)= "+ lon1 / 3600);
-
-               return getMap(minlon, minlat, maxlon, maxlat);
-       }
-       
-       public static int getMap(RectArea center) throws MalformedURLException, ProtocolException, IOException {
-               return getMap(center.minlon, center.minlat, center.maxlon, center.maxlat);
-       }
-       
-       public static int getMap(double minlon, double minlat, double maxlon, double maxlat) throws MalformedURLException, ProtocolException, IOException {
-               String param = host + "/api/0.6/map" + "?bbox="+ Double.toString(minlon) +","+ Double.toString(minlat) +","+ Double.toString(maxlon) +","+ Double.toString(maxlat);
-
-               System.out.println(param);
-        URL url = new URL(param);
-
-        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
-        urlconn.setRequestMethod("GET");
-        urlconn.setInstanceFollowRedirects(false);
-        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
-        urlconn.connect();
-
-        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
-                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
-        System.out.println("\n---- ボディ ----");
-
-        //------------------------------------------
-        DocumentBuilderFactory factory;
-               DocumentBuilder        builder;
-               Node root;
-
-               try {
-                       factory = DocumentBuilderFactory.newInstance();
-                       builder = factory.newDocumentBuilder();
-                       factory.setIgnoringElementContentWhitespace(true);
-                       factory.setIgnoringComments(true);
-                       factory.setValidating(true);
-                       root    = builder.parse(urlconn.getInputStream());
-
-                       counter = 0;
-                       checkNodes(root);
-               } catch (ParserConfigurationException e0) {
-                       System.out.println(e0.getMessage());
-               } catch (SAXException e1){
-                       System.out.println(e1.getMessage());
-               } catch (IOException e2) {
-                       System.out.println(e2.getMessage());
-               }
-
-               System.out.println("バス停数["+ counter +"]");
-        urlconn.disconnect();
-        
-        return counter;
-       }
-       
-       public void sendCMD(String api) throws MalformedURLException, ProtocolException, IOException {
-               System.out.println(host + api);
-        URL url = new URL(host + api);
-
-        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
-        urlconn.setRequestMethod("GET");
-        urlconn.setInstanceFollowRedirects(false);
-        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
-        urlconn.connect();
-
-        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
-                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
-        System.out.println("\n---- ボディ ----");
-
-        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
-
-        while (true){
-            String line = reader.readLine();
-            if ( line == null ){
-                break;
-            }
-            System.out.println(line);
-        }
-
-        reader.close();
-        urlconn.disconnect();
-    }
-       
-       public static int counter;
-       public static void checkNodes(Node node) {
-               if (isBusstop(node)) {
-                       counter++;
-                       showNode(node);
-               }
-               
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i<nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       checkNodes(node2);
-               }
-       }
-       
-       /**
-        * [バス停]か?
-        * @param node
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static boolean isBusstop(Node node) {
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i < nodes.getLength(); i++) {
-                       Node node2 = nodes.item(i);
-                       if (isBusstopTag(node2)) {
-                               return true;
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * [bus_stop]タグか?
-        * @param node
-        * @return
-        */
-       private static boolean isBusstopTag(Node node) {
-               if (node.getNodeName().equals("tag")) {
-                       boolean highway = false;
-                       boolean bus_stop = false;
-                       boolean public_transport = false;
-                       boolean plathome = false;
-                       boolean stop_position = false;
-                       NamedNodeMap nodeMap = node.getAttributes();
-                       if ( null != nodeMap ) {
-                               for (int j=0; j < nodeMap.getLength(); j++ ) {
-                                       String key = nodeMap.item(j).getNodeName();
-                                       String value = nodeMap.item(j).getNodeValue();
-                                       if (key.equals("k") && value.equals("highway")){
-                                               highway = true;
-                                       }
-                                       if (key.equals("k") && value.equals("public_transport")){
-                                               public_transport = true;
-                                       }
-                                       if (key.equals("v") && value.equals("bus_stop")){
-                                               bus_stop = true;
-                                       }
-                                       if (key.equals("v") && value.equals("plathome")){
-                                               plathome = true;
-                                       }
-                                       if (key.equals("v") && value.equals("stop_position")){
-                                               stop_position = true;
-                                       }
-                               }
-                               if (highway && bus_stop) {
-                                       return true;
-                               }
-                               if (public_transport && (plathome || stop_position)) {
-                                       return true;
-                               }
-                       }
-               }
-               return false;
-       }
-
-       /**
-        * 指定されたノードを再帰的に表示する。
-        * 
-        * @param node
-        * @throws IOException
-        * @throws SQLException
-        */
-       public static void showNode(Node node) {
-               System.out.print("<"+ node.getNodeName());
-               NamedNodeMap nodeMap = node.getAttributes();
-               if ( null != nodeMap ) {
-                       for ( int j=0; j < nodeMap.getLength(); j++ ) {
-                               System.out.print(" "+ nodeMap.item(j).getNodeName() +"=\""+ nodeMap.item(j).getNodeValue() +"\"");
-                       }
-               }
-
-               System.out.print(">"+ node.getNodeValue());
-               
-               NodeList nodes = node.getChildNodes();
-               for (int i=0; i<nodes.getLength(); i++) {
-                       showNode(nodes.item(i));
-               }
-               System.out.println("</"+ node.getNodeName() +">");
-       }
-       
-       class RectArea {
-        public double minlon;
-        public double maxlon;
-        public double minlat;
-        public double maxlat;
-
-        /**
-         * 矩形領域を中心点と中心点からの距離(メートル)でセットする
-         * 
-         * @param lat  // 中心点の緯度
-         * @param lon  // 中心点の経度
-         * @param m            // 距離 領域の一辺の長さの半分
-         */
-               public RectArea(double lat, double lon, int m) {
-                       double BIG_Y = (40000000.0d / 2.0d / Math.PI);          // 地球の半径
-                       double LAT1 = (10000000.0d / 90.0d);            // 緯度1度の距離(m)
-                       double dLat = m / LAT1;                                         // 距離を表す緯度(差分)
-                       minlat = lat - dLat;            // 底辺(緯度)
-                       maxlat = lat + dLat;            // 上辺(緯度)
-                       double y = Math.sin((90.0d - lat) / 180.0d) * BIG_Y;    // 緯線上の地球の半径
-                       double lon1 = y * 2.0d * Math.PI;                       // 経度1度の距離(m)
-                       double dLon = m / lon1;                                         // 距離を表す経度(差分)
-                       minlon = lon - dLon;            // 左辺
-                       maxlon = lon + dLon;            // 右辺
-               }
-       }
-}
+package osm.jp.api;\r
+\r
+import java.net.*;\r
+import java.io.*;\r
+\r
+import javax.xml.parsers.DocumentBuilder;\r
+import javax.xml.parsers.DocumentBuilderFactory;\r
+import javax.xml.parsers.ParserConfigurationException;\r
+\r
+import org.w3c.dom.NamedNodeMap;\r
+import org.w3c.dom.Node;\r
+import org.w3c.dom.NodeList;\r
+import org.xml.sax.SAXException;\r
+\r
+/**\r
+ * Java HTTP クライアントサンプル - HttpURLConnection 版 -\r
+ *\r
+ * @author 68user http://X68000.q-e-d.net/~68user/\r
+ */\r
+public class HttpGET {\r
+       //public static String host = "http://api06.dev.openstreetmap.org";\r
+       public static String host = "http://api.openstreetmap.org";\r
+       \r
+       public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {\r
+        getCapabilities();\r
+        \r
+        /*\r
+               <node id="-4131" timestamp="2011-01-21T16:47:41Z" lat="35.4350644157973" lon="139.423684433498">\r
+                       <tag k="name" v="あやせ荘"/>\r
+               </node>\r
+               <node id="-4152" timestamp="2011-01-21T16:47:41Z" lat="35.4341675801122" lon="139.418362759267">\r
+                       <tag k="name" v="武者奇橋"/>\r
+               </node>\r
+               <node id="-4155" timestamp="2011-01-21T16:47:41Z" lat="35.4369651010672" lon="139.426400070915">\r
+                       <tag k="name" v="綾瀬市役所"/>\r
+               </node>\r
+         */\r
+\r
+        double minlon = 139.4197591d;\r
+               double maxlon = 139.4279939d;\r
+               double minlat = 35.4320438d;\r
+               double maxlat = 35.4375923d;\r
+               HttpGET.getMap(minlon, minlat, maxlon, maxlat);\r
+        \r
+               HttpGET.getMap(35.4350644157973d, 139.423684433498d, 50);       // あやせ荘\r
+               HttpGET.getMap(35.4341675801122d, 139.418362759267d, 50);       // 武者奇橋\r
+               HttpGET.getMap(35.4369651010672d, 139.426400070915d, 50);       // 綾瀬市役所\r
+    }\r
+       \r
+       public static void getCapabilities() throws MalformedURLException, ProtocolException, IOException {\r
+               System.out.println(host + "/api/capabilities");\r
+        URL url = new URL(host + "/api/capabilities");\r
+\r
+        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();\r
+        urlconn.setRequestMethod("GET");\r
+        urlconn.setInstanceFollowRedirects(false);\r
+        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");\r
+        urlconn.connect();\r
+\r
+        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +\r
+                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");\r
+        System.out.println("\n---- ボディ ----");\r
+\r
+        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));\r
+\r
+        while (true){\r
+            String line = reader.readLine();\r
+            if ( line == null ){\r
+                break;\r
+            }\r
+            System.out.println(line);\r
+        }\r
+\r
+        reader.close();\r
+        urlconn.disconnect();\r
+       }\r
+       \r
+\r
+       public static final double BIG_Y = (6378137.0d + 6356752.314d) / 2d;    // 地球の平均半径(m)\r
+       public static final double LAT1 = Math.PI * 2d * BIG_Y / 360d;                  // 緯度1度の距離(m)\r
+       public static int getMap(double lat, double lon, int m) throws MalformedURLException, ProtocolException, IOException {\r
+               double dLat = m / LAT1;                                         // 距離を表す緯度(差分)\r
+               double minlat = lat - dLat;             // 底辺(緯度)\r
+               double maxlat = lat + dLat;             // 上辺(緯度)\r
+               \r
+               double y = Math.cos(lat / 180.0d * Math.PI) * BIG_Y;    // 緯線上の地球の半径\r
+               double lon1 = (y * 2.0d * Math.PI) / 360;                       // 経度1度の距離(m)\r
+               double dLon = m / lon1;                                         // 距離を表す経度(差分)\r
+               double minlon = lon - dLon;             // 左辺\r
+               double maxlon = lon + dLon;             // 右辺\r
+\r
+               System.out.println("緯線上の地球の半径= "+ y);\r
+               System.out.println("緯度1秒の長さ(m)= "+ LAT1 / 3600);\r
+               System.out.println("経度1秒の長さ(m)= "+ lon1 / 3600);\r
+\r
+               return getMap(minlon, minlat, maxlon, maxlat);\r
+       }\r
+       \r
+       public static int getMap(RectArea center) throws MalformedURLException, ProtocolException, IOException {\r
+               return getMap(center.minlon, center.minlat, center.maxlon, center.maxlat);\r
+       }\r
+       \r
+       public static int getMap(double minlon, double minlat, double maxlon, double maxlat) throws MalformedURLException, ProtocolException, IOException {\r
+               String param = host + "/api/0.6/map" + "?bbox="+ Double.toString(minlon) +","+ Double.toString(minlat) +","+ Double.toString(maxlon) +","+ Double.toString(maxlat);\r
+\r
+               System.out.println(param);\r
+        URL url = new URL(param);\r
+\r
+        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();\r
+        urlconn.setRequestMethod("GET");\r
+        urlconn.setInstanceFollowRedirects(false);\r
+        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");\r
+        urlconn.connect();\r
+\r
+        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +\r
+                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");\r
+        System.out.println("\n---- ボディ ----");\r
+\r
+        //------------------------------------------\r
+        DocumentBuilderFactory factory;\r
+               DocumentBuilder        builder;\r
+               Node root;\r
+\r
+               try {\r
+                       factory = DocumentBuilderFactory.newInstance();\r
+                       builder = factory.newDocumentBuilder();\r
+                       factory.setIgnoringElementContentWhitespace(true);\r
+                       factory.setIgnoringComments(true);\r
+                       factory.setValidating(true);\r
+                       root    = builder.parse(urlconn.getInputStream());\r
+\r
+                       counter = 0;\r
+                       checkNodes(root);\r
+               } catch (ParserConfigurationException e0) {\r
+                       System.out.println(e0.getMessage());\r
+               } catch (SAXException e1){\r
+                       System.out.println(e1.getMessage());\r
+               } catch (IOException e2) {\r
+                       System.out.println(e2.getMessage());\r
+               }\r
+\r
+               System.out.println("バス停数["+ counter +"]");\r
+        urlconn.disconnect();\r
+        \r
+        return counter;\r
+       }\r
+       \r
+       public void sendCMD(String api) throws MalformedURLException, ProtocolException, IOException {\r
+               System.out.println(host + api);\r
+        URL url = new URL(host + api);\r
+\r
+        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();\r
+        urlconn.setRequestMethod("GET");\r
+        urlconn.setInstanceFollowRedirects(false);\r
+        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");\r
+        urlconn.connect();\r
+\r
+        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +\r
+                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");\r
+        System.out.println("\n---- ボディ ----");\r
+\r
+        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));\r
+\r
+        while (true){\r
+            String line = reader.readLine();\r
+            if ( line == null ){\r
+                break;\r
+            }\r
+            System.out.println(line);\r
+        }\r
+\r
+        reader.close();\r
+        urlconn.disconnect();\r
+    }\r
+       \r
+       public static int counter;\r
+       public static void checkNodes(Node node) {\r
+               if (isBusstop(node)) {\r
+                       counter++;\r
+                       showNode(node);\r
+               }\r
+               \r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i<nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       checkNodes(node2);\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * [バス停]か?\r
+        * @param node\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static boolean isBusstop(Node node) {\r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i < nodes.getLength(); i++) {\r
+                       Node node2 = nodes.item(i);\r
+                       if (isBusstopTag(node2)) {\r
+                               return true;\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       /**\r
+        * [bus_stop]タグか?\r
+        * @param node\r
+        * @return\r
+        */\r
+       private static boolean isBusstopTag(Node node) {\r
+               if (node.getNodeName().equals("tag")) {\r
+                       boolean highway = false;\r
+                       boolean bus_stop = false;\r
+                       boolean public_transport = false;\r
+                       boolean plathome = false;\r
+                       boolean stop_position = false;\r
+                       NamedNodeMap nodeMap = node.getAttributes();\r
+                       if ( null != nodeMap ) {\r
+                               for (int j=0; j < nodeMap.getLength(); j++ ) {\r
+                                       String key = nodeMap.item(j).getNodeName();\r
+                                       String value = nodeMap.item(j).getNodeValue();\r
+                                       if (key.equals("k") && value.equals("highway")){\r
+                                               highway = true;\r
+                                       }\r
+                                       if (key.equals("k") && value.equals("public_transport")){\r
+                                               public_transport = true;\r
+                                       }\r
+                                       if (key.equals("v") && value.equals("bus_stop")){\r
+                                               bus_stop = true;\r
+                                       }\r
+                                       if (key.equals("v") && value.equals("plathome")){\r
+                                               plathome = true;\r
+                                       }\r
+                                       if (key.equals("v") && value.equals("stop_position")){\r
+                                               stop_position = true;\r
+                                       }\r
+                               }\r
+                               if (highway && bus_stop) {\r
+                                       return true;\r
+                               }\r
+                               if (public_transport && (plathome || stop_position)) {\r
+                                       return true;\r
+                               }\r
+                       }\r
+               }\r
+               return false;\r
+       }\r
+\r
+       /**\r
+        * 指定されたノードを再帰的に表示する。\r
+        * \r
+        * @param node\r
+        * @throws IOException\r
+        * @throws SQLException\r
+        */\r
+       public static void showNode(Node node) {\r
+               System.out.print("<"+ node.getNodeName());\r
+               NamedNodeMap nodeMap = node.getAttributes();\r
+               if ( null != nodeMap ) {\r
+                       for ( int j=0; j < nodeMap.getLength(); j++ ) {\r
+                               System.out.print(" "+ nodeMap.item(j).getNodeName() +"=\""+ nodeMap.item(j).getNodeValue() +"\"");\r
+                       }\r
+               }\r
+\r
+               System.out.print(">"+ node.getNodeValue());\r
+               \r
+               NodeList nodes = node.getChildNodes();\r
+               for (int i=0; i<nodes.getLength(); i++) {\r
+                       showNode(nodes.item(i));\r
+               }\r
+               System.out.println("</"+ node.getNodeName() +">");\r
+       }\r
+       \r
+       class RectArea {\r
+        public double minlon;\r
+        public double maxlon;\r
+        public double minlat;\r
+        public double maxlat;\r
+\r
+        /**\r
+         * 矩形領域を中心点と中心点からの距離(メートル)でセットする\r
+         * \r
+         * @param lat  // 中心点の緯度\r
+         * @param lon  // 中心点の経度\r
+         * @param m            // 距離 領域の一辺の長さの半分\r
+         */\r
+               public RectArea(double lat, double lon, int m) {\r
+                       double BIG_Y = (40000000.0d / 2.0d / Math.PI);          // 地球の半径\r
+                       double LAT1 = (10000000.0d / 90.0d);            // 緯度1度の距離(m)\r
+                       double dLat = m / LAT1;                                         // 距離を表す緯度(差分)\r
+                       minlat = lat - dLat;            // 底辺(緯度)\r
+                       maxlat = lat + dLat;            // 上辺(緯度)\r
+                       double y = Math.sin((90.0d - lat) / 180.0d) * BIG_Y;    // 緯線上の地球の半径\r
+                       double lon1 = y * 2.0d * Math.PI;                       // 経度1度の距離(m)\r
+                       double dLon = m / lon1;                                         // 距離を表す経度(差分)\r
+                       minlon = lon - dLon;            // 左辺\r
+                       maxlon = lon + dLon;            // 右辺\r
+               }\r
+       }\r
+}\r
index 2b683df..875f0d0 100644 (file)
@@ -1,74 +1,74 @@
-package osm.jp.api;
-
-import java.net.*;
-import java.io.*;
-
-/**
- * Java HTTP クライアントサンプル - HttpURLConnection 版 -
- *
- * @author 68user http://X68000.q-e-d.net/~68user/
- */
-public class HttpPOST {
-       //public static String host = "http://api06.dev.openstreetmap.org";
-       //public static String host = "http://api.openstreetmap.org";
-       public static String host = "http://overpass-api.de";
-       
-       public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {
-               double minlat = 35.13d;
-               double maxlat = 35.66d;
-        double minlon = 138.99d;
-               double maxlon = 139.79d;
-        getCapabilities(minlat, maxlat, minlon, maxlon);
-    }
-       
-       public static void getCapabilities(double minLat, double maxLat, double minLon, double maxLon) throws MalformedURLException, ProtocolException, IOException {
-               System.out.println(host + "/api/interpreter");
-        URL url = new URL(host + "/api/interpreter");
-
-        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
-        urlconn.setRequestMethod("POST");
-        urlconn.setDoOutput(true);                             // POSTのデータを後ろに付ける
-        urlconn.setInstanceFollowRedirects(false);             // 勝手にリダイレクトさせない
-        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");
-        urlconn.setRequestProperty("Content-Type","text/xml;charset=utf-8");
-        urlconn.connect();
-
-        // 送信
-        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(urlconn.getOutputStream(), "utf-8")));
-        pw.print("<osm-script timeout=\"900\" element-limit=\"1073741824\">");
-        pw.print("<union>");
-        pw.print("<query type=\"node\">");
-        pw.print("<has-kv k=\"highway\" v=\"bus_stop\"/>");
-        pw.print("<bbox-query s=\"" + minLat + "\" n=\"" + maxLat + "\" w=\"" + minLon + "\" e=\"" + maxLon + "\"/>");
-        pw.print("</query>");
-        pw.print("<query type=\"node\">");
-        pw.print("<has-kv k=\"public_transport\" v=\"platform\"/>");
-        pw.print("<has-kv k=\"bus\" v=\"yes\"/>");
-        pw.print("<bbox-query s=\"" + minLat + "\" n=\"" + maxLat + "\" w=\"" + minLon + "\" e=\"" + maxLon + "\"/>");
-        pw.print("</query>");
-        pw.print("</union>");
-        pw.print("<print/>");
-        pw.print("</osm-script>");
-        pw.close();                    // closeで送信完了
-        
-        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +
-                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");
-        System.out.println("\n---- ボディ ----");
-
-        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
-
-               File oFile = new File("existing.xml");
-               BufferedWriter hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(oFile), "UTF-8"));
-        while (true) {
-            String line = reader.readLine();
-            if (line == null) {
-                break;
-            }
-               hw.write(line);
-               hw.newLine();
-        }
-        hw.close();
-        reader.close();
-        urlconn.disconnect();
-       }
-}
+package osm.jp.api;\r
+\r
+import java.net.*;\r
+import java.io.*;\r
+\r
+/**\r
+ * Java HTTP クライアントサンプル - HttpURLConnection 版 -\r
+ *\r
+ * @author 68user http://X68000.q-e-d.net/~68user/\r
+ */\r
+public class HttpPOST {\r
+       //public static String host = "http://api06.dev.openstreetmap.org";\r
+       //public static String host = "http://api.openstreetmap.org";\r
+       public static String host = "http://overpass-api.de";\r
+       \r
+       public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException {\r
+               double minlat = 35.13d;\r
+               double maxlat = 35.66d;\r
+        double minlon = 138.99d;\r
+               double maxlon = 139.79d;\r
+        getCapabilities(minlat, maxlat, minlon, maxlon);\r
+    }\r
+       \r
+       public static void getCapabilities(double minLat, double maxLat, double minLon, double maxLon) throws MalformedURLException, ProtocolException, IOException {\r
+               System.out.println(host + "/api/interpreter");\r
+        URL url = new URL(host + "/api/interpreter");\r
+\r
+        HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();\r
+        urlconn.setRequestMethod("POST");\r
+        urlconn.setDoOutput(true);                             // POSTのデータを後ろに付ける\r
+        urlconn.setInstanceFollowRedirects(false);             // 勝手にリダイレクトさせない\r
+        urlconn.setRequestProperty("Accept-Language", "ja;q=0.7,en;q=0.3");\r
+        urlconn.setRequestProperty("Content-Type","text/xml;charset=utf-8");\r
+        urlconn.connect();\r
+\r
+        // 送信\r
+        PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(urlconn.getOutputStream(), "utf-8")));\r
+        pw.print("<osm-script timeout=\"900\" element-limit=\"1073741824\">");\r
+        pw.print("<union>");\r
+        pw.print("<query type=\"node\">");\r
+        pw.print("<has-kv k=\"highway\" v=\"bus_stop\"/>");\r
+        pw.print("<bbox-query s=\"" + minLat + "\" n=\"" + maxLat + "\" w=\"" + minLon + "\" e=\"" + maxLon + "\"/>");\r
+        pw.print("</query>");\r
+        pw.print("<query type=\"node\">");\r
+        pw.print("<has-kv k=\"public_transport\" v=\"platform\"/>");\r
+        pw.print("<has-kv k=\"bus\" v=\"yes\"/>");\r
+        pw.print("<bbox-query s=\"" + minLat + "\" n=\"" + maxLat + "\" w=\"" + minLon + "\" e=\"" + maxLon + "\"/>");\r
+        pw.print("</query>");\r
+        pw.print("</union>");\r
+        pw.print("<print/>");\r
+        pw.print("</osm-script>");\r
+        pw.close();                    // closeで送信完了\r
+        \r
+        System.out.println("レスポンスコード[" + urlconn.getResponseCode() + "] " +\r
+                           "レスポンスメッセージ[" + urlconn.getResponseMessage() + "]");\r
+        System.out.println("\n---- ボディ ----");\r
+\r
+        BufferedReader reader = new BufferedReader(new InputStreamReader(urlconn.getInputStream(), "UTF-8"));\r
+\r
+               File oFile = new File("existing.xml");\r
+               BufferedWriter hw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(oFile), "UTF-8"));\r
+        while (true) {\r
+            String line = reader.readLine();\r
+            if (line == null) {\r
+                break;\r
+            }\r
+               hw.write(line);\r
+               hw.newLine();\r
+        }\r
+        hw.close();\r
+        reader.close();\r
+        urlconn.disconnect();\r
+       }\r
+}\r