- * 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
- 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
- * <trkpt lat="35.32123832" lon="139.56965631">\r
- * <ele>47.20000076293945</ele>\r
- * <time>2012-06-15T03:00:29Z</time>\r
- * </trkpt>\r
- *DIFF_MAE_TIME\r
- * @return\r
- * @param map\r
- * @param jptime 画像ファイルの撮影日時 ミリ秒(日本時間)\r
- * @throws ParseException\r
- */\r
- public Element trkpt(TreeMap<Long,Element> map, Date jptime) throws ParseException {\r
- // 指定した時刻のエレメント(imaTrkpt)を取得する\r
- Element imaE = getTrkpt(map, jptime);\r
- if (imaE != null) {\r
- Element maeE = getMaeTrkpt(map, new TagTrkpt(imaE));\r
- if (maeE != null) {\r
- Complementation comp = new Complementation(imaE, maeE);\r
-\r
- // <MAGVAR>がなければ、\r
- // 直前の位置と、現在地から進行方向を求める\r
- // 経度(longitude)と経度から進行方向を求める\r
- if (Complementation.param_GpxOverwriteMagvar) {\r
- comp.complementationMagvar();\r
- }\r
-\r
- // 緯度・経度と時間差から速度(km/h)を求める\r
- if (Complementation.param_GpxOutputSpeed) {\r
- comp.complementationSpeed();\r
- }\r
- imaE = (Element)(comp.imaTag.trkpt.cloneNode(true));\r
- }\r
- }\r
- return imaE;\r
- }\r
-\r
- /**\r
- * [map]から指定した時刻の<trkpt>エレメントを取り出す。\r
- * GPX時刻との差が10分以上は無効\r
- * \r
- * @param map\r
- * @param jptime\r
- * @return\r
- * @throws ParseException\r
- */\r
- public Element getTrkpt(TreeMap<Long,Element> map, Date jptime) throws ParseException {\r
- long sa = 2L * 3600000L;\r
- long jpt = jptime.getTime();\r
- \r
- Element ret = null;\r
-\r
- Set<Long> keySet = map.keySet(); //すべてのキー値を取得\r
- Iterator<Long> keyIte = keySet.iterator();\r
- while (keyIte.hasNext()) { //ループ。反復子iteratorによる キー 取得\r
- Long time = keyIte.next();\r
- long t = time;\r
-\r
- if (Math.abs(jpt - t) < sa) {\r
- sa = Math.abs(jpt - t);\r
- ret = map.get(time);\r
- }\r
- }\r
-\r
- if (sa < (60000L * 10L)) {\r
- // GPX時刻との差が10分以内なら有効\r
- return ret;\r
- }\r
- return null;\r
- }\r
-\r
- public Element getMaeTrkpt(TreeMap<Long,Element> map, TagTrkpt imaTrkpt) throws ParseException {\r
- Element ret = null;\r
- long diffTime = 2L * 3600000L; // 2時間\r
- long jpt = imaTrkpt.time.getTime() - DIFF_MAE_TIME;\r
-\r
- Set<Long> keySet = map.keySet(); //すべてのキー値を取得\r
- Iterator<Long> keyIte = keySet.iterator();\r
- while (keyIte.hasNext()) { //ループ。反復子iteratorによる キー 取得\r
- Long time = keyIte.next();\r
- long t = time;\r
-\r
- if (Math.abs(jpt - t) < diffTime) {\r
- diffTime = Math.abs(jpt - t);\r
- ret = map.get(time);\r
- }\r
- }\r
-\r
- if (diffTime < (60000L * 10L)) {\r
- // GPX時刻との差が10分以内なら有効\r
- if (diffTime < (imaTrkpt.time.getTime() - 1000)) {\r
- // 元の時刻との差が1秒以上あること\r
- return ret;\r
- }\r
- }\r
- return null;\r
- }\r
- \r
- /**\r