diff --git a/src/busstop.activity.violet.html b/src/busstop.activity.violet.html index 8786175..a1eb766 100644 --- a/src/busstop.activity.violet.html +++ b/src/busstop.activity.violet.html @@ -74,7 +74,7 @@ - + 1 @@ -102,7 +102,7 @@ - + 1 @@ -130,9 +130,9 @@ - DbExist.main() -OSMからGSのノードを読み取って -HSQLDB.FUEL_EXISTテーブルに格納する + DbExistBusstop.main() +OSMからBUSSTOPのノードを読み取って +HSQLDB.BUSSTOP_EXISTテーブルに格納する @@ -144,7 +144,7 @@ - HSQL.DB.FUEL_EXIST + HSQL.DB.BUSSTOP_EXIST 255 @@ -176,20 +176,20 @@ - + 1 - 国土数値情報:燃料給油所 + 国土数値情報:バス停留所 - + 1 @@ -199,279 +199,265 @@ OpenStreatMap node: amenity=fuel - - - - - - - 1 - - - - - - - - - 1 - - - - - - - - - 1 - - - - - Fuel.main() -FUEL_EXISTのscoreを集計して -FUELのfixedをUPDATE - - - - - - - 1 - - - - - update (fixed) - - - - - - - 1 - - - - - - - - - 1 - - - - - POSTGIS.t_busstop - - - - - - - - 1 - - - - - - - - - 1 - - - - - - - - - 1 - - - - - ToPostgis.main() -HSQLDB.FUELの結果を -POSTGIS.FUELへ反映させる - - - - - - - 1 - - - - - Insert or Update - - - - - - - 1 - - - - - - - - - 1 - - 255 - 255 - 255 - 255 - - - 0 - 0 - 0 - 255 - - - - - - - - 1 - - 255 - 255 - 255 - 255 - - - 0 - 0 - 0 - 255 - - - - - - - - 1 - - - - - ToCartoCSV.main() - - - - - - - - 1 - - - - - - - - - 1 - - - - - t_fuel.csv - - + 255 228 181 255 - - - - + + + + 1 - - - + + + + + + + + + 1 + + + + + + + + + 1 + + + + + Fuel.main() +FUEL_EXISTのscoreを集計して +FUELのfixedをUPDATE + + + + + + + 1 + + + + + update (fixed) + + + + + + + 1 + + + - - - - + + + + 1 - + + + + + POSTGIS.t_busstop + + + + + + + + 1 + + + + + + + + + 1 + + + + + + + + + 1 + + + + + ToPostgis.main() +HSQLDB.FUELの結果を +POSTGIS.FUELへ反映させる + + + + + + + 1 + + + + + Insert or Update + + + + + + + 1 + + + + + + + + + 1 + 255 255 255 255 - + 0 0 0 255 - - + + + + + + + 1 + + + + + ToCartoCSV.main() + + + + + + + + 1 + + + + + + + + + 1 + + + + + t_fuel.csv + + + 255 + 228 + 181 + 255 + + + + + + + 1 + + + + + + + + + 1 + + 255 + 255 + 255 + 255 + + + 0 + 0 + 0 + 255 + + + Coverage (JSON) Coverage (CSV) - - - - + + + + 1 - + 255 255 255 255 - + 0 0 0 255 - + - - - - + + + + 1 - - - + + + - - - - + + + + 1 - - - - + + + + Coverage.json Coverage.csv - + 255 228 181 @@ -479,14 +465,14 @@ - - + + - - - - + + + + 1 @@ -495,13 +481,28 @@ - + - - + + + + + 1 + + + + + + + + + + + + - + 1 @@ -511,57 +512,42 @@ - - - - + + + + - + 1 - + - - - - + + + + - + 1 - + - - - - - - - 1 - - - - - - - - - - - - + + + + 1 @@ -570,13 +556,13 @@ - + - - - - + + + + 1 @@ -585,13 +571,13 @@ - + - - - - + + + + 1 @@ -600,22 +586,37 @@ - + - - + + + + + 1 + + + + + + - + 1 - + + + + + + + - - - - + + + + - + 1 @@ -624,37 +625,22 @@ - - - - - - - - 1 - - - - - - - - + - - - - - + + + + + 1 - - - - - - - + + + + + + + 1 @@ -663,22 +649,37 @@ - + - - - - - + + + + + 1 + + + + + + + + 1 + + + + + + + - - - - + + + + - + 1 @@ -688,12 +689,12 @@ - - - - + + + + - + 1 @@ -703,27 +704,27 @@ - - - - + + + + - + 1 - + - - - - + + + + - + 1 @@ -733,27 +734,12 @@ - - - - + + + + - - 1 - - - - - - - - - - - - - - + 1 @@ -762,13 +748,13 @@ - - + + - - - - + + + + 1 @@ -777,13 +763,28 @@ + + + + + + + + 1 + + + + + + + - - - - + + + + - + 1 @@ -793,12 +794,12 @@ - - - - + + + + - + 1 @@ -807,37 +808,22 @@ - - - - - + + + + + - - 1 - - - - - - - - - - - - - - + 1 - - - - - - - + + + + + + + 1 @@ -846,13 +832,28 @@ + + + + + + + + 1 + + + + + + + - - - - + + + + - + 1 @@ -861,971 +862,937 @@ - - - - - + + + + + - - 1 - - - - - - - - - - - - - - + 1 - + - - - - + + + + 1 ]]>

- 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 46e87e1..0827313 100644 --- a/src/db.busstop.class.violet.html +++ b/src/db.busstop.class.violet.html @@ -137,7 +137,7 @@ - + 1 @@ -154,13 +154,14 @@
- table.FUEL_EXIST + table.BUSSTOP_EXIST - + idref: VARCHAR(12) NOT NULL -- lat: DOUBLE -- lon: DOUBLE -- score: INT + * osmid: VARCHAR(12) NOT NULL ++ name: VARCHAR(128) +* lat: DOUBLE +* lon: DOUBLE ++ score: INT @@ -189,16 +190,14 @@ table.bus_stop - + ksjid: VARCHAR(12) NOT NULL - name: VARCHAR(128) - kana: VARCHAR(128) - lat: DOUBLE - lon: DOUBLE - fixed: INT - fixed1: INT - area: INT - ifile: VARCHAR(128) - up: INT + * gmlid: VARCHAR(12) NOT NULL ++ name: VARCHAR(128) ++ lat: DOUBLE ++ lon: DOUBLE ++ fixed: INT +* area: INT ++ ifile: VARCHAR(128) ++ up: INT @@ -434,833 +433,821 @@ ]]>

- embedded diagram image +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 +DHt8i7BYLLIZIW6Lg1se4h7pzp07H3zwgXqrt9RLfX29PJf7n5qfvRndwsS0zbplde0I6tDpQreA +bgH+Z7yohunPPPNMsM9vMX9mdmkDvZLFxUWr1boa5Cg7M/vA+fn56OhoNW+3231Ooe52u2WhmW5R +M9PT09JR+o1nvN6yafdIf/zjH1taWrKyshwOx69//evVtfeSsTejW5iYtmu3hE2XTd0tc3NzU1NT +paWl+pDTe/Kcyol6GCXwTA9/CQkJ8hdy+/btsBVh5vUWY7fIWFMdTLLhbmltbTUe39Lc3Gz86dGj +R/VPZRek9z8qUXTwcHzL1t0jyZ+Q+nM6fPjwnj175GlRrjs0NMTejG5hYtpm3RI6XTZ1t4yMjOTl +5SUmJtbX15t/Tq2urjaz8lVO1MMoAVjPHmld3SJ1UVRUpN4nJlFRVla2sW6Zm5traWmJjY3VO6Kp +qamYmBjZd6ndlMzIt/qnNTU1+/fvV/8dI19lvra21medi4uLsptKS0tjN7UV90g3b96U5ya57r// ++7/LFX/6058a/38NdAsT01bvlhDpsqm7ZXh42OVyJScn6+fdDfw/ZdgLcKIeRgnAunYaZi7p8XhK +S0vVacTLy8slFVbDnY3dd9e8xm63yw5Kn4VcGR8fl32jWrnMqFO9a7Kjl86JjIyUr8advl5nVFRU +fn7+zMyMz3L9CjAvC2/+PZK+rvwBfOYzn4mLizt8+DB3Kd3CxLQ9uiVYumzqbnG73ep9Yvr51edp +fmJiIjMzU5654+Pj1fnv/Z99ww5BOFEPowTgXnUL8IC7RV13ZGREHQDzxz/+MTs7+/jx4zLDPUy3 +MDFtoW4JxviRlFvyuHz90/7+/p6eHpkZHBx0Op0mRxicqIdRAt0CugXbqVu05eXl3t7e0tLSPXv2 +qLcSyJI7d+5wb9MtTExbtGdmZ2e3Sbd4vd7Ozs6SkpLCwsLQb7oIsXJO1MMoAaBbsD26xUgdyn/x +4sVdu3YdOHCgpaXl448/5m6nW5iYtla3yF5Op8vW7paMjIz29nb5ZZaWljbcLZyoh1ECQLdg+3WL +5vF43n//fXku++CDD1bX3jX+61//2udk36BbmJg2bbfodNna3WK1WsfGxlZWVpqamvTCiIgIfYb7 +0FfnRD2MEoB72y19fX1xcXEWi0Wd8el+7wNlJicnx/9HAd8izOO4Y7vF/680Ozv7sccey8rK4lxk +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" /> \ No newline at end of file diff --git a/src/db.fuel.class.violet.html b/src/db.fuel.class.violet.html index c472b3d..d468283 100644 --- a/src/db.fuel.class.violet.html +++ b/src/db.fuel.class.violet.html @@ -151,7 +151,7 @@
- table.FUEL_EXIST + table.OSM_EXIST + idref: VARCHAR(12) NOT NULL @@ -369,627 +369,629 @@

embedded diagram image +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" /> \ No newline at end of file diff --git a/src/osm/jp/api/HttpPOST.java b/src/osm/jp/api/HttpPOST.java index 725c0ed..c2eaec3 100644 --- a/src/osm/jp/api/HttpPOST.java +++ b/src/osm/jp/api/HttpPOST.java @@ -5,6 +5,19 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import java.io.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.SQLIntegrityConstraintViolationException; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import org.hsqldb.HsqlException; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; /** * Java HTTP クライアントサンプル - HttpURLConnection 版 - @@ -16,6 +29,7 @@ //public static String host = "http://api.openstreetmap.org"; public static String host = "http://overpass-api.de"; public static final String EXIST_FILE = "exist.osm.xml"; + public static final String TABLE_NAME = "OSM_EXIST"; public static void main(String[] args) throws MalformedURLException, ProtocolException, IOException { double minlat = 35.13d; @@ -29,6 +43,27 @@ getCapabilities("public_transport", "stop_position", minlat, maxlat, minlon, maxlon, "node"); getCapabilities("amenity", "fuel", minlat, maxlat, minlon, maxlon, "way"); } + + /** + * 'HSQLDB.table.OSM_EXIST'を新規に作る + * 'HSQLDB.table.AREA_NODE'を新規に作る + * 既にテーブルが存在する時にはERROR + * @param con + * @throws SQLException + */ + public static void create(Connection con) throws SQLException { + String createSt; + + // 'table.FUEL_EXIST'を新規に作る + createSt = "CREATE TABLE "+ HttpPOST.TABLE_NAME +" (idref VARCHAR(12) NOT NULL, 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); + + // 'table.AREA_NODE'を新規に作る + createSt = "CREATE TABLE AREA_NODE (idref VARCHAR(12) NOT NULL, pid VARCHAR(12), lat DOUBLE, lon DOUBLE);"; + Db.updateSQL(con, createSt); + } public static void getCapabilities(String key, String value, double minLat, double maxLat, double minLon, double maxLon) throws MalformedURLException, ProtocolException, IOException { getCapabilities(key, value, minLat, maxLat, minLon, maxLon, "node"); @@ -129,4 +164,271 @@ System.out.println("\t" + text); pw.print(text); } + + public static void readExistingFile (Connection con) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException { + int iCounter = 0; + + DocumentBuilderFactory factory; + DocumentBuilder builder; + + iCounter = 0; + factory = DocumentBuilderFactory.newInstance(); + builder = factory.newDocumentBuilder(); + factory.setIgnoringElementContentWhitespace(true); + factory.setIgnoringComments(true); + factory.setValidating(true); + + Node root = builder.parse(new File(HttpPOST.EXIST_FILE)); + + readAreaNodes(con, root); + iCounter += readExistingNodes(con, root); + System.out.println("既存ノード数["+ iCounter +"]"); + } + + static int readAreaNodes(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); + switch (node2.getNodeName()) { + case "node": + iCounter++; + importAreaNode(con, node2); + break; + default: + iCounter += readAreaNodes(con, node2); + break; + } + } + return iCounter; + } + + static void importAreaNode(Connection con, Node node) throws IOException, SQLException { + String idrefStr = ""; + String latStr = ""; + String lonStr = ""; + + NodeList nodes = node.getChildNodes(); + if (nodes.getLength() > 0) { + return; + } + + NamedNodeMap nodeMap = node.getAttributes(); + if (nodeMap != null) { + 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; + } + } + + // idref と brandStr をデータベースに格納する + System.out.println("insert into AREA_NODE(idref,lat,lon) values("+ idrefStr +","+ latStr +","+ lonStr+")"); + try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO AREA_NODE (idref,lat,lon) VALUES (?,?,?)")) { + ps5.setString(1, idrefStr); + ps5.setDouble(2, Double.parseDouble(latStr)); + ps5.setDouble(3, Double.parseDouble(lonStr)); + ps5.executeUpdate(); + } + } + } + + 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); + switch (node2.getNodeName()) { + case "node": + iCounter++; + importExistingNode(con, node2); + break; + case "way": + iCounter++; + importExistingArea(con, node2); + break; + default: + iCounter += readExistingNodes(con, node2); + break; + } + } + return iCounter; + } + + static void importExistingArea(Connection con, Node node) throws IOException, SQLException { + String idrefStr = ""; + double maxlat = -90.0D; + double maxlon = -180.0D; + double minlat = 90.0D; + double minlon = 180.0D; + String brandStr = ""; + String fixmeStr = ""; + int score = 0; + + NamedNodeMap nodeMap = node.getAttributes(); + if (nodeMap != null) { + for (int j=0; j < nodeMap.getLength(); j++) { + switch (nodeMap.item(j).getNodeName()) { + case "id": + idrefStr = 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")) { + OsmnodeTag tagnode = new OsmnodeTag(node2); + String value = null; + value = tagnode.getValue("brand"); + if (value != null) { + brandStr = value; + } + value = tagnode.getValue("fixme"); + if (value != null) { + fixmeStr = value; + } + } + else if (node2.getNodeName().equals("nd")) { + OsmnodeNd ndnode = new OsmnodeNd(node2); + String ref = ndnode.getRef(); + Position pos = getNdPosition(con, ref); + if (pos != null) { + minlat = (pos.lat < minlat ? pos.lat : minlat); + minlon = (pos.lon < minlon ? pos.lon : minlon); + maxlat = (pos.lat > maxlat ? pos.lat : maxlat); + maxlon = (pos.lon > maxlon ? pos.lon : maxlon); + } + } + } + if ((maxlat != -90.0D) && (maxlon != -180.0D) && (minlon != 180.0D) && (minlat != 90.0D)) { + double lat = (maxlat + minlat) / 2; + double lon = (maxlon + minlon) / 2; + + score = 50; + if (brandStr.equals("")) { + score = 1; + } + if (!fixmeStr.equals("")) { + score = 1; + } + + // 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 (?,?,?,?)")) { + ps5.setString(1, idrefStr); + ps5.setDouble(2, lat); + ps5.setDouble(3, lon); + ps5.setInt(4, score); + ps5.executeUpdate(); + } + catch (HsqlException | SQLIntegrityConstraintViolationException e) { + // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST + // [HsqlException]は、無視する + // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST + // [SQLIntegrityConstraintViolationException]は、無視する + } + } + } + } + + + static void importExistingNode(Connection con, Node node) throws IOException, SQLException { + String idrefStr = ""; + String latStr = ""; + String lonStr = ""; + String brandStr = ""; + String fixmeStr = ""; + int score = 0; + + NamedNodeMap nodeMap = node.getAttributes(); + if (nodeMap != null) { + 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(); + if (nodes.getLength() == 0) { + return; + } + for (int i = 0; i < nodes.getLength(); i++) { + Node node2 = nodes.item(i); + if (node2.getNodeName().equals("tag")) { + OsmnodeTag tagnode = new OsmnodeTag(node2); + String value = null; + value = tagnode.getValue("brand"); + if (value != null) { + brandStr = value; + } + value = tagnode.getValue("fixme"); + if (value != null) { + fixmeStr = value; + } + } + } + + score = 50; + if (brandStr.equals("")) { + score = 1; + } + if (!fixmeStr.equals("")) { + score = 1; + } + + // idref と brandStr をデータベースに格納する + System.out.println("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon, score) VALUES ("+ idrefStr +","+ latStr +","+ lonStr+","+ Integer.toString(score) +")N"); + try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon, score) VALUES (?,?,?,?)")) { + ps5.setString(1, idrefStr); + ps5.setDouble(2, Double.parseDouble(latStr)); + ps5.setDouble(3, Double.parseDouble(lonStr)); + ps5.setInt(4, score); + ps5.executeUpdate(); + } + catch (HsqlException | SQLIntegrityConstraintViolationException e) { + // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST + // [HsqlException]は、無視する + // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST + // [SQLIntegrityConstraintViolationException]は、無視する + } + } + } + + public static Position getNdPosition(Connection con, String idref) throws SQLException { + PreparedStatement ps8 = con.prepareStatement("SELECT lat,lon FROM AREA_NODE where idref=?"); + ps8.setString(1, idref); + try (ResultSet rset8 = ps8.executeQuery()) { + while (rset8.next()) { + Double lat = rset8.getDouble(1); + Double lon = rset8.getDouble(2); + return new Position(lat,lon); + } + } + return null; + } } diff --git a/src/osm/jp/coverage/busstop/DbExistBusstop.java b/src/osm/jp/coverage/busstop/DbExistBusstop.java new file mode 100644 index 0000000..0c9f915 --- /dev/null +++ b/src/osm/jp/coverage/busstop/DbExistBusstop.java @@ -0,0 +1,519 @@ +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 jp.co.areaweb.tools.database.*; + +public class DbExistBusstop { + + String filter = ""; + String urlStr = ""; + + public static final boolean DB_INIT = false; + public static final String TABLE_NAME = "BUSSTOP_EXIST"; + public static boolean DROP = 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'"); + + /** + * 既存のOSMバス停を読み込む + * OSM OverPassAPI を使って、既存のOSMバス停のデータを取得して、 + * 「HSQLDB.BUSSTOP_EXIST」にSTOREする + */ + /** + * メイン + * + * java -cp .:osmCoverage.jar:hayashi_0225.jar:hsqldb_2.2.9.jar osm.jp.coverage.busstop.DbExistBusstop + * + * @param args + * + * @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 + { + for (String arg : args) { + if (arg.toUpperCase().equals("-DROP")) { + DROP = true; + } + } + + Connection conHsql = null; + try { + conHsql = DatabaseTool.openDb("database"); + if (DROP) { + DbBusstop.drop(conHsql, TABLE_NAME); + } + create(conHsql); + try (PreparedStatement ps = conHsql.prepareStatement("DELETE FROM "+ TABLE_NAME)) { + ps.executeUpdate(); + } + + /** + * 既存のOSMバス停を読み込む + * OSM OverPassAPI を使って、既存のOSMバス停のデータを取得して、 + * 「HSQLDB.BUSSTOP_EXIST」にSTOREする + */ + getJapanCapabilities(conHsql); + + /** + * 既存のOSMバス停を読み込む + * OSM OverPassAPI を使って、既存のOSMバス停のデータを取得して、 + * 「HSQLDB.BUSSTOP_EXIST」にSTOREする + */ + /* + if (DbExistBusstop.update && !DbExistBusstop.noget) { + DbExistBusstop.initDb(conHsql); + File existingFile = new File(HttpPOST.EXIST_FILE); + getJapanCapabilities(conHsql, existingFile); + } + + */ + } + finally { + if (conHsql != null) { + DatabaseTool.closeDb(conHsql); + } + } + } + + /** + * + *
{@code 
+     * 
+     *  (
+     *    node[highway=bus_stop](35.42,139.39,35.45,139.42);
+     *    node[highway="disused:bus_stop"](35.42,139.39,35.45,139.42);
+     *    node[public_transport=platform](35.42,139.39,35.45,139.42);
+     *    node[public_transport=stop_position](35.42,139.39,35.45,139.42);
+     *    node[amenity=bus_station](35.42,139.39,35.45,139.42);
+     *    (way[amenity=bus_station](35.42,139.39,35.45,139.42);>;);
+     *  );
+     *  out;
+     * 
+     * }
+ * + * @param conHsql + * @throws MalformedURLException + * @throws ProtocolException + * @throws IOException + * @throws ClassNotFoundException + * @throws SQLException + * @throws ParserConfigurationException + * @throws SAXException + */ + public static void getJapanCapabilities(Connection conHsql) throws MalformedURLException, ProtocolException, IOException, ClassNotFoundException, SQLException, ParserConfigurationException, SAXException { + for (Japan area : Japan.all) { + StringBuilder queryText = new StringBuilder(); + queryText.append("("); + queryText.append(" node[highway=bus_stop]("+ area.getSWNE() +");"); + queryText.append(" node[highway=\"disused:bus_stop\"]("+ area.getSWNE() +");"); + queryText.append(" node[public_transport=platform]("+ area.getSWNE() +");"); + queryText.append(" node[public_transport=stop_position]("+ area.getSWNE() +");"); + queryText.append(" node[amenity=bus_station]("+ area.getSWNE() +");"); + queryText.append(" (way[amenity=bus_station]("+ area.getSWNE() +");>;);"); + queryText.append(");"); + queryText.append("out;"); + HttpPOST.getQuery(queryText.toString()); + readExistingFile(conHsql); + } + } + /* + 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ディレクトリ」を処理 + * + * @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 + * @throws IOException + * @throws ParserConfigurationException + * @throws SAXException + * @throws TransformerException + */ + public DbExistBusstop(Connection con, File gmldir, int areacode) throws SQLException, FileNotFoundException, ClassNotFoundException, IOException, ParserConfigurationException, SAXException, TransformerException { + BufferedWriter ow = null; + ToPostgis postgis = null; + Connection conPost = null; + + File outFile = new File(gmldir, "update.sql"); + ow = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); + + if (DbExistBusstop.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 (DbExistBusstop.update) { + ps1 = conPost.prepareStatement("SELECT gid,name,ST_Y(geom) lat,ST_X(geom) lon,fixed FROM t_busstop WHERE area=?"); + } + 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 (DbExistBusstop.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 (DbExistBusstop.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 (!DbExistBusstop.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; + } + } + } + } + + score = 50; + if (nameStr.equals("")) { + score = 1; + } + if (!fixmeStr.equals("")) { + score = 1; + } + + // 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 +"]"); + } + + /** + * 'table.BUSSTOP_EXIST'を新規に作る + * @param conHsql + * @throws SQLException + */ + public static void create(Connection conHsql) throws SQLException { + String createSt = "CREATE TABLE BUSSTOP_EXIST (osmid VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, score INT, CONSTRAINT existing_pk PRIMARY KEY(osmid, lat, lon));"; + DbBusstop.create(conHsql, createSt); + } + + 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 diff --git a/src/osm/jp/coverage/fuel/DbExist.java b/src/osm/jp/coverage/fuel/DbExist.java index c9efcd9..fbc25e2 100644 --- a/src/osm/jp/coverage/fuel/DbExist.java +++ b/src/osm/jp/coverage/fuel/DbExist.java @@ -7,26 +7,14 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.sql.SQLIntegrityConstraintViolationException; -import javax.xml.parsers.DocumentBuilder; -import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import jp.co.areaweb.tools.database.*; -import org.hsqldb.HsqlException; -import org.w3c.dom.NamedNodeMap; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import osm.jp.api.Db; import osm.jp.api.HttpPOST; import osm.jp.api.Japan; -import osm.jp.api.OsmnodeNd; -import osm.jp.api.OsmnodeTag; -import osm.jp.api.Position; public class DbExist { - public static final String TABLE_NAME = "FUEL_EXIST"; /** メイン * @param args @@ -42,7 +30,7 @@ try { // DB.tableを作成 con = DatabaseTool.openDb("database"); - create(con); + HttpPOST.create(con); /** * 既存のOSMガソリンスタンドを読み込む @@ -104,323 +92,11 @@ queryText.append(" (way[amenity=fuel]("+ area.getSWNE() +");>;);"); queryText.append(");"); queryText.append("out;"); - /* - queryText.append(""); - queryText.append(""); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(" "); - queryText.append(""); - queryText.append(""); - queryText.append(""); - */ HttpPOST.getQuery(queryText.toString()); - readExistingFile(con); + HttpPOST.readExistingFile(con); } } - public static void readExistingFile (Connection con) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException { - int iCounter = 0; - - DocumentBuilderFactory factory; - DocumentBuilder builder; - - iCounter = 0; - factory = DocumentBuilderFactory.newInstance(); - builder = factory.newDocumentBuilder(); - factory.setIgnoringElementContentWhitespace(true); - factory.setIgnoringComments(true); - factory.setValidating(true); - - Node root = builder.parse(new File(HttpPOST.EXIST_FILE)); - - readAreaNodes(con, root); - iCounter += readExistingNodes(con, root); - System.out.println("既存ノード数["+ iCounter +"]"); - } - - static int readAreaNodes(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); - switch (node2.getNodeName()) { - case "node": - iCounter++; - importAreaNode(con, node2); - break; - default: - iCounter += readAreaNodes(con, node2); - break; - } - } - return iCounter; - } - - static void importAreaNode(Connection con, Node node) throws IOException, SQLException { - String idrefStr = ""; - String latStr = ""; - String lonStr = ""; - - NodeList nodes = node.getChildNodes(); - if (nodes.getLength() > 0) { - return; - } - - NamedNodeMap nodeMap = node.getAttributes(); - if (nodeMap != null) { - 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; - } - } - - // idref と brandStr をデータベースに格納する - System.out.println("insert into AREA_NODE(idref,lat,lon) values("+ idrefStr +","+ latStr +","+ lonStr+")"); - try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO AREA_NODE (idref,lat,lon) VALUES (?,?,?)")) { - ps5.setString(1, idrefStr); - ps5.setDouble(2, Double.parseDouble(latStr)); - ps5.setDouble(3, Double.parseDouble(lonStr)); - ps5.executeUpdate(); - } - } - } - - 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); - switch (node2.getNodeName()) { - case "node": - iCounter++; - importExistingNode(con, node2); - break; - case "way": - iCounter++; - importExistingArea(con, node2); - break; - default: - iCounter += readExistingNodes(con, node2); - break; - } - } - return iCounter; - } - - static void importExistingArea(Connection con, Node node) throws IOException, SQLException { - String idrefStr = ""; - double maxlat = -90.0D; - double maxlon = -180.0D; - double minlat = 90.0D; - double minlon = 180.0D; - String brandStr = ""; - String fixmeStr = ""; - int score = 0; - - NamedNodeMap nodeMap = node.getAttributes(); - if (nodeMap != null) { - for (int j=0; j < nodeMap.getLength(); j++) { - switch (nodeMap.item(j).getNodeName()) { - case "id": - idrefStr = 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")) { - OsmnodeTag tagnode = new OsmnodeTag(node2); - String value = null; - value = tagnode.getValue("brand"); - if (value != null) { - brandStr = value; - } - value = tagnode.getValue("fixme"); - if (value != null) { - fixmeStr = value; - } - } - else if (node2.getNodeName().equals("nd")) { - OsmnodeNd ndnode = new OsmnodeNd(node2); - String ref = ndnode.getRef(); - Position pos = getNdPosition(con, ref); - if (pos != null) { - minlat = (pos.lat < minlat ? pos.lat : minlat); - minlon = (pos.lon < minlon ? pos.lon : minlon); - maxlat = (pos.lat > maxlat ? pos.lat : maxlat); - maxlon = (pos.lon > maxlon ? pos.lon : maxlon); - } - } - } - if ((maxlat != -90.0D) && (maxlon != -180.0D) && (minlon != 180.0D) && (minlat != 90.0D)) { - double lat = (maxlat + minlat) / 2; - double lon = (maxlon + minlon) / 2; - - score = 50; - if (brandStr.equals("")) { - score = 1; - } - if (!fixmeStr.equals("")) { - score = 1; - } - - // idref と nameStr をデータベースに格納する - System.out.println("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon,score) VALUES("+ idrefStr +","+ lat +","+ lon+","+ Integer.toString(score) +")A"); - try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon, score) VALUES (?,?,?,?)")) { - ps5.setString(1, idrefStr); - ps5.setDouble(2, lat); - ps5.setDouble(3, lon); - ps5.setInt(4, score); - ps5.executeUpdate(); - } - catch (HsqlException | SQLIntegrityConstraintViolationException e) { - // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST - // [HsqlException]は、無視する - // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST - // [SQLIntegrityConstraintViolationException]は、無視する - } - } - } - } - - - static void importExistingNode(Connection con, Node node) throws IOException, SQLException { - String idrefStr = ""; - String latStr = ""; - String lonStr = ""; - String brandStr = ""; - String fixmeStr = ""; - int score = 0; - - NamedNodeMap nodeMap = node.getAttributes(); - if (nodeMap != null) { - 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(); - if (nodes.getLength() == 0) { - return; - } - for (int i = 0; i < nodes.getLength(); i++) { - Node node2 = nodes.item(i); - if (node2.getNodeName().equals("tag")) { - OsmnodeTag tagnode = new OsmnodeTag(node2); - String value = null; - value = tagnode.getValue("brand"); - if (value != null) { - brandStr = value; - } - value = tagnode.getValue("fixme"); - if (value != null) { - fixmeStr = value; - } - } - } - - score = 50; - if (brandStr.equals("")) { - score = 1; - } - if (!fixmeStr.equals("")) { - score = 1; - } - - // idref と brandStr をデータベースに格納する - System.out.println("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon, score) VALUES ("+ idrefStr +","+ latStr +","+ lonStr+","+ Integer.toString(score) +")N"); - try (PreparedStatement ps5 = con.prepareStatement("INSERT INTO "+ TABLE_NAME +" (idref,lat,lon, score) VALUES (?,?,?,?)")) { - ps5.setString(1, idrefStr); - ps5.setDouble(2, Double.parseDouble(latStr)); - ps5.setDouble(3, Double.parseDouble(lonStr)); - ps5.setInt(4, score); - ps5.executeUpdate(); - } - catch (HsqlException | SQLIntegrityConstraintViolationException e) { - // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST - // [HsqlException]は、無視する - // integrity constraint violation: unique constraint or index violation; SYS_PK_10069 table: FUEL_EXIST - // [SQLIntegrityConstraintViolationException]は、無視する - } - } - } - - public static Position getNdPosition(Connection con, String idref) throws SQLException { - PreparedStatement ps8 = con.prepareStatement("SELECT lat,lon FROM AREA_NODE where idref=?"); - ps8.setString(1, idref); - try (ResultSet rset8 = ps8.executeQuery()) { - while (rset8.next()) { - Double lat = rset8.getDouble(1); - Double lon = rset8.getDouble(2); - return new Position(lat,lon); - } - } - return null; - } - - /** - * 'HSQLDB.table.FUEL_EXIST'を新規に作る - * 'HSQLDB.table.AREA_NODE'を新規に作る - * 既にテーブルが存在する時にはERROR - * @param con - * @throws SQLException - */ - public static void create(Connection con) throws SQLException { - String createSt; - - // 'table.FUEL_EXIST'を新規に作る - createSt = "CREATE TABLE "+ TABLE_NAME +" (idref VARCHAR(12) NOT NULL, lat DOUBLE, lon DOUBLE, score INT, PRIMARY KEY(idref));"; - Db.updateSQL(con, createSt); - createSt = "CREATE INDEX "+ TABLE_NAME +"_index ON "+ TABLE_NAME +" (lat, lon);"; - Db.updateSQL(con, createSt); - - // 'table.AREA_NODE'を新規に作る - createSt = "CREATE TABLE AREA_NODE (idref VARCHAR(12) NOT NULL, pid VARCHAR(12), lat DOUBLE, lon DOUBLE);"; - Db.updateSQL(con, createSt); - - /* - drop(con, "coverage"); - createSt = "CREATE TABLE coverage (area INT, name VARCHAR(128), denominator BIGINT, lv1 BIGINT, lv2 BIGINT, lv3 BIGINT);"; - Db.updateSQL(con, createSt); - */ - } - /** * 'table.FUEL'の内容をCSV形式にして標準出力に出力する * @param con @@ -428,9 +104,9 @@ */ public static void export(Connection con) throws SQLException { String header = "idref,lat,lon,score"; - System.out.println("TABLE: "+ TABLE_NAME); + System.out.println("TABLE: "+ HttpPOST.TABLE_NAME); System.out.println(header); - PreparedStatement ps8 = con.prepareStatement("SELECT idref,lat,lon,score FROM "+ TABLE_NAME); + PreparedStatement ps8 = con.prepareStatement("SELECT idref,lat,lon,score FROM "+ HttpPOST.TABLE_NAME); try (ResultSet rset8 = ps8.executeQuery()) { while (rset8.next()) { String idcode = rset8.getString(1); diff --git a/src/osm/jp/coverage/fuel/Fuel.java b/src/osm/jp/coverage/fuel/Fuel.java index 084d9ba..5045b3e 100644 --- a/src/osm/jp/coverage/fuel/Fuel.java +++ b/src/osm/jp/coverage/fuel/Fuel.java @@ -13,6 +13,7 @@ import java.sql.SQLException; import java.text.SimpleDateFormat; import jp.co.areaweb.tools.database.*; +import osm.jp.api.HttpPOST; public class Fuel { @@ -73,7 +74,7 @@ */ public Fuel(Connection con) throws SQLException, FileNotFoundException, ClassNotFoundException, IOException, ParserConfigurationException, SAXException, TransformerException { try ( PreparedStatement ps2 = con.prepareStatement("SELECT idref,lat,lon,fixed, area FROM "+ DbFuel.TABLE_NAME +" WHERE (lat > ?) and (lat < ?) and (lon > ?) and (lon < ?) and (fixed1=0)"); - PreparedStatement ps1 = con.prepareStatement("SELECT idref,lat,lon,score FROM "+ DbExist.TABLE_NAME); + PreparedStatement ps1 = con.prepareStatement("SELECT idref,lat,lon,score FROM "+ HttpPOST.TABLE_NAME); PreparedStatement ps3 = con.prepareStatement("UPDATE "+ DbFuel.TABLE_NAME +" SET fixed1=? WHERE idref=? and area=?"); PreparedStatement ps4 = con.prepareStatement("UPDATE "+ DbFuel.TABLE_NAME +" SET fixed1=0"); PreparedStatement ps5 = con.prepareStatement("UPDATE "+ DbFuel.TABLE_NAME +" SET up=1 WHERE (fixed<>fixed1) and (up=0)" )) diff --git a/src/t_BUSSTOP.sql b/src/t_BUSSTOP.sql index aefa6c4..c8ba436 100644 --- a/src/t_BUSSTOP.sql +++ b/src/t_BUSSTOP.sql @@ -42,13 +42,13 @@ up INT, CONSTRAINT bus_stop_pk PRIMARY KEY(gmlid,area)); -CREATE TABLE existing_data ( - idref VARCHAR(12) NOT NULL, +CREATE TABLE OSM_EXIST ( + osmid VARCHAR(12) NOT NULL, name VARCHAR(128), lat DOUBLE, lon DOUBLE, score INT, - CONSTRAINT existing_pk PRIMARY KEY(idref, lat, lon)); + CONSTRAINT existing_pk PRIMARY KEY(osmid, lat, lon)); CREATE TABLE coverage ( area INT,