OSDN Git Service

2段階チェック。同一名称のバス停がある場合にはインポート対象から外す。
authoryuuhayashi <hayashi.yuu@gmail.com>
Sun, 22 Feb 2015 06:37:57 +0000 (15:37 +0900)
committeryuuhayashi <hayashi.yuu@gmail.com>
Sun, 22 Feb 2015 06:37:57 +0000 (15:37 +0900)
.classpath
ConvBusstop.zip
classes/database.properties
src/ConvBusstop.sh
src/osm/jp/ConvBusstop.java

index 6150f79..7a553c1 100644 (file)
@@ -2,7 +2,7 @@
 <classpath>
        <classpathentry kind="src" path="src"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-       <classpathentry kind="lib" path="D:/workspace/hayashi_0225.jar"/>
-       <classpathentry kind="lib" path="D:/workspace/hsqldb_2_2_9.jar"/>
+       <classpathentry kind="lib" path="lib/hayashi_0225.jar"/>
+       <classpathentry kind="lib" path="lib/hsqldb_2.2.9.jar"/>
        <classpathentry kind="output" path="classes"/>
 </classpath>
index 42aa31c..89cb24f 100644 (file)
Binary files a/ConvBusstop.zip and b/ConvBusstop.zip differ
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 f52ae0a..3f5a37d 100644 (file)
@@ -1,5 +1,5 @@
-rm -r database\r
-java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusroute\r
+#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
+java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop -check\r
index 807012b..1ce3b77 100644 (file)
@@ -144,6 +144,7 @@ public class ConvBusstop {
                                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
+                               PreparedStatement ps4 = con.prepareStatement("SELECT count(idref) FROM existing_data where (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?) and (name = ?)");\r
                                ResultSet rset1 = ps1.executeQuery();\r
                                while (rset1.next()) {\r
                                        String idref = rset1.getString("idref");\r
@@ -151,9 +152,9 @@ public class ConvBusstop {
                                        Double lat = rset1.getDouble("lat");\r
                                        Double lon = rset1.getDouble("lon");\r
                                        \r
-                                       // 指定の緯度経度を中心とする半径75m四方の矩形領域\r
+                                       // 指定の緯度経度を中心とする半径150x2m四方の矩形領域\r
                                        System.out.print(idref + "("+ name + ") ....");\r
-                                       RectArea rect = new RectArea(lat, lon, NEER);           // 100m 四方\r
+                                       RectArea rect = new RectArea(lat, lon, NEER);           // 300m 四方\r
                                        ps2.setDouble(1, rect.minlat);\r
                                        ps2.setDouble(2, rect.maxlat);\r
                                        ps2.setDouble(3, rect.minlon);\r
@@ -161,10 +162,31 @@ public class ConvBusstop {
                                        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
+                                               if (count > 0) {\r
+                                                       System.out.println("."+ count);\r
+                                                       ps3.setInt(1, count);\r
+                                                       ps3.setString(2, idref);\r
+                                                       ps3.executeUpdate();\r
+                                               }\r
+                                               else {\r
+                                                       // 指定の緯度経度を中心とする半径150x4m四方の矩形領域\r
+                                                       System.out.print("***");\r
+                                                       rect = new RectArea(lat, lon, NEER*2);          // 600m 四方\r
+                                                       ps4.setDouble(1, rect.minlat);\r
+                                                       ps4.setDouble(2, rect.maxlat);\r
+                                                       ps4.setDouble(3, rect.minlon);\r
+                                                       ps4.setDouble(4, rect.maxlon);\r
+                                                       ps4.setString(5, name);\r
+                                                       ResultSet rset4 = ps4.executeQuery();\r
+                                                       if (rset4.next()) {\r
+                                                               count = rset4.getInt(1);\r
+                                                               System.out.println(".."+ count);\r
+                                                               ps3.setInt(1, count);\r
+                                                               ps3.setString(2, idref);\r
+                                                               ps3.executeUpdate();\r
+                                                       }\r
+                                                       rset4.close();\r
+                                               }\r
                                        }\r
                                        rset2.close();\r
                                }\r
@@ -249,7 +271,8 @@ public class ConvBusstop {
                String idrefStr = "";\r
                String latStr = "";\r
                String lonStr = "";\r
-               PreparedStatement ps5 = con.prepareStatement("INSERT INTO existing_data (idref,lat,lon) VALUES (?,?,?)");\r
+               String nameStr = "";\r
+               PreparedStatement ps5 = con.prepareStatement("INSERT INTO existing_data (idref,lat,lon, name) VALUES (?,?,?,?)");\r
 \r
                NamedNodeMap nodeMap = node.getAttributes();\r
                if (null != nodeMap) {\r
@@ -265,11 +288,37 @@ public class ConvBusstop {
                                }\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("tag")) {\r
+                                       NamedNodeMap nodeMap2 = node2.getAttributes();\r
+                                       if (null != nodeMap2) {\r
+                                               String key = null;\r
+                                               String value = null;\r
+                                               for (int j=0; j < nodeMap2.getLength(); j++) {\r
+                                                       if (nodeMap2.item(j).getNodeName().equals("k")) {\r
+                                                               key = nodeMap2.item(j).getNodeValue();\r
+                                                       }\r
+                                                       else if (nodeMap2.item(j).getNodeName().equals("v")) {\r
+                                                               value = nodeMap2.item(j).getNodeValue();\r
+                                                       }\r
+                                               }\r
+                                               \r
+                                               if ((key != null) && key.toLowerCase().equals("name") && (value != null)) {\r
+                                                       nameStr = value;\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
                        // idref と nameStr をデータベースに格納する\r
-                       System.out.println("import existing_data : "+ idrefStr +" ("+ latStr +","+ lonStr+")");\r
+                       System.out.println("import existing_data : "+ idrefStr +" ("+ latStr +","+ lonStr+")"+ nameStr);\r
                        ps5.setString(1, idrefStr);\r
                        ps5.setDouble(2, Double.parseDouble(latStr));\r
                        ps5.setDouble(3, Double.parseDouble(lonStr));\r
+                       ps5.setString(4, nameStr);\r
                        ps5.executeUpdate();\r
                        ps5.close();\r
                }\r