diff --git a/src/busstop.activity.violet.html b/src/busstop.activity.violet.html index c0f923e..6bb07e4 100644 --- a/src/busstop.activity.violet.html +++ b/src/busstop.activity.violet.html @@ -53,7 +53,7 @@ - + 1 @@ -74,7 +74,7 @@ - + 1 @@ -114,7 +114,7 @@ - + 1 @@ -123,7 +123,7 @@ - + 1 @@ -137,7 +137,7 @@ - + 1 @@ -155,7 +155,7 @@ - + 1 @@ -189,7 +189,7 @@ - + 1 @@ -233,9 +233,9 @@ - Fuel.main() -FUEL_EXISTのscoreを集計して -FUELのfixedをUPDATE + Busstop.main() +OSM_EXISTのscoreを集計して +BUS_STOPのfixed1をUPDATE @@ -247,7 +247,7 @@ - update (fixed) + update (fixed1) @@ -368,7 +368,7 @@ - + 1 @@ -884,914 +884,938 @@ ]]>

- embedded diagram image + embedded diagram image \ No newline at end of file diff --git a/src/db.busstop.class.violet.html b/src/db.busstop.class.violet.html index b45b5c1..d32f78f 100644 --- a/src/db.busstop.class.violet.html +++ b/src/db.busstop.class.violet.html @@ -158,6 +158,7 @@ * idref: VARCHAR(12) NOT NULL ++ name: VARCHAR(128) * lat: DOUBLE * lon: DOUBLE + score: INT @@ -194,6 +195,7 @@ + lat: DOUBLE + lon: DOUBLE + fixed: INT ++ fixed1: INT * area: INT + ifile: VARCHAR(128) + up: INT @@ -433,792 +435,845 @@

embedded diagram image +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 +jHPKyspevHihX+bk5Lx+/dpcy9+4ERERERsbW11dvbm5qd9aWVm5e/duVFRUTExMVVWV/IKBdsA0 +51hbkTUvLy/LhM/nm5ycrK2tjYyMNK3/2bNncXFxMv/evXtbW1syZ2lpSdZj++XIPgfaN/mNSkpK +ov1kwu12G3fP4Zm/Dqt1+DaCflHkFgAgtwDkFlx0jbS4uHj//v20tLTm5uZzreIc3u3u7i4tLdUv +d3d3JXXs7++rlxIP8vPzc3Nzbdfm8Xhkz7OystRLyWCJiYlv3ryROCFrqK+vl1AUSnf8WFtZWFiQ +L01Nr62tVVZWDg4Omtbf2tpaVFQkcUX2pKWlpbCwUM2XDGM9USO5KC8vr7+/37ppyZO3bt2Sr+jQ +TyYkC5lCZqDv1mG15BYAILeQW0BuwWXKLfPz82VlZXfu3Hn69KntYl6vd3h4+Fxzy87OTmRkpMQV +9bKnp0eSgH5Xdkx2QELFysqK7dokGERHR6vpmpoa6dkbVy6/YCjd8WNtpba21vqdmNYvOUenC/ms +PhszMDAgacr0WclpEmYkkGxvb5vW9ujRo/b2duPC8lJmhvLdOqyW3AIA5BZyC8gtuEy5RdKCuk5M +XcikvXv3Ljk5WTq+0uttaWnRH+no6IiJiYmPjx8aGrp//7505fW1VaaO797ensQPWcOtW7dkDc5X +kUl2evnypZrOy8ubnJzUPf6MjAz52dfX9+zZM2t1Kvvf2NjY1dWlXsre6vwTtAbWc467lfT0dNPX +5VzD9/f337t3T01vbm5KSrQGDJWd5Hswrc36G8kXK19piLkl0GrJLQBAbiG3gNyCy5RbAklMTJya +mpIJ+SnddP2R1tZW6d/Pzc1Jn3hkZGRlZUUyjG3H95Gfx+Pxer3yKefNTUxMqGu0VldXJS/p+WNj +Y01NTTJxcHCQlpb2SS3vJ1tfWFjQ8yMiIpwahgB3gxx3KyoPhPJ9Hh4eSmbLycnRt9kYz9uYPqu2 +PjAwYFyb9bYZ68xA363DasktAEBuIbeA3IKrkFtiYmJcLpdMyM/bt29bP2Lt5pompHNvHDvLeXPS +m09ISJDQ0uqn55eVlRljhj4PowcVKCkpefLkiV7+5s2be3t7If6+es5xt2KbJazrX19fz8rKam9v +l9/OIXUYPzs7O3vr1q3d3V29TFxcnOk3kndl5v+zdzcwcZ13osajEjph8ZRMNKWzLGWpcxNMHS6h +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 +/rShoeH06dPpA82Sp0+fRg7FZP21t73kj7Jfd3d3r1692tXVFct//PFHU1NTmsRHkLS2tqYAiJ+X +Ll0q2TFSp6+vL329TPVhZ7tEI3V3d9+6deu1o6ou8i9qrfijC2KEkVhxb8TyL7/8cvfu3bR+bW3t +iy++mJ2dLTnytWvXzp07F7c0HpexsbGsBqNhKl1W0i0AugXQLUc9qr29vbm5uXc9kpGRkZgTF6+J +6XU2pS47zoGBgeic4jXxa6xMy9En4+PjcdjiU0xMTGQXE96gW/5+dVEia4AYcEz0Y2FoaKhQKKSV +g4OD2d1VvOP+/n5KpurDznaJjaMKImk2NzffuFuWlpZOnjwZR6irq8tW9vb2ZndsLTc/Ui3Lqrj5 +2R14+/bt4eFh3QKgWwDd8j5Hde/evfRSopg6Z0Wxs7Nz8eLFWNnW1jY7O5uFTcxfG175+uuvs297 +jEiINa2trXfu3Ll06VJM96tcP8nn8+naRe3jjIFtb28Xr4nhtbS0pOWYXqcrG+m7KeNnjCRm8GW/ +N6bGbonTRfxkLw+LSXxnZ+fU1FRHR0f2DZixnN2Q4uM8f/487o3XDru4W+Lnt99+G3f4m3VLDCOi +5eHDhyUbxwAWFxdPnz4dp7h8+XL26rVajnzr1q3z58+n5Y2Njbj5ugVAtwC65X2OKqa8Dx48iIX4 +GXPxtLJQKKRvTVlaWorpb5qsR6v09fU9fyUW4td05GvXrsXMPraM+fH8/Pzq6mqUQ6XTHX5PRck4 +D7+do+wuJZdTPvvss/RSq5mZmQsXLvz9/28gqfQWkcO/JtmLwTLLy8uxvnhl9jq04uM8ffo08iNd +VKll2NnC/v5+BMbt27f/abfEjp988snNmzcPb1xXV5febBOF2d/fHw9ZLc+KeKwjX+OYW1tbWbZV ++uYc3QKgWwDdckSjamhoWFhYiIX42dbWlk3Ki+f6KWxiZfbRUi9evEhXFYqPXMsljkiC4qsQJTlR +6XpLybWCOEKsLN4leqmnp+fvV+/I//XXX2scTNlCiPl6lM8333xTfePiLMnel5/P5yPndnd3axx2 +8cKjR49aWlpim5Lgqf6MiiApfhFX8cbxeEVhZo9XcWhVOvL6+npXV9f169ejVWqpTd0CoFsA3XJE +oxodHY1Zacy5Ozs7FxcX08r0zvISxd0SU/M0D/6n3TI0NHT16tVKw6v0/paJiYniNTGxzj7kKu0S +8+xohvv372fp9TavE4veiMAoeTN6ycaNjY37+/tvOeySfa9cuTI4OFhycaP6M6rKx46dPXs2u2YS +j1fqzCpHfvbs2ZkzZ1ZWVko2iwc9bqxuAdAtgG55n6NqamqKqWr2to2kr69veno6YmBzc3N4eDjl +SkzE+/v70+vEYv4dM+w36JaYSbe3t4+NjaVrETH1n52dzabFZXf866+/Wltbp6am0gdzxUL8eviD +uSKHIr3Gx8ffvltCHCd7g0fZjSPtIpPeftjF+8b9/NFHH/2j6y1VbtHMzEzchLjD47Dx2KXX9VU5 +8rlz59KFtRJxM8t2rG4B0C2Abjm6UY2MjKT/pM/lcqOjo2nl9vZ2b29vrMnn85OTk2nl7u7uV199 +lXtlaGjoxYsXr+2WsudN39+Svickjh/9s7a2lm1f6ftb0ucEhFgo/tTjbJtIgrq6uvSlK39Xfn9L +2QEf/jXaLM5VfPGhZOMbN25kH2NQ6e6tZdgl+z58+LD6p5zFbcyu87z2gf7uu+/iHo77OYIzvXqt +eraVvaMKhUJErG4B0C2Abnmfo2pqakpvwY95f6W3X3PYy5cvu7u7qyTEu7C8vBwnPcozRp3GGUve +7qJbAHQLoFuOelQTExP5fD6Xy3V0dMzPz3sEa/fo0aM7d+4c5RnHx8d/+OGHozzjzMzM48ePj74u +dAugWwB0C/9W29vblS59vK/nlW4B0C2AbtEtfOjPdt0CoFsA3aJb0C26BdAtALoFdAuAbgF0i1Gh +W3QLgG4BFIJuQbcA6BYA3QK6BUC3ALpFt6BbdAuAf6oBhaBb0C0AugVAt6BbdAuAbgF0i25BtwDo +FoDj3y3wLugWAN0C6JZjPiqOwbNdtwDoFkC36BZ0i24BdAuAbgHdAqBbAN1iVOgW3QKgWwCFoFvQ +LQC6BUC3gG4B0C2AbtEt6BbdAuCfakAh6BZ0C4BuAdAt6BbdAqBbAN2iW9AtALoFQLeAbgHQLYBu +MSp0i24B0C2AQtAt6BYA3QKgW0C3AOgWQLfoFnSLbgF0C4BuAd0CoFsAdAu6RbcA6BZAt+gWdAuA +bgHQLaBbAHQLoFvez6jgXdAtALoF0C3vxO/wDugWAN0C6Bbdgm4B0C0AugV0C4BuAXQLoFsAdAug +W0C3AOgWAN0CugVAtwC6BdAtgG4B0C2gWwB0C4BuAd0CoFsA3QK6BUC3AOgW0C0AugXQLYBuAdAt +gG4B3QKgWwB0C+gWAN0C6BbQLboF0C0AugV0C4BuAXQLoFsAdAugW0C3AOgWAN0CugVAtwC6BdAt +ALoF0C2gWwB0C4BuAd0CoFsA3QK6BUC3AOgW0C0AugXQLYBuAdAtgG4B3QKgWwB0C+gWAN0C6BZA +twC6BUC3gG4B0C0AugV0C4BuAXQL6BYA3QKgW0C3AOgWQLcAugVAtwC6BXQLgG4B0C2gWwB0C6Bb +AN0C6BYA3QK6BUC3AOZb/toB3QKgWwDdAroFQLcA6BbQLQC6BdAtgG4B0C2AbgHdAqBbAHQL6BYA +3QLoFtAtugXQLQC6BXQLgG4BdAugWwB0C6BbQLcA6BYA3QK6BUC3ALoF0C0AugXQLaBbAHQLgG4B +3QKgWwDdAroFQLcA6BbQLQC6BdAtgG4B0C2AbgHdAqBbAHQL6BYA3QLoFkC3ALoFQLeAbgHQLQC6 +BXQLgG4B/iXzLeDt6RZAtwAckd+Bt+ZvEkC3AOgW0C0AugXQLYBuAdAtAADAMfA/yDcoemRWNycA +AAAASUVORK5C" /> \ No newline at end of file diff --git a/src/osm/jp/api/HttpPOST.java b/src/osm/jp/api/HttpPOST.java index 844d7e1..f0c54dc 100644 --- a/src/osm/jp/api/HttpPOST.java +++ b/src/osm/jp/api/HttpPOST.java @@ -19,7 +19,6 @@ import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import osm.jp.coverage.busstop.DbBusstop; -import static osm.jp.coverage.busstop.DbExistBusstop.DROP; /** * Java HTTP クライアントサンプル - HttpURLConnection 版 - @@ -66,7 +65,7 @@ } // 'table.FUEL_EXIST'を新規に作る - createSt = "CREATE TABLE "+ HttpPOST.TABLE_NAME +" (idref VARCHAR(12) NOT NULL, lat DOUBLE, lon DOUBLE, score INT, PRIMARY KEY(idref));"; + createSt = "CREATE TABLE "+ HttpPOST.TABLE_NAME +" (idref VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, score INT, PRIMARY KEY(idref));"; Db.updateSQL(con, createSt); createSt = "CREATE INDEX "+ HttpPOST.TABLE_NAME +"_index ON "+ HttpPOST.TABLE_NAME +" (lat, lon);"; Db.updateSQL(con, createSt); @@ -292,6 +291,7 @@ double maxlon = -180.0D; double minlat = 90.0D; double minlon = 180.0D; + String nameStr = ""; String brandStr = ""; String fixmeStr = ""; int score = 0; @@ -318,6 +318,14 @@ if (value != null) { brandStr = value; } + value = tagnode.getValue("name:ja"); + if (value != null) { + nameStr = value; + } + value = tagnode.getValue("name"); + if (value != null) { + nameStr = value; + } value = tagnode.getValue("fixme"); if (value != null) { fixmeStr = value; @@ -340,6 +348,9 @@ double lon = (maxlon + minlon) / 2; score = 50; + if (nameStr.equals("")) { + score = 1; + } if (brandStr.equals("")) { score = 1; } @@ -348,12 +359,13 @@ } // idref と nameStr をデータベースに格納する - System.out.println("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon,score) VALUES("+ idrefStr +","+ lat +","+ lon+","+ Integer.toString(score) +");"); - try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon, score) VALUES (?,?,?,?)")) { + System.out.println("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon,score,name) VALUES("+ idrefStr +","+ lat +","+ lon+","+ Integer.toString(score) +",'"+ nameStr +"');"); + try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon,score,name) VALUES (?,?,?,?,?)")) { ps5.setString(1, idrefStr); ps5.setDouble(2, lat); ps5.setDouble(3, lon); ps5.setInt(4, score); + ps5.setString(5, nameStr); ps5.executeUpdate(); } catch (HsqlException | SQLIntegrityConstraintViolationException e) { diff --git a/src/osm/jp/coverage/busstop/Busstop.java b/src/osm/jp/coverage/busstop/Busstop.java index 9157efb..2c5b2d1 100644 --- a/src/osm/jp/coverage/busstop/Busstop.java +++ b/src/osm/jp/coverage/busstop/Busstop.java @@ -1,45 +1,29 @@ package osm.jp.coverage.busstop; import osm.jp.api.HttpPOST; -import osm.jp.api.Japan; - import javax.xml.parsers.*; import javax.xml.transform.TransformerException; -import org.w3c.dom.*; import org.xml.sax.*; import java.io.*; -import java.net.MalformedURLException; -import java.net.ProtocolException; 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 jp.co.areaweb.tools.database.*; +import osm.jp.coverage.fuel.DbFuel; public class Busstop { - - String filter = ""; - String urlStr = ""; - - public static final boolean DB_INIT = false; - // 近くのバス停を探す範囲(バス停を中心としたNEER×2m四方の領域 static final int NEER = 150; // 150m(0.15km) - static boolean update = false; // '-update'オプション postgisデータの更新を行う - static boolean noget = false; // '-noget'オプション OSM既存データのGETを行わない public static SimpleDateFormat timeStampFmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); /** * メイン - * - * java -cp .:ConvBusstop.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.ConvBusstop [option] - * OPTION: -check OSMデータ上に既存のバス停が存在するかどうかをチェックする + * OSM_EXISTのscoreを集計して,BUS_STOPのfixedをUPDATE * * @param args * @@ -52,79 +36,19 @@ * @throws ParserConfigurationException */ public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException, TransformerException { - for (String arg : args) { - if (arg.equals("-update")) { - Busstop.update = true; - } - if (arg.equals("-noget")) { - Busstop.noget = true; - } - } - - // HSQLディレクトリがなければ作る - File dbdir = new File("database"); - if (!dbdir.isDirectory()) { - dbdir.mkdir(); - } - Connection con = DatabaseTool.openDb("database"); - try { - /** - * 既存のOSMバス停を読み込む - * OSM OverPassAPI を使って、既存のOSMバス停のデータを取得して、「existing.xml」に出力する - * --> 'existing.xml' - */ - if (Busstop.update && !Busstop.noget) { - Busstop.initDb(con); - File existingFile = new File(HttpPOST.EXIST_FILE); - getJapanCapabilities(con, existingFile); - } - - /** - * 都道府県ごとのGMLディレクトリの処理 - */ - /* - int fcounter = 0; - File dir = new File("."); - File[] files = dir.listFiles(); - for (File iDir : files) { - if (checkGMLdir(iDir)) { - // GMLディレクトリを処理する - new Busstop(con, iDir); - fcounter++; - } - } - System.out.println("["+ fcounter +"]つのファイルをインポートしました。"); - */ + new Busstop(con); } finally { DatabaseTool.closeDb(con); } } - public static void getJapanCapabilities(Connection con, File oFile) throws MalformedURLException, ProtocolException, IOException, ClassNotFoundException, SQLException, ParserConfigurationException, SAXException { - for (Japan all1 : Japan.all) { - HttpPOST.getCapabilities("highway", "bus_stop", all1.minLat, all1.maxLat, all1.minLon, all1.maxLon); - readExistingFile(con); - HttpPOST.getCapabilities("highway", "disused:bus_stop", all1.minLat, all1.maxLat, all1.minLon, all1.maxLon); - readExistingFile(con); - HttpPOST.getCapabilities("amenity", "bus_station", all1.minLat, all1.maxLat, all1.minLon, all1.maxLon); - readExistingFile(con); - HttpPOST.getCapabilities("public_transport", "platform", all1.minLat, all1.maxLat, all1.minLon, all1.maxLon); - readExistingFile(con); - HttpPOST.getCapabilities("public_transport", "stop_position", all1.minLat, all1.maxLat, all1.minLon, all1.maxLon); - readExistingFile(con); - } - } - - /** - * 個別の都道府県「GMLディレクトリ」を処理 + * OSM_EXISTのscoreを集計して,BUS_STOPのfixedをUPDATE * * @param con - * @param gmldir - * @param areacode = Integer.parseInt(gmldir.getName().substring(GML_DIR_PREFIX.length(), GML_DIR_PREFIX.length()+2)); * @throws SQLException * @throws FileNotFoundException * @throws ClassNotFoundException @@ -133,336 +57,72 @@ * @throws SAXException * @throws TransformerException */ - public Busstop(Connection con, File gmldir, int areacode) throws SQLException, FileNotFoundException, ClassNotFoundException, IOException, ParserConfigurationException, SAXException, TransformerException { - BufferedWriter ow = null; - ToPostgis postgis = null; - Connection conPost = null; + public Busstop(Connection con) throws SQLException, FileNotFoundException, ClassNotFoundException, IOException, ParserConfigurationException, SAXException, TransformerException { + try ( PreparedStatement ps2 = con.prepareStatement("SELECT gmlid,lat,lon,fixed, area FROM "+ DbBusstop.TABLE_NAME +" WHERE (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?)"); + PreparedStatement ps1 = con.prepareStatement("SELECT idref,lat,lon,score FROM "+ HttpPOST.TABLE_NAME); + PreparedStatement ps3 = con.prepareStatement("UPDATE "+ DbBusstop.TABLE_NAME +" SET fixed1=? WHERE gmlid=? and area=?"); + PreparedStatement ps4 = con.prepareStatement("UPDATE "+ DbBusstop.TABLE_NAME +" SET fixed1=0"); + PreparedStatement ps5 = con.prepareStatement("UPDATE "+ DbBusstop.TABLE_NAME +" SET up=1 WHERE (fixed<>fixed1) and (up=0)" )) + { + System.out.println("UPDATE "+ DbBusstop.TABLE_NAME +" SET fixed=0"); + ps4.executeUpdate(); - File outFile = new File(gmldir, "update.sql"); - ow = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); + System.out.println("SELECT idref,lat,lon,score FROM "+ HttpPOST.TABLE_NAME); + try (ResultSet rset1 = ps1.executeQuery()) { + while (rset1.next()) { + String osmid = rset1.getString("idref"); + double lat = rset1.getDouble("lat"); + double lon = rset1.getDouble("lon"); + int score = rset1.getInt("score"); + String gmlid = null; + int area = 0; + int fixed1 = 0; - if (Busstop.update) { - conPost = DatabaseTool.openDb("postgis"); - } - - File[] files = gmldir.listFiles(); - try { - for (File iFile : files) { - /* - // 対象のファイルが「数値地図情報のGMLデータファイル」の時のみ処理を行う。 - if (!checkFile(iFile, areacode)) { - continue; - } - - //Busstop.clearDb(con); - if (!Busstop.update) { - //inputFile(con, iFile, areacode); - } - */ - if (true) { - - PreparedStatement ps1; - if (Busstop.update) { - ps1 = conPost.prepareStatement("SELECT gid,name,ST_Y(geom) lat,ST_X(geom) lon,fixed FROM t_busstop WHERE area=?"); + // 指定の緯度経度を中心とする半径150x2m四方の矩形領域 + RectArea rect = new RectArea(lat, lon, NEER); // 300m 四方 + System.out.println("SELECT gmlid,lat,lon,fixed1,area FROM "+ DbBusstop.TABLE_NAME +" WHERE (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?)"); + ps2.setDouble(1, rect.minlat); + ps2.setDouble(2, rect.maxlat); + ps2.setDouble(3, rect.minlon); + ps2.setDouble(4, rect.maxlon); + try (ResultSet rset2 = ps2.executeQuery()) { + double distance = 999999.9D; + while (rset2.next()) { + double lat2 = rset2.getDouble("lat"); + double lon2 = rset2.getDouble("lon"); + double dd = distance(lat,lat2,lon,lon2); + if (dd < distance) { + distance = dd; + gmlid = rset2.getString("gmlid"); + area = rset2.getInt("area"); + fixed1 = rset2.getInt("fixed1"); + } + } + } + if (gmlid != null) { + System.out.println("UPDATE "+ DbBusstop.TABLE_NAME +" SET fixed1="+ score +" WHERE gmlid="+ gmlid +" and area=" + area); + ps3.setInt(1, fixed1 + score); + ps3.setString(2, gmlid); + ps3.setInt(3, area); + ps3.executeUpdate(); } else { - ps1 = con.prepareStatement("SELECT idref,name,lat,lon,fixed FROM bus_stop WHERE area=?"); - } - try (PreparedStatement ps2 = con.prepareStatement("SELECT SUM(score) FROM existing_data where (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?)")) { - PreparedStatement ps3 = con.prepareStatement("UPDATE bus_stop SET fixed=? WHERE idref=?"); - PreparedStatement ps4 = con.prepareStatement("SELECT SUM(score) FROM existing_data where (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?) and (name = ?)"); - ps1.setInt(1, areacode); - ResultSet rset1 = ps1.executeQuery(); - while (rset1.next()) { - String idref = rset1.getString(1); - String name = rset1.getString("name"); - Double lat = rset1.getDouble("lat"); - Double lon = rset1.getDouble("lon"); - int fixed = rset1.getInt("fixed"); - - // 指定の緯度経度を中心とする半径150x2m四方の矩形領域 - System.out.print(idref + "("+ name + ") ...."); - RectArea rect = new RectArea(lat, lon, NEER); // 300m 四方 - ps2.setDouble(1, rect.minlat); - ps2.setDouble(2, rect.maxlat); - ps2.setDouble(3, rect.minlon); - ps2.setDouble(4, rect.maxlon); - try (ResultSet rset2 = ps2.executeQuery()) { - if (rset2.next()) { - int score = rset2.getInt(1); - if (score > 0) { - System.out.println("."+ score); - if (Busstop.update) { - if (fixed != score) { - String osm_node = "UPDATE t_busstop SET fixed="+ score +" WHERE gid="+ idref +";"; - System.out.println(osm_node); - ow.write(osm_node); - ow.newLine(); - } - } - else { - ps3.setInt(1, score); - ps3.setString(2, idref); - ps3.executeUpdate(); - } - } - else { - // 指定の緯度経度を中心とする半径150x4m四方の矩形領域 - System.out.print("***"); - rect = new RectArea(lat, lon, NEER*2); // 600m 四方 - ps4.setDouble(1, rect.minlat); - ps4.setDouble(2, rect.maxlat); - ps4.setDouble(3, rect.minlon); - ps4.setDouble(4, rect.maxlon); - ps4.setString(5, name); - try (ResultSet rset4 = ps4.executeQuery()) { - if (rset4.next()) { - score = rset4.getInt(1); - System.out.println(".."+ score); - if (score != fixed) { - if (Busstop.update) { - String osm_node = "UPDATE t_busstop SET fixed="+ score +" WHERE gid="+ idref +";"; - System.out.println(osm_node); - ow.write(osm_node); - ow.newLine(); - } - else { - ps3.setInt(1, score); - ps3.setString(2, idref); - ps3.executeUpdate(); - } - } - } - } - } - } - } - } - rset1.close(); - ps3.close(); - } - ps1.close(); - } - - // ローカルデータベース内の情報をPostGIS用の「busstop.sql」に出力する - if (!Busstop.update) { - postgis = new ToPostgis(gmldir); - postgis.outputDb(con); - postgis.close(); - } - } - } - finally { - if (conPost != null) { - DatabaseTool.closeDb(conPost); - } - ow.flush(); - ow.close(); - } - } - - static String[] shiftArgs(String[] args) { - String[] values = new String[args.length - 1]; - for (int i=1; i < args.length; i++) { - values[i - 1] = args[i]; - } - return values; - } - - public static void readExistingFile (Connection con) 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); - File existingFile = new File(HttpPOST.EXIST_FILE); - 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 = ""; - String nameStr = ""; - String fixmeStr = ""; - int score = 0; - - NamedNodeMap nodeMap = node.getAttributes(); - if (null != nodeMap) { - for (int j=0; j < nodeMap.getLength(); j++) { - switch (nodeMap.item(j).getNodeName()) { - case "id": - idrefStr = nodeMap.item(j).getNodeValue(); - break; - case "lat": - latStr = nodeMap.item(j).getNodeValue(); - break; - case "lon": - lonStr = nodeMap.item(j).getNodeValue(); - break; - default: - break; - } - } - - NodeList nodes = node.getChildNodes(); - for (int i = 0; i < nodes.getLength(); i++) { - Node node2 = nodes.item(i); - if (node2.getNodeName().equals("tag")) { - NamedNodeMap nodeMap2 = node2.getAttributes(); - if (null != nodeMap2) { - String key = null; - String value = null; - for (int j=0; j < nodeMap2.getLength(); j++) { - if (nodeMap2.item(j).getNodeName().equals("k")) { - key = nodeMap2.item(j).getNodeValue(); - } - else if (nodeMap2.item(j).getNodeName().equals("v")) { - value = nodeMap2.item(j).getNodeValue(); - } - } - - if ((key != null) && key.toLowerCase().equals("name") && (value != null)) { - nameStr = value; - } - if ((key != null) && key.toLowerCase().equals("fixme") && (value != null)) { - fixmeStr = value; - } + System.out.println("NOT FOUND! osmid="+ osmid); } } } - score = 50; - if (nameStr.equals("")) { - score = 1; - } - if (!fixmeStr.equals("")) { - score = 1; - } + System.out.println("UPDATE "+ DbFuel.TABLE_NAME +" SET up=1 WHERE (fixed<>fixed1) and (up=0)"); + ps5.executeUpdate(); - // idref と nameStr をデータベースに格納する - try (PreparedStatement ps1 = con.prepareStatement("SELECT name,score FROM existing_data WHERE idref=?")) { - ps1.setString(1, idrefStr); - ResultSet rset1 = ps1.executeQuery(); - if (rset1.next()) { - int fixed = rset1.getInt("score"); - if (fixed < score) { - System.out.println("update existing_data : [id:"+ idrefStr +"] score="+ Integer.toString(score) +" "+ nameStr); - try (PreparedStatement ps5 = con.prepareStatement("UPDATE existing_data SET score=? WHERE idref=?")) { - ps5.setInt(1, score); - ps5.setString(2, idrefStr); - ps5.executeUpdate(); - } - } - } - else { - System.out.println("import existing_data : "+ idrefStr +" ("+ latStr +","+ lonStr+")["+ Integer.toString(score) +"]"+ nameStr); - try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO existing_data (idref,lat,lon, name, score) VALUES (?,?,?,?,?)")) { - ps5.setString(1, idrefStr); - ps5.setDouble(2, Double.parseDouble(latStr)); - ps5.setDouble(3, Double.parseDouble(lonStr)); - ps5.setString(4, nameStr); - ps5.setInt(5, score); - ps5.executeUpdate(); - } - } - rset1.close(); - } } } - - /** - * - * @param conHsql - * @param conPost - * @param areacode - * @throws java.io.FileNotFoundException - * @throws java.lang.ClassNotFoundException - * @throws java.sql.SQLException - * @throws java.io.IOException - * @throws javax.xml.parsers.ParserConfigurationException - * @throws org.xml.sax.SAXException - */ - public static void updateFile (Connection conHsql, Connection conPost, int areacode) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException { - int iCounter = 0; - PreparedStatement ps2; - try (PreparedStatement ps1 = conPost.prepareStatement("SELECT gid,name,fixed,ST_X(geom) LON, ST_Y(geom) LAT FROM t_busstop WHERE area=?")) { - ps2 = conHsql.prepareStatement("INSERT INTO bus_stop (idref,name,fixed,area,lat,lon) VALUES (?,?,?,?,?,?)"); - // idref と nameStr をデータベースに格納する - ps1.setInt(1, areacode); - ResultSet rset1 = ps1.executeQuery(); - while (rset1.next()) { - iCounter++; - int idref = rset1.getInt("gid"); - String nameStr = rset1.getString("name"); - int fixed = rset1.getInt("fixed"); - double lat = rset1.getDouble(4); - double lon = rset1.getDouble(5); - - ps2.setInt(1, idref); - ps2.setString(2, nameStr); - ps2.setInt(3, fixed); - ps2.setInt(4, areacode); - ps2.setDouble(5, lon); - ps2.setDouble(6, lat); - System.out.println("INSERT INTO bus_stop (idref,name,fixed,area,lat,lon) VALUES ("+ idref +",'"+ nameStr +"',"+ fixed +","+ areacode +","+ lat +","+ lon +")"); - ps2.executeUpdate(); - } - rset1.close(); - } - ps2.close(); - - System.out.println("("+ areacode +") バス停数["+ iCounter +"]"); + + public static final double ONE_KM_LAT = 0.009013372D; + public static final double ONE_KM_LON = 0.010966404D; + static double distance(double lat1, double lon1, double lat2, double lon2) { + double dlat = Math.abs(lat1 - lat2) / ONE_KM_LAT / 1000D; + double dlon = Math.abs(lon1 - lon2) / ONE_KM_LON / 1000D; + return Math.sqrt(dlat*dlat + dlon*dlon); } - - - public static void clearDb(Connection con) throws SQLException { - try (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 +" 件のデータを削除しました。"); - } - } - - public static void initDb(Connection con) throws SQLException { - // 'table.BUS_STOP'を新規に作る - DbBusstop.create(con); - } - - - - - - - - } \ No newline at end of file