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 )
+
+
+
+
+
+
+
+
\ 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;
}