OSDN Git Service

GPX記録時間外の画像データは除外する
authorhayashi <hayashi.yuu@gmail.com>
Thu, 2 Jan 2014 01:10:03 +0000 (10:10 +0900)
committerhayashi <hayashi.yuu@gmail.com>
Thu, 2 Jan 2014 01:10:03 +0000 (10:10 +0900)
importPicture/build.xml
importPicture/importPictute.sh [new file with mode: 0755]
importPicture/src/osm/jp/gpx/ImportPicture.java

index 3ffaf85..27b3f7e 100644 (file)
        <property name="appname" value="importPicture"></property>\r
        <property name="version" value="${verdate}"></property>\r
 \r
+\r
+       <!--\r
+       Java Doc\r
+       -->\r
+       <target name="javadoc">\r
+         <javadoc sourcepath="src"\r
+           encoding="UTF-8"\r
+           packagenames="*"\r
+           Windowtitle="${appname}"\r
+           doctitle="${appname}"\r
+           docencoding="UTF-8"\r
+           bottom=""\r
+           Author="true"\r
+           destdir="api">\r
+               <classpath>\r
+                               <pathelement path="${src}"/>\r
+                       </classpath>\r
+               </javadoc>\r
+       </target>\r
+\r
        <!--\r
        [STEP 1] クリーンナップ\r
         -->\r
@@ -30,8 +50,8 @@
        <!--\r
        [STEP 2] コンパイル\r
         -->\r
-       <target name="compile_src" depends="clean" description="コンパイル src">\r
-           <javac      optimize="off" debug="on" verbose="false" srcdir="${src}" destdir="${classes}" encoding="UTF-8" >\r
+       <target name="compile_src" description="コンパイル src">\r
+           <javac      debug="on" srcdir="${src}" destdir="${classes}" encoding="UTF-8" includeantruntime="false">\r
                        <include name="**" />\r
                <exclude name="**/*.smap" />\r
                <classpath>\r
@@ -61,6 +81,7 @@
         </jar>\r
     </target>\r
 \r
+\r
        <!--\r
        [STEP 4] Deployment\r
         -->\r
diff --git a/importPicture/importPictute.sh b/importPicture/importPictute.sh
new file mode 100755 (executable)
index 0000000..4087038
--- /dev/null
@@ -0,0 +1,7 @@
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/2014-01-01 09.14.01 自動.gpx"
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/2014-01-01 09.59.09 自動.gpx"
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/2014-01-01 10.44.19 自動.gpx"
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/2014-01-01 11.29.22 自動.gpx"
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/2014-01-01 12.14.49 自動.gpx"
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/20140101.gpx"
+java -jar importPicture.jar list.csv /home/hayashi/osm/20140101/10040101 DSC01396.JPG 2014-01-01T15:46:56  "/home/hayashi/osm/20140101/Current.gpx"
index 67e2e3e..b5e7520 100644 (file)
@@ -2,6 +2,8 @@ package osm.jp.gpx;
 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
@@ -79,7 +81,7 @@ public class ImportPicture {
                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
@@ -130,26 +132,49 @@ public class ImportPicture {
                                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
@@ -198,6 +223,15 @@ public class ImportPicture {
        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
@@ -243,63 +277,21 @@ public class ImportPicture {
                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
@@ -425,4 +417,17 @@ public class ImportPicture {
                }\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