import java.io.*;\r
import java.text.ParseException;\r
import java.text.SimpleDateFormat;\r
+import java.util.Arrays;\r
+import java.util.Comparator;\r
import java.util.Date;\r
import java.util.HashMap;\r
import java.util.Iterator;\r
String fileName = gpxFile.getName();\r
String iStr = fileName.substring(0, fileName.length() - 4);\r
\r
- File outputFile = new File(iStr +"_.gpx");\r
+ File outputFile = new File(gpxFile.getParent(), iStr +"_.gpx");\r
System.out.println(iStr + " => "+ outputFile.getName());\r
\r
try {\r
try {\r
Date t = dfjp.parse(timeStr);\r
long delta = t.getTime() - jptime.getTime();\r
+ \r
+ /*\r
+ * GPXへ割りつける開始時刻と終了時刻を求める\r
+ */\r
+ long gpxStartTime = (new Date()).getTime(); // 対象とする開始時刻\r
+ long gpxEndTime = 0L; // 対象とする終了時刻\r
+ Set<Long> keySet = map.keySet(); //すべてのキー値を取得\r
+ for (Iterator<Long> keyIte = keySet.iterator(); keyIte.hasNext();) {\r
+ Long timeLong = (Long)keyIte.next();\r
+ long gpxTime = timeLong.longValue();\r
+ if (gpxStartTime > gpxTime) {\r
+ gpxStartTime = gpxTime;\r
+ }\r
+ if (gpxEndTime < gpxTime) {\r
+ gpxEndTime = gpxTime;\r
+ }\r
+ }\r
+ \r
System.out.println("時差: "+ (delta / 1000) +"(sec)");\r
- pw.println("時差: "+ (delta / 1000) +"(sec)");\r
- ImportPicture.proc(dir, csvfile, delta);\r
+ pw.println(" 時差: "+ (delta / 1000) +"(sec)");\r
+ pw.println(" Target GPX: ["+ gpxFile.getName() +"]");\r
+ pw.println("GPX start time: "+ dfjp.format(new Date(gpxStartTime).getTime()));\r
+ pw.println(" GPX end time: "+ dfjp.format(new Date(gpxEndTime).getTime()));\r
\r
pw.println("\"name\",\"orignal\",\"gpstime\"");\r
File[] files = dir.listFiles();\r
+ Arrays.sort(files, new FileSort());\r
for (File image : files) {\r
String imageName = image.getName();\r
if (checkFile(imageName)) {\r
Date itime = new Date(image.lastModified());\r
Date uktime = new Date(itime.getTime() + delta);\r
- pw.print("\""+ fileName +"\",");\r
- pw.print("\""+ dfjp.format(itime) +"\",");\r
- pw.println("\""+ dfjp.format(uktime) +"\"");\r
-\r
- Element trkpt = trkpt(map, uktime);\r
- if (trkpt != null) {\r
- Element wpt = createWptTag(dir, image, uktime.getTime(), trkpt);\r
- Element temp = getCopy(gpx.getOwnerDocument(), wpt);\r
- gpx.appendChild(temp);\r
+ if ((uktime.getTime() >= gpxStartTime) && (uktime.getTime() <= gpxEndTime)) {\r
+ Element trkpt = trkpt(map, uktime);\r
+ if (trkpt != null) {\r
+ pw.print("\""+ image.getName() +"\",");\r
+ pw.print("\""+ dfjp.format(itime) +"\",");\r
+ pw.println("\""+ dfjp.format(uktime) +"\"");\r
+\r
+ Element wpt = createWptTag(dir, image, uktime.getTime(), trkpt);\r
+ Element temp = getCopy(gpx.getOwnerDocument(), wpt);\r
+ gpx.appendChild(temp);\r
+ }\r
}\r
}\r
}\r
static SimpleDateFormat dfjp = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");\r
static SimpleDateFormat dfuk = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Locale.UK);\r
\r
+ /**\r
+ * XMLエレメント<trkpt>をTIMEでキー付したHashMapを生成する<br>\r
+ * \r
+ * <trk><trkseg><trkpt><time>2014-01-01T00:59:09Z</time></trkpt></trkseg></trk>\r
+ * \r
+ * @param trk\r
+ * @return\r
+ * @throws ParseException\r
+ */\r
public static HashMap<Long,Element> trkptMap(Element trk) throws ParseException {\r
HashMap<Long,Element> map = new HashMap<Long,Element>();\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.longValue();\r
+ Iterator<Long> keyIte = keySet.iterator();\r
+ while (keyIte.hasNext()) { //ループ。反復子iteratorによる キー 取得\r
+ Long time = keyIte.next();\r
+ long t = time.longValue();\r
if (Math.abs(jpt - t) < sa) {\r
sa = Math.abs(jpt - t);\r
ret = map.get(time);\r
}\r
- }\r
+ }\r
\r
- if (sa < (60000L * 10L)) {\r
+ if (sa < (60000L * 10L)) {\r
System.out.println(dfuk.format(jpt) +" ("+ sa +")");\r
return ret;\r
}\r
- return null;\r
- }\r
-\r
- /**\r
- *\r
- * <wpt lat="35.25714922" lon="139.15490497">\r
- * <ele>62.099998474121094</ele>\r
- * <time>2012-06-11T00:44:38Z</time>\r
- * <name><![CDATA[写真]]></name>\r
- * <link href="2012-06-11_09-44-38.jpg">\r
- * <text>2012-06-11_09-44-38.jpg</text>\r
- * </link>\r
- * </wpt>\r
- *\r
- * @param dir\r
- * @param csvfile\r
- * @param delta\r
- * @throws IOException\r
- */\r
- public static void proc (File dir, File csvfile, long delta) throws IOException {\r
- int counter = 0;\r
- PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(csvfile)));\r
- pw.println("\"name\",\"orignal\",\"gpstime\"");\r
-\r
- try {\r
- File[] files = dir.listFiles();\r
- for (File iFile : files) {\r
- String fileName = iFile.getName();\r
- if (checkFile(fileName)) {\r
- counter++;\r
- Date jptime = new Date(iFile.lastModified());\r
- Date uktime = new Date(jptime.getTime() + delta);\r
- pw.print("\""+ fileName +"\",");\r
- pw.print("\""+ dfjp.format(jptime) +"\",");\r
- pw.println("\""+ dfjp.format(uktime) +"\"");\r
- }\r
- }\r
- }\r
- finally {\r
- pw.close();\r
- System.out.println("Image file count = "+ counter);\r
- }\r
- System.out.println("SUCESS 'ListUpdateTime' => '"+ csvfile.getAbsolutePath() +"' !");\r
+ return null;\r
}\r
\r
/**\r
}\r
return root;\r
}\r
+ \r
+ /**\r
+ * ファイル名の順序に並び替えるためのソートクラス\r
+ * \r
+ * @author hayashi\r
+ */\r
+ static class FileSort implements Comparator<File>{\r
+ public int compare(File src, File target){\r
+ int diff = src.getName().compareTo(target.getName());\r
+ return diff;\r
+ }\r
+ }\r
+\r
}
\ No newline at end of file