package osm.jp.coverage.busstop;
import osm.jp.api.HttpPOST;
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 jp.co.areaweb.tools.database.*;
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 nocheck = false;
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: -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")) {
Busstop.nocheck = false;
index++;
}
else if (args[index].equals("-nocheck")) {
Busstop.nocheck = true;
index++;
}
}
// HSQLディレクトリがなければ作る
File dbdir = new File("database");
if (!dbdir.isDirectory()) {
dbdir.mkdir();
}
Connection con = DatabaseTool.openDb("database");
Busstop.initDb(con);
try {
/**
* 都道府県ごとの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 +"]つのファイルをインポートしました。");
}
finally {
DatabaseTool.closeDb(con);
}
}
/**
* 個別の都道府県「GMLディレクトリ」を処理
*
* @param con
* @param gmldir
* @throws SQLException
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IOException
* @throws ParserConfigurationException
* @throws SAXException
* @throws TransformerException
*/
public Busstop(Connection con, File gmldir) throws SQLException, FileNotFoundException, ClassNotFoundException, IOException, ParserConfigurationException, SAXException, TransformerException {
int areacode = Integer.parseInt(gmldir.getName().substring(GML_DIR_PREFIX.length(), GML_DIR_PREFIX.length()+2));
ToPostgis postgis = null;
File[] files = gmldir.listFiles();
for (File iFile : files) {
// 対象のファイルが「数値地図情報のGMLデータファイル」の時のみ処理を行う。
if (!checkFile(iFile, areacode)) {
continue;
}
Busstop.clearDb(con);
inputFile(con, iFile, areacode);
/**
* 既存のOSMバス停を読み込む
* --> 'existing.xml'
*/
if (!Busstop.nocheck) {
/*
* 既存のOSMデータファイルがなければ、新たにダウンロードする。
* OSMデータファイルがあるときは、ダウンロードしないでそれを使う。
*/
File existingFile = new File(gmldir, String.format("existing_%02d.xml", areacode));
if (!existingFile.isFile()) {
/**
* インポートしたデータの緯度経度範囲を読み取る
*/
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();
/**
* OSM OverPassAPI を使って、既存のOSMバス停のデータを取得して、「existing.xml」に出力する
*/
HttpPOST.getCapabilities(existingFile, minLat, maxLat, minLon, maxLon);
}
readExistingFile(con, existingFile);
PreparedStatement ps1 = con.prepareStatement("SELECT idref,name,lat,lon FROM bus_stop WHERE area=?");
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=?");
PreparedStatement ps4 = con.prepareStatement("SELECT count(idref) 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("idref");
String name = rset1.getString("name");
Double lat = rset1.getDouble("lat");
Double lon = rset1.getDouble("lon");
// 指定の緯度経度を中心とする半径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);
ResultSet rset2 = ps2.executeQuery();
if (rset2.next()) {
int count = rset2.getInt(1);
if (count > 0) {
System.out.println("."+ count);
ps3.setInt(1, count);
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);
ResultSet rset4 = ps4.executeQuery();
if (rset4.next()) {
count = rset4.getInt(1);
System.out.println(".."+ count);
ps3.setInt(1, count);
ps3.setString(2, idref);
ps3.executeUpdate();
}
rset4.close();
}
}
rset2.close();
}
rset1.close();
ps3.close();
ps2.close();
ps1.close();
}
// ローカルデータベース内の情報をPostGIS用の「busstop.sql」に出力する
postgis = new ToPostgis(gmldir);
postgis.outputDb(con);
postgis.close();
}
}
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 = "";
String nameStr = "";
PreparedStatement ps5 = con.prepareStatement("INSERT INTO existing_data (idref,lat,lon, name) 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();
}
else if (nodeMap.item(j).getNodeName().equals("lat")) {
latStr = nodeMap.item(j).getNodeValue();
}
else if (nodeMap.item(j).getNodeName().equals("lon")) {
lonStr = 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("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;
break;
}
}
}
}
// idref と nameStr をデータベースに格納する
System.out.println("import existing_data : "+ idrefStr +" ("+ latStr +","+ lonStr+")"+ nameStr);
ps5.setString(1, idrefStr);
ps5.setDouble(2, Double.parseDouble(latStr));
ps5.setDouble(3, Double.parseDouble(lonStr));
ps5.setString(4, nameStr);
ps5.executeUpdate();
ps5.close();
}
}
/**
* 数値地図情報のGMLデータファイルを読み取ってローカルベータベースへ記録する
* @param con
* @param iFile
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws SQLException
* @throws IOException
* @throws ParserConfigurationException
* @throws SAXException
*/
public static void inputFile (Connection con, File iFile, int areacode) throws FileNotFoundException, ClassNotFoundException, SQLException, IOException, ParserConfigurationException, SAXException {
int iCounter = 0;
String timeStampStr = null;
String iStr = iFile.getName();
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(iFile);
iCounter += showNodes(con, root, iStr.substring(0, iStr.length() - 4), timeStampStr, areacode);
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 {
// 'table.BUS_STOP'を新規に作る
DbBusstop.create(con);
}
/**
*
* @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, int areacode) 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, areacode);
}
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, areacode);
}
}
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("bus_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();
}
System.out.println("bus_ref=("+ idrefStr +", "+ code +")");
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=0");
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, int areacode) 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, area,idref) VALUES (?,?,?,?,?)");
double lat = Double.parseDouble(latStr);
double lon = Double.parseDouble(lonStr);
System.out.println("INSERT INTO bus_stop (lat,lon,fixed,area, idref) VALUES ('"+ latStr +"','"+ lonStr +"','0',"+ areacode +",'"+ 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.setInt(4, areacode);
ps6.setString(5, idStr);
ps6.executeUpdate();
ps6.close();
}
}
}
/**
* 数値地図情報のGMLデータファイルかどうかを見極める
* @param f
* @return
*/
static boolean checkFile(File f, int areacode) {
String name = f.getName();
if (!name.startsWith(GML_DIR_PREFIX)) {
return false;
}
if (!name.toUpperCase().endsWith(".XML")) {
return false;
}
if (Integer.parseInt(name.substring(GML_DIR_PREFIX.length(), GML_DIR_PREFIX.length()+2)) == areacode) {
return true;
}
return false;
}
/**
* 数値地図情報のデータディレクトリかどうかを見極める
* @param f
* @return
*/
public static boolean checkGMLdir(File f) {
if (!f.isDirectory()) {
return false;
}
String name = f.getName();
if (!name.startsWith(GML_DIR_PREFIX)) {
return false;
}
if (!name.toUpperCase().endsWith(GML_DIR_PRIFIX)) {
return false;
}
return true;
}
public static final String GML_DIR_PREFIX = "P11-10_";
public static final String GML_DIR_PRIFIX = "_GML";
}