package osm.jp.gpx;\r
+\r
import java.io.*;\r
import java.nio.channels.FileChannel;\r
import java.text.DecimalFormat;\r
import java.util.Comparator;\r
import java.util.Date;\r
import java.util.GregorianCalendar;\r
-import java.util.Iterator;\r
import java.util.Map;\r
-import java.util.Map.Entry;\r
-import java.util.Set;\r
import java.util.TimeZone;\r
import java.util.TreeMap;\r
import java.util.logging.LogManager;\r
public boolean param_GpxSplit = false;\r
public boolean param_GpxNoFirstNode = false;\r
public boolean param_GpxReuse = false;\r
- //public boolean Complementation.param_GpxOutputSpeed = false;\r
- //public boolean Complementation.param_GpxOverwriteMagvar = false;\r
public boolean param_GpxOutputWpt = true;\r
public boolean param_ImgOutputAll = false;\r
public String param_GpxSourceFolder = ".";\r
/*\r
* <gpx>\r
* <trk>\r
- * <name><![CDATA[Tracked with OSMTracker for Android?]]></name>\r
- * <cmt><![CDATA[警告: HDOP values aren't the HDOP as returned by the GPS device. They're approximated from the location accuracy in meters.]]></cmt>\r
* <trkseg>\r
* <trkpt lat="35.32123832" lon="139.56965631">\r
* <ele>47.20000076293945</ele>\r
* </trkpt>\r
* </trkseg>\r
* </trk>\r
- * <wpt lat="35.2564461" lon="139.15437809"></wpt>\r
* </gpx>\r
*/\r
TreeMap<Long,ElementMapTRKPT> mapTRKSEG = new TreeMap<Long, ElementMapTRKPT>();\r
for (int i1=0; i1 < nodes1.getLength(); i1++) {\r
Node nodeTRKSEG = nodes1.item(i1);\r
if (nodeTRKSEG.getNodeName().equals("trkseg")) {\r
- //Element newTRKSEG = document.createElement("trkseg");\r
NodeList nodes2 = nodeTRKSEG.getChildNodes();\r
\r
ElementMapTRKPT mapTRKPT = new ElementMapTRKPT();\r
}\r
}\r
\r
- // <trk>から<trkseg>を削除する。\r
- //trk.removeChild(nodeTRKSEG);\r
-\r
- // <trk>に、新たな<trkseg>を追加する。\r
- //trk.appendChild(newTRKSEG);\r
-\r
- System.out.println("\tdebug: mapTRKSEG.put(k=" + dfjp.format(trksegStartTime) +", mapTRKPT)");\r
mapTRKSEG.put(trksegStartTime.getTime(), mapTRKPT);\r
- //newTRKSEG = null;\r
}\r
}\r
}\r
System.out.println("| name | UpdateTime | GPStime | Latitude | Longitude | ele |magvar| km/h |");\r
System.out.println("|--------------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|");\r
proc(imgDir, delta, mapTRKSEG, exif, gpx);\r
- for (Map.Entry<Long, ElementMapTRKPT> mapEntry : mapTRKSEG.entrySet()) {\r
- System.out.println("\tdebug: k=" + dfjp.format(new Date(mapEntry.getKey().longValue())));\r
- \r
- ElementMapTRKPT mapPT = mapEntry.getValue();\r
- \r
- // <trkseg>の開始時刻と終了時刻を求める\r
- long segStartTimeL = new Date().getTime(); // <trkseg>の開始時刻\r
- long segEndTimeL = 0L; // 対象とする終了時刻\r
- for (Entry<Date, Element> entryPT : mapPT.entrySet()) {\r
- Date key = entryPT.getKey();\r
- if (segStartTimeL > key.getTime()) {\r
- segStartTimeL = key.getTime();\r
- }\r
- if (segEndTimeL < key.getTime()) {\r
- segEndTimeL = key.getTime();\r
- }\r
- }\r
- \r
- System.out.println("|------<trkpt>-------------------|"+ dfjp.format(new Date(segStartTimeL)) + "-->"+ dfjp.format(new Date(segEndTimeL)) +"|");\r
- //proc(imgDir, delta, segStartTimeL, segEndTimeL, mapPT, exif, gpx);\r
- }\r
System.out.println("|--------------------------------|--------------------|--------------------|--------------|--------------|--------|------|------|");\r
\r
// 出力\r
Date uktime = new Date(itime.getTime() + delta);\r
System.out.print(String.format("%20s|", dfjp.format(uktime)));\r
\r
- /*\r
- if ((uktime.getTime() < gpxStartTime) || (uktime.getTime() > gpxEndTime)) {\r
- System.out.println(String.format("%20s ", "out of time."));\r
- if (!this.param_ImgOutputAll) {\r
- continue;\r
- }\r
- }\r
- */\r
-\r
// 時刻uktimeにおける<magver>をtrkptに追加する\r
- Element trkptE = mapTRKPT.get(uktime);\r
String eleStr = "-";\r
String magvarStr = "-";\r
String speedStr = "-";\r
double latitude = 90.5D;\r
double longitude = 180.5D;\r
+ Element trkptE = null;\r
TagTrkpt trkptT = null;\r
+\r
+ for (Map.Entry<Long,ElementMapTRKPT> map : mapTRKSEG.entrySet()) {\r
+ ElementMapTRKPT mapTRKPT = map.getValue();\r
+ trkptE = mapTRKPT.getValue(uktime);\r
+ if (trkptE != null) {\r
+ break;\r
+ }\r
+ }\r
if (trkptE == null) {\r
System.out.println(String.format("%20s ", "Out of GPX logging time."));\r
if (!this.param_ImgOutputAll) {\r
public static SimpleDateFormat dfuk = new SimpleDateFormat(TIME_FORMAT_STRING +"'Z'");\r
\r
/**\r
- * XMLエレメント<trkpt>をTIMEでキー付したHashMapを生成する<br>\r
- * \r
- * <trkseg>\r
- * <trkpt lat="34.976635" lon="138.466228">\r
- * <ele>267.291</ele>\r
- * <magvar>359</magvar>\r
- * <speed></speed>\r
- * <time>2016-07-02T08:25:18Z</time>\r
- * </trkpt>\r
- * </trkseg>\r
- * @return gpxStartTimeL : long 格納したエレメント<trkpt>の最小時刻(startTime)をかえす。呼び出し元はこの値を使ってエレメント<trkpt>を時系列にソートする\r
- * @param trk \r
- * @param map\r
- * @throws ParseException\r
- */\r
- /*\r
- public long trkptMap(Element trkseg, TreeMap<Long,Element> map) throws ParseException {\r
- dfuk.setTimeZone(TimeZone.getTimeZone("GMT"));\r
- long gpxStartTimeL = (new Date()).getTime(); // 対象とする開始時刻(現在時刻)\r
-\r
- NodeList nodes2 = trkseg.getChildNodes();\r
- for (int i2=0; i2 < nodes2.getLength(); i2++) {\r
- Node node3 = nodes2.item(i2);\r
- if (node3.getNodeName().equals("trkpt")) {\r
- Element trkpt = (Element) node3;\r
-\r
- NodeList nodes3 = trkpt.getChildNodes();\r
- for (int i3=0; i3 < nodes3.getLength(); i3++) {\r
- Node node4 = nodes3.item(i3);\r
- if (node4.getNodeName().equals("time")) {\r
- Element time = (Element) node4;\r
- NodeList nodes4 = time.getChildNodes(); // 子ノードを取得\r
- for (int i4=0; i4< nodes4.getLength(); i4++) {\r
- Node node5 = nodes4.item(i4);\r
- if (node5 != null) {\r
- if (node5.getNodeType() == Node.TEXT_NODE) {\r
- String timeStr = node5.getNodeValue();\r
- long timeL = dfuk.parse(timeStr).getTime();\r
- long gpxTime = timeL;\r
- if (gpxStartTimeL > gpxTime) {\r
- gpxStartTimeL = gpxTime;\r
- }\r
- map.put(timeL, getCopy(trkseg.getOwnerDocument(), trkpt));\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
- }\r
- return gpxStartTimeL;\r
- }\r
- */\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
- \r
- /**\r
* 対象は '*.JPG' のみ対象とする\r
* @return \r
* @param name\r