diff --git a/src/osm/jp/coverage/fuel/ToGeoJSON.java b/src/osm/jp/coverage/fuel/ToGeoJSON.java index c2a5067..8c9e05c 100644 --- a/src/osm/jp/coverage/fuel/ToGeoJSON.java +++ b/src/osm/jp/coverage/fuel/ToGeoJSON.java @@ -9,6 +9,7 @@ import java.sql.ResultSet; import jp.co.areaweb.tools.database.DatabaseTool; +import static osm.jp.coverage.postoffice.ToGeoJSON.outputDb; /** * PostGISデータをGeoJSONファイルに出力する。 @@ -31,11 +32,17 @@ slim = true; } } + Connection con = DatabaseTool.openDb("postgis"); - outputDb(con, "", new File("fuel.json"), false); - outputDb(con, "WHERE fixed=0", new File("fuel0.json"), slim); - outputDb(con, "WHERE fixed>0 and fixed<50", new File("fuel1.json"), slim); - outputDb(con, "WHERE fixed>49", new File("fuel2.json"), slim); + try { + outputDb(con, "", new File("fuel.json"), false); + outputDb(con, "WHERE fixed=0", new File("fuel0.json"), slim); + outputDb(con, "WHERE fixed>0 and fixed<50", new File("fuel1.json"), slim); + outputDb(con, "WHERE fixed>49", new File("fuel2.json"), slim); + } + finally { + DatabaseTool.closeDb(con); + } } public static void outputDb(Connection con, String whereStr, File outputFile, boolean slim) throws Exception { diff --git a/src/osm/jp/coverage/postoffice/ToGeoJSON.java b/src/osm/jp/coverage/postoffice/ToGeoJSON.java new file mode 100644 index 0000000..6d2c7ab --- /dev/null +++ b/src/osm/jp/coverage/postoffice/ToGeoJSON.java @@ -0,0 +1,93 @@ +package osm.jp.coverage.postoffice; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileOutputStream; +import java.io.OutputStreamWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +import jp.co.areaweb.tools.database.DatabaseTool; + +/** + * PostGISデータをGeoJSONファイルに出力する。 + * 出力ファイル名: "fuel.json" + * テーブル名: t_fuel + * fixed OSMの周辺に存在するかどうか、存在しない場合は0,存在する場合は1。ブランド有りは50。 + * geom PostGIS形式の位置情報(4612:) + * SELECT row_to_json(feature) FROM ( +select 'Feature' As type, ST_AsGeoJSON(ST_Transform(t_fuel.geom,4326))::json As geometry, row_to_json(( + SELECT p FROM (SELECT t_fuel.idref, t_fuel.fixed) AS p)) AS properties From t_fuel) As feature +* + * @author yuu + * + */ +public class ToGeoJSON { + public static void main (String[] argv) throws Exception { + boolean slim = false; + for (String arg : argv) { + if (arg.equals("-slim")) { + slim = true; + } + } + + Connection con = DatabaseTool.openDb("postgis"); + try { + outputDb(con, "", new File("fuel.json"), false); + outputDb(con, "WHERE fixed=0", new File("fuel0.json"), slim); + outputDb(con, "WHERE fixed>0 and fixed<50", new File("fuel1.json"), slim); + outputDb(con, "WHERE fixed>49", new File("fuel2.json"), slim); + } + finally { + DatabaseTool.closeDb(con); + } + } + + public static void outputDb(Connection con, String whereStr, File outputFile, boolean slim) throws Exception { + try (BufferedWriter ow = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"))) { + String line = "{" + + "\"type\": \"FeatureCollection\"," + + "\"features\": ["; + System.out.println(line); + ow.write(line); + ow.newLine(); + + String sql = "SELECT row_to_json(feature) FROM (" + + "select 'Feature' As type, " + + "ST_AsGeoJSON(ST_Transform(t_fuel.geom,4326))::json As geometry, row_to_json((" + + "SELECT p FROM (SELECT t_fuel.idref, t_fuel.fixed) AS p" + + ")) AS properties From t_fuel "+ whereStr +" order by area,idref) As feature"; + if (slim) { + sql = "SELECT row_to_json(feature) FROM (" + + "select 'Feature' As type, ST_AsGeoJSON(ST_Transform(t_fuel.geom,4326))::json As geometry From t_fuel "+ whereStr +" order by area,idref) As feature"; + } + PreparedStatement ps8 = con.prepareStatement(sql); + try (ResultSet rset8 = ps8.executeQuery()) { + boolean top = true; + while (rset8.next()) { + if (top) { + top = false; + } + else { + line = ","; + System.out.println(line); + ow.write(line); + ow.newLine(); + } + line = rset8.getString(1); + System.out.print(line); + ow.write(line); + } + } + System.out.println(); + ow.newLine(); + + line = "]}"; + System.out.println(line); + ow.write(line); + ow.newLine(); + ow.flush(); + } + } +}