diff --git a/importPicture/doc/GPX.class.violet.html b/importPicture/doc/GPX.class.violet.html new file mode 100644 index 0000000..ad0de88 --- /dev/null +++ b/importPicture/doc/GPX.class.violet.html @@ -0,0 +1,1401 @@ + + + + + + + + + This file was generated with Violet UML Editor 2.1.0. +   ( View Source / Download Violet ) +
+
+ +
+
+ embedded diagram image + + \ No newline at end of file diff --git a/importPicture/src/osm/jp/gpx/ImportPicture.java b/importPicture/src/osm/jp/gpx/ImportPicture.java index 0b38001..c7497ab 100644 --- a/importPicture/src/osm/jp/gpx/ImportPicture.java +++ b/importPicture/src/osm/jp/gpx/ImportPicture.java @@ -11,6 +11,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.Iterator; +import java.util.Map.Entry; import java.util.Set; import java.util.TimeZone; import java.util.TreeMap; @@ -348,6 +349,7 @@ DocumentBuilderFactory factory; DocumentBuilder builder; Node gpx; + boolean header = true; // ファイルヘッダの部分を出力するかどうかを示すフラグ String fileName = gpxFile.getName(); String iStr = fileName.substring(0, fileName.length() - 4); @@ -385,10 +387,9 @@ * * */ - TreeMap map = new TreeMap(); - TreeMap mapTRKSEG = new TreeMap<>(); + TreeMap mapTRKPT = new TreeMap(); + TreeMap mapTRKSEG = new TreeMap(); Element trk = null; - //Element maeTRKPT = null; gpx = builder.parse(gpxFile).getFirstChild(); document = gpx.getOwnerDocument(); NodeList nodes = gpx.getChildNodes(); @@ -396,92 +397,92 @@ Node node2 = nodes.item(i); if (node2.getNodeName().equals("trk")) { trk = (Element) node2; + long gpxStartTimeL = (new Date()).getTime(); NodeList nodes1 = trk.getChildNodes(); - int trksegCounter = 0; for (int i1=0; i1 < nodes1.getLength(); i1++) { Node nodeTRKSEG = nodes1.item(i1); if (nodeTRKSEG.getNodeName().equals("trkseg")) { - trksegCounter++; Element newTRKSEG = document.createElement("trkseg"); Element trkseg = (Element) nodeTRKSEG; NodeList nodes2 = trkseg.getChildNodes(); + long trksegStartTimeL = (new Date()).getTime(); // 対象とする開始時刻(現在時刻) for (int i2=0; i2 < nodes2.getLength(); i2++) { Node nodeTRKPT = nodes2.item(i2); if (nodeTRKPT.getNodeName().equals("trkpt")) { if (param_GpxNoFirstNode && (i2 == 0)) { continue; } + Element trkpt = (Element) nodeTRKPT; + + NodeList nodes3 = trkpt.getChildNodes(); + for (int i3=0; i3 < nodes3.getLength(); i3++) { + Node node4 = nodes3.item(i3); + if (node4.getNodeName().equals("time")) { + Element time = (Element) node4; + NodeList nodes4 = time.getChildNodes(); // 子ノードを取得 + for (int i4=0; i4< nodes4.getLength(); i4++) { + Node node5 = nodes4.item(i4); + if (node5 != null) { + if (node5.getNodeType() == Node.TEXT_NODE) { + String timeStr = node5.getNodeValue(); + long timeL = dfuk.parse(timeStr).getTime(); + if (trksegStartTimeL > timeL) { + trksegStartTimeL = timeL; + } + mapTRKPT.put(timeL, getCopy(trkseg.getOwnerDocument(), trkpt)); + } + } + } + } + } newTRKSEG.appendChild(getCopy(document, nodeTRKPT)); } } - mapTRKSEG.put(new Long(trksegCounter), getCopy(document, newTRKSEG)); // からを削除する。 trk.removeChild(nodeTRKSEG); - } - } - - // 毎に実行する - Iterator keyIte = mapTRKSEG.keySet().iterator(); - while (keyIte.hasNext()) { //ループ。反復子iteratorによる キー 取得 - // に、新たなを追加する。 - Element newTRKSEG = mapTRKSEG.get(keyIte.next()); - trk.appendChild(newTRKSEG); - - // mapに、を割り付ける - trkptMap(newTRKSEG, map); + // に、新たなを追加する。 + trk.appendChild(newTRKSEG); + + mapTRKSEG.put(gpxStartTimeL, getCopy(document, newTRKSEG)); + } } } } - /* - * GPXへ割りつける開始時刻と終了時刻を求める - */ - long gpxStartTime = (new Date()).getTime(); // 対象とする開始時刻(現在時刻) - long gpxEndTime = 0L; // 対象とする終了時刻 - Set keySet = map.keySet(); //すべてのキー値を取得 - for (Long timeLong : keySet) { - long gpxTime = timeLong; - if (gpxStartTime > gpxTime) { - gpxStartTime = gpxTime; - } - if (gpxEndTime < gpxTime) { - gpxEndTime = gpxTime; - } - } - - /* - * SPEEDをGPXに設定する - * 条件: SPEEDを書き出すフラグがONの時 - * 条件: オリジナルのSPEEDがある場合「上書きする/変更しない」(GPX_OUTPUT_SPEED) - */ - /* - TreeMap map2 = new TreeMap(); - if (Boolean.parseBoolean(params.getProperty(AppParameters.GPX_OUTPUT_SPEED))) { - for (Long timeL : keySet) { - Element trkptE = trkpt(map, new Date(timeL)); - if (trkptE != null) { - map2.put(timeL, trkptE); - } - else { - map2.put(timeL, map.get(timeL)); - } - } - } - else { - map2 = (TreeMap) map.clone(); - } - */ - - System.out.println("GPX start time: "+ dfjp.format(new Date(gpxStartTime)) + "\t[GMT " + dfuk.format(new Date(gpxStartTime))+"]"); - System.out.println(" GPX end time: "+ dfjp.format(new Date(gpxEndTime)) + "\t[GMT " + dfuk.format(new Date(gpxEndTime))+"]"); - System.out.println("------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|"); - System.out.println(" name | UpdateTime | GPStime | Latitude | Longitude | ele |magvar| km/h |"); - System.out.println("------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|"); - proc(imgDir, delta, gpxStartTime, gpxEndTime, map, exif, gpx); - System.out.println("------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|"); + // mapTRKSEGに時間順に格納されたを順次ひとつづつ処理する + for (Entry mapEntry : mapTRKSEG.entrySet()) { + Element newTRKSEG = mapEntry.getValue(); + + // mapTRKPTに、を割り付ける + trkptMap(newTRKSEG, mapTRKPT); + + // の開始時刻と終了時刻を求める + long segStartTimeL = (new Date()).getTime(); // の開始時刻 + long segEndTimeL = 0L; // 対象とする終了時刻 + Set keySet = mapTRKPT.keySet(); //すべてのキー値を取得 + for (Long timeLong : keySet) { + long gpxTime = timeLong; + if (segStartTimeL > gpxTime) { + segStartTimeL = gpxTime; + } + if (segEndTimeL < gpxTime) { + segEndTimeL = gpxTime; + } + } + + if (header) { + System.out.println("|--------------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|"); + System.out.println("| name | UpdateTime | GPStime | Latitude | Longitude | ele |magvar| km/h |"); + System.out.println("|--------------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|"); + header = false; + } + System.out.println("|-------------------------|"+ dfjp.format(new Date(segStartTimeL)) + "-->"+ dfjp.format(new Date(segEndTimeL)) +"|"); + proc(imgDir, delta, segStartTimeL, segEndTimeL, mapTRKPT, exif, gpx); + } + System.out.println("|--------------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|"); // 出力 outputFile.getParentFile().mkdirs(); @@ -762,13 +763,14 @@ * * * - * - * @param trk + * @return gpxStartTimeL : long 格納したエレメントの最小時刻(startTime)をかえす。呼び出し元はこの値を使ってエレメントを時系列にソートする + * @param trk * @param map * @throws ParseException */ - public void trkptMap(Element trkseg, TreeMap map) throws ParseException { + public long trkptMap(Element trkseg, TreeMap map) throws ParseException { dfuk.setTimeZone(TimeZone.getTimeZone("GMT")); + long gpxStartTimeL = (new Date()).getTime(); // 対象とする開始時刻(現在時刻) NodeList nodes2 = trkseg.getChildNodes(); for (int i2=0; i2 < nodes2.getLength(); i2++) { @@ -787,8 +789,12 @@ if (node5 != null) { if (node5.getNodeType() == Node.TEXT_NODE) { String timeStr = node5.getNodeValue(); - long t = dfuk.parse(timeStr).getTime(); - map.put(t, getCopy(trkseg.getOwnerDocument(), trkpt)); + long timeL = dfuk.parse(timeStr).getTime(); + long gpxTime = timeL; + if (gpxStartTimeL > gpxTime) { + gpxStartTimeL = gpxTime; + } + map.put(timeL, getCopy(trkseg.getOwnerDocument(), trkpt)); } } } @@ -796,6 +802,7 @@ } } } + return gpxStartTimeL; }