public class AppParameters extends Properties {
static final String FILE_PATH = "AdjustTime.ini";
- // GPX出力: 時間的に間隔が開いたGPXログを別の<>セグメントに分割する。 {ON | OFF}
+ // GPX: 時間的に間隔が開いたGPXログを別の<trkseg>セグメントに分割する。 {ON | OFF}
public static String GPX_GPXSPLIT = "GPX.gpxSplit";
- // EXIF出力: 画像ファイルのEXIF情報を変更する {ON | OFF}
- public static String EXIF_GPXSPLIT = "EXIF.noEXIF";
+ // GPX: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
+ public static String GPX_NO_FIRST_NODE = "GPX.noFirstNode";
+
+ // GPX: 基準時刻 {FILE_UPDATE | EXIF}
+ public static String GPX_BASETIME = "GPX.BASETIME";
public AppParameters() throws FileNotFoundException, IOException {
super();
}
//------------------------------------------------
- // GPX出力: 時間的に間隔が開いたGPXログを別の<>セグメントに分割する。 {ON | OFF}
+ // GPX出力: 時間的に間隔が開いたGPXログを別の<trkseg>セグメントに分割する。 {ON | OFF}
String valueStr = this.getProperty(GPX_GPXSPLIT);
if (valueStr == null) {
update = true;
}
//------------------------------------------------
- // EXIF出力: 画像ファイルのEXIF情報を変更する {ON | OFF}
- valueStr = this.getProperty(EXIF_GPXSPLIT);
+ // GPX出力: <trkseg>セグメントの最初の1ノードは無視する。 {ON | OFF}
+ valueStr = this.getProperty(GPX_NO_FIRST_NODE);
+ if (valueStr == null) {
+ update = true;
+ this.setProperty(GPX_NO_FIRST_NODE, "ON");
+ }
+
+ //------------------------------------------------
+ // GPX: 基準時刻 {FILE_UPDATE | EXIF}
+ valueStr = this.getProperty(GPX_BASETIME);
if (valueStr == null) {
update = true;
- this.setProperty(EXIF_GPXSPLIT, "ON");
+ this.setProperty(GPX_BASETIME, "FILE_UPDATE");
}
if (update) {
public boolean exif = false;\r
public ArrayList<File> gpxFiles = new ArrayList<>();\r
public AppParameters params;\r
- \r
+ public boolean param_GpxSplit = false;\r
+ public boolean param_GpxNoFirstNode = false;\r
+ \r
@Override\r
public void run() {\r
+ String paramStr = params.getProperty(AppParameters.GPX_GPXSPLIT);\r
+ if ((paramStr != null) && (paramStr.toUpperCase().equals(AppParameters.GPX_GPXSPLIT))) {\r
+ param_GpxSplit = true;\r
+ }\r
+ \r
+ paramStr = params.getProperty(AppParameters.GPX_NO_FIRST_NODE);\r
+ if ((paramStr != null) && (paramStr.toUpperCase().equals(AppParameters.GPX_NO_FIRST_NODE))) {\r
+ param_GpxNoFirstNode = true;\r
+ }\r
+ \r
+ System.out.println(" - param: "+ AppParameters.GPX_GPXSPLIT +"="+ param_GpxSplit);\r
+ System.out.println(" - param: "+ AppParameters.GPX_NO_FIRST_NODE +"="+ param_GpxNoFirstNode); \r
+ System.out.println(" - param: "+ AppParameters.GPX_BASETIME +"="+ params.getProperty(AppParameters.GPX_BASETIME) );\r
\r
/**\r
*\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
+ * <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"></wpt>\r
+ * </gpx>\r
+ */\r
TreeMap<Long,Element> map = new TreeMap<>();\r
Element trk = null;\r
gpx = builder.parse(gpxFile).getFirstChild();\r
gpxEndTime = gpxTime;\r
}\r
}\r
-\r
+ \r
System.out.println(" 時差: "+ (delta / 1000) +"(sec)");\r
System.out.println(" Target GPX: ["+ gpxFile.getAbsolutePath() +"]");\r
System.out.println("GPX start time: "+ dfjp.format(new Date(gpxStartTime)) + "\t[GMT " + dfuk.format(new Date(gpxStartTime))+"]");\r
System.out.println("------------|--------------------|--------------------|------------|------------|--------|------|");\r
change = proc(imgDir, delta, gpxStartTime, gpxEndTime, map, exif, gpx);\r
System.out.println("------------|--------------------|--------------------|------------|------------|--------|------|");\r
- System.out.println(" param: "+ AppParameters.EXIF_GPXSPLIT +"="+ params.getProperty(AppParameters.EXIF_GPXSPLIT) );\r
- System.out.println(" param: "+ AppParameters.GPX_GPXSPLIT +"="+ params.getProperty(AppParameters.GPX_GPXSPLIT) );\r
}\r
\r
// 出力\r
* @param map\r
* @throws ParseException\r
*/\r
- public static void trkptMap(Element trk, TreeMap<Long,Element> map) throws ParseException {\r
+ public void trkptMap(Element trk, TreeMap<Long,Element> map) throws ParseException {\r
dfuk.setTimeZone(TimeZone.getTimeZone("GMT"));\r
\r
NodeList nodes1 = trk.getChildNodes();\r
\r
NodeList nodes3 = trkpt.getChildNodes();\r
for (int i3=0; i3 < nodes3.getLength(); i3++) {\r
+ if (param_GpxNoFirstNode && (i3 == 0)) {\r
+ continue;\r
+ }\r
Node node4 = nodes3.item(i3);\r
if (node4.getNodeName().equals("time")) {\r
Element time = (Element) node4;\r
* </trkpt>\r
* @return\r
* @param map\r
- * @param jptime\r
+ * @param jptime 画像ファイルの撮影日時 ミリ秒(日本時間)\r
* @throws ParseException\r
*/\r
public static Element trkpt(TreeMap<Long,Element> map, Date jptime) throws ParseException {\r
}\r
\r
if (sa < (60000L * 10L)) {\r
- // System.out.println(dfuk.format(jpt) +" ("+ sa +")");\r
+ // GPX時刻との差が10分以内なら有効\r
return ret;\r
}\r
return null;\r