import java.io.*;\r
import java.text.ParseException;\r
import java.text.SimpleDateFormat;\r
+import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.Comparator;\r
import java.util.Date;\r
}\r
\r
if (argv.length < 4) {\r
- System.out.println("> java -jar importPicture.jar <outputfile> <targetDir> <time base image> <time> <gpx>");\r
- System.out.println("> java -jar importPicture.jar list.csv . IMG_01234.JPG 2012-06-15T12:52:22 鎌倉宮_2012-06-15_12-00-16.gpx");\r
+ System.out.println("> java -jar importPicture.jar <outputfile> <targetDir> <time base image> <time> (gpx)");\r
+ System.out.println("> java -jar importPicture.jar list.csv . IMG_01234.JPG 2012-06-15T12:52:22");\r
+ }\r
+ \r
+ // 第5引数が指定されなければ、指定されたディレクトリ内のGPXファイルすべてを対象とする\r
+ ArrayList<File> gpxFiles = new ArrayList<File>();\r
+ if (argv.length > 4) {\r
+ gpxFiles.add(new File(dir, argv[4]));\r
+ }\r
+ else {\r
+ File[] files = dir.listFiles();\r
+ for (int i=0; i < files.length; i++) {\r
+ if (files[i].isFile()) {\r
+ String filename = files[i].getName().toUpperCase();\r
+ if (filename.endsWith(".GPX")) {\r
+ if (!filename.endsWith("_.GPX")) {\r
+ gpxFiles.add(files[i]);\r
+ }\r
+ }\r
+ }\r
+ }\r
}\r
\r
/**\r
*/\r
DocumentBuilderFactory factory;\r
DocumentBuilder builder;\r
-\r
Node gpx;\r
- File gpxFile = new File(argv[4]);\r
-\r
- String fileName = gpxFile.getName();\r
- String iStr = fileName.substring(0, fileName.length() - 4);\r
-\r
- File outputFile = new File(gpxFile.getParent(), iStr +"_.gpx");\r
- System.out.println(iStr + " => "+ outputFile.getName());\r
-\r
+ \r
try {\r
- factory = DocumentBuilderFactory.newInstance();\r
- builder = factory.newDocumentBuilder();\r
- factory.setIgnoringElementContentWhitespace(true);\r
- factory.setIgnoringComments(true);\r
- factory.setValidating(true);\r
-\r
- // GPX file --> Node root\r
- DOMImplementation domImpl = builder.getDOMImplementation();\r
- document = domImpl.createDocument("", "gpx", null);\r
-\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
- <time>2012-06-15T03:00:29Z</time>\r
- <hdop>0.5</hdop>\r
- </trkpt>\r
- </trkseg>\r
- </trk>\r
- <wpt lat="35.2564461" lon="139.15437809">\r
- </wpt>\r
- </gpx>\r
- */\r
- Element trk = null;\r
- gpx = builder.parse(gpxFile).getFirstChild();\r
- NodeList nodes = gpx.getChildNodes();\r
- for (int i=0; i < nodes.getLength(); i++) {\r
- Node node2 = nodes.item(i);\r
- if (node2.getNodeName().equals("trk")) {\r
- trk = (Element) node2;\r
+ for (int gpxCnt = 0; gpxCnt < gpxFiles.size(); gpxCnt++) {\r
+ File gpxFile = gpxFiles.get(gpxCnt);\r
+ String fileName = gpxFile.getName();\r
+ String iStr = fileName.substring(0, fileName.length() - 4);\r
+ \r
+ File outputFile = new File(gpxFile.getParent(), iStr +"_.gpx");\r
+ System.out.println(iStr + " => "+ outputFile.getName());\r
+\r
+ factory = DocumentBuilderFactory.newInstance();\r
+ builder = factory.newDocumentBuilder();\r
+ factory.setIgnoringElementContentWhitespace(true);\r
+ factory.setIgnoringComments(true);\r
+ factory.setValidating(true);\r
+\r
+ // GPX file --> Node root\r
+ DOMImplementation domImpl = builder.getDOMImplementation();\r
+ document = domImpl.createDocument("", "gpx", null);\r
+\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
+ <time>2012-06-15T03:00:29Z</time>\r
+ <hdop>0.5</hdop>\r
+ </trkpt>\r
+ </trkseg>\r
+ </trk>\r
+ <wpt lat="35.2564461" lon="139.15437809">\r
+ </wpt>\r
+ </gpx>\r
+ */\r
+ Element trk = null;\r
+ gpx = builder.parse(gpxFile).getFirstChild();\r
+ NodeList nodes = gpx.getChildNodes();\r
+ for (int i=0; i < nodes.getLength(); i++) {\r
+ Node node2 = nodes.item(i);\r
+ if (node2.getNodeName().equals("trk")) {\r
+ trk = (Element) node2;\r
+ }\r
}\r
- }\r
\r
- if (trk != null) {\r
- HashMap<Long,Element> map = trkptMap(trk);\r
- File baseFile = new File(dir, argv[2]);\r
- Date jptime = new Date(baseFile.lastModified());\r
-\r
- PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(csvfile)));\r
- String timeStr = argv[3];\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
+ if (trk != null) {\r
+ HashMap<Long,Element> map = trkptMap(trk);\r
+ File baseFile = new File(dir, argv[2]);\r
+ Date jptime = new Date(baseFile.lastModified());\r
+\r
+ PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(csvfile)));\r
+ String timeStr = argv[3];\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
- \r
- System.out.println("時差: "+ (delta / 1000) +"(sec)");\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
- 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
+ System.out.println("時差: "+ (delta / 1000) +"(sec)");\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
+ 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
}\r
+ catch (ParseException e) {\r
+ System.out.println("'"+ timeStr +"' の書式が違います(yyyy-MM-dd'T'HH:mm:ss)");\r
+ }\r
+ finally {\r
+ pw.close();\r
+ }\r
}\r
- catch (ParseException e) {\r
- System.out.println("'"+ timeStr +"' の書式が違います(yyyy-MM-dd'T'HH:mm:ss)");\r
- }\r
- finally {\r
- pw.close();\r
- }\r
- }\r
\r
- // 出力\r
- DOMSource source = new DOMSource(gpx);\r
- FileOutputStream os = new FileOutputStream(outputFile);\r
- StreamResult result = new StreamResult(os);\r
- TransformerFactory transFactory = TransformerFactory.newInstance();\r
- Transformer transformer = transFactory.newTransformer();\r
- transformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
- transformer.setOutputProperty(OutputKeys.METHOD, "xml");\r
- transformer.transform(source, result);\r
+ // 出力\r
+ DOMSource source = new DOMSource(gpx);\r
+ FileOutputStream os = new FileOutputStream(outputFile);\r
+ StreamResult result = new StreamResult(os);\r
+ TransformerFactory transFactory = TransformerFactory.newInstance();\r
+ Transformer transformer = transFactory.newTransformer();\r
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
+ transformer.setOutputProperty(OutputKeys.METHOD, "xml");\r
+ transformer.transform(source, result);\r
+ }\r
}\r
catch (ParserConfigurationException e) {\r
e.printStackTrace();\r