diff --git a/importPicture/doc/EXiF.class.violet.html b/importPicture/doc/EXiF.class.violet.html index d6280ed..dc33285 100644 --- a/importPicture/doc/EXiF.class.violet.html +++ b/importPicture/doc/EXiF.class.violet.html @@ -82,7 +82,7 @@ - + 1 @@ -117,7 +117,10 @@ - + getGPSDirectory(): TiffOutputDirectory + + getGPSDirectory(): TiffOutputDirectory ++ setGPSInDegrees( + longitude: double, + latitude:double) : void @@ -310,472 +313,498 @@ ]]>

- embedded diagram image + embedded diagram image \ No newline at end of file diff --git a/importPicture/src/osm/jp/gpx/ImportPicture.java b/importPicture/src/osm/jp/gpx/ImportPicture.java index 5586322..6bde0cc 100644 --- a/importPicture/src/osm/jp/gpx/ImportPicture.java +++ b/importPicture/src/osm/jp/gpx/ImportPicture.java @@ -569,11 +569,12 @@ } //---- EXIF GPS_ ---- - final String longitudeRef = (longitude < 0 ? "W" : "E"); longitude = Math.abs(longitude); - final String latitudeRef = (latitude < 0 ? "S" : "N"); latitude = Math.abs(latitude); + /* + final String longitudeRef = (longitude < 0 ? "W" : "E"); + final String latitudeRef = (latitude < 0 ? "S" : "N"); gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF); gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LONGITUDE_REF, longitudeRef); gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE_REF); @@ -587,7 +588,7 @@ final double longitudeMinutes = (value.setScale(0, RoundingMode.DOWN)).doubleValue(); value = value.subtract(BigDecimal.valueOf(longitudeMinutes)); value = value.multiply(BigDecimal.valueOf(60)); - final double longitudeSeconds = (value.setScale(0, RoundingMode.DOWN)).doubleValue(); + final double longitudeSeconds = (value.setScale(3, BigDecimal.ROUND_HALF_UP)).doubleValue(); gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LONGITUDE); gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LONGITUDE, RationalNumber.valueOf(longitudeDegrees), @@ -602,12 +603,15 @@ final double latitudeMinutes = (value.setScale(0, RoundingMode.DOWN)).doubleValue(); value = value.subtract(BigDecimal.valueOf(latitudeMinutes)); value = value.multiply(BigDecimal.valueOf(60)); - final double latitudeSeconds = (value.setScale(0, RoundingMode.DOWN)).doubleValue(); gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE); + final double latitudeSeconds = (value.setScale(3, BigDecimal.ROUND_HALF_UP)).doubleValue(); + gpsDir.removeField(GpsTagConstants.GPS_TAG_GPS_LATITUDE); gpsDir.add(GpsTagConstants.GPS_TAG_GPS_LATITUDE, RationalNumber.valueOf(latitudeDegrees), RationalNumber.valueOf(latitudeMinutes), RationalNumber.valueOf(latitudeSeconds)); } + */ + outputSet.setGPSInDegrees(longitude, latitude); } ExifRewriter rewriter = new ExifRewriter(); diff --git a/importPicture/test/osm/jp/gpx/ElementMapTRKPTTest.java b/importPicture/test/osm/jp/gpx/ElementMapTRKPTTest.java index 3388844..a545e23 100644 --- a/importPicture/test/osm/jp/gpx/ElementMapTRKPTTest.java +++ b/importPicture/test/osm/jp/gpx/ElementMapTRKPTTest.java @@ -156,6 +156,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:18Z")); assertThat(tag.eleStr, is(nullValue())); assertThat(tag.lat, is((new Double(values[0][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[0][2])).doubleValue())); assertThat(tag.magvarStr, is(nullValue())); } @@ -165,6 +166,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:18Z")); assertThat(tag.eleStr, is(nullValue())); assertThat(tag.lat, is((new Double(values[0][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[0][2])).doubleValue())); assertThat(tag.magvarStr, is(nullValue())); } @@ -174,6 +176,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:18Z")); assertThat(tag.eleStr, is(nullValue())); assertThat(tag.lat, is((new Double(values[0][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[0][2])).doubleValue())); assertThat(tag.magvarStr, is(nullValue())); } @@ -183,6 +186,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:21Z")); assertThat(tag.eleStr, is("614.90")); assertThat(tag.lat, is((new Double(values[1][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[1][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -192,6 +196,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:21Z")); assertThat(tag.eleStr, is("614.90")); assertThat(tag.lat, is((new Double(values[1][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[1][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -201,6 +206,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:21Z")); assertThat(tag.eleStr, is("614.90")); assertThat(tag.lat, is((new Double(values[1][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[1][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -210,6 +216,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:24Z")); assertThat(tag.eleStr, is("615.00")); assertThat(tag.lat, is((new Double(values[2][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[2][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -219,6 +226,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:24Z")); assertThat(tag.eleStr, is("615.00")); assertThat(tag.lat, is((new Double(values[2][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[2][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -228,6 +236,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:24Z")); assertThat(tag.eleStr, is("615.00")); assertThat(tag.lat, is((new Double(values[2][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[2][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -237,6 +246,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:27Z")); assertThat(tag.eleStr, is("615.03")); assertThat(tag.lat, is((new Double(values[3][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[3][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -246,6 +256,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:27Z")); assertThat(tag.eleStr, is("615.03")); assertThat(tag.lat, is((new Double(values[3][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[3][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } @@ -255,6 +266,7 @@ assertThat(sdf.format(tag.time), is("2017-05-29T10:23:27Z")); assertThat(tag.eleStr, is("615.03")); assertThat(tag.lat, is((new Double(values[3][1])).doubleValue())); + assertThat(tag.lon, is((new Double(values[3][2])).doubleValue())); assertThat(tag.magvarStr, is(notNullValue())); } diff --git a/importPicture/test/osm/jp/gpx/ElementMapTRKSEGTest.java b/importPicture/test/osm/jp/gpx/ElementMapTRKSEGTest.java index 49a2dd8..6545304 100644 --- a/importPicture/test/osm/jp/gpx/ElementMapTRKSEGTest.java +++ b/importPicture/test/osm/jp/gpx/ElementMapTRKSEGTest.java @@ -12,10 +12,9 @@ import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith; -import org.junit.experimental.runners.Enclosed; -@RunWith(Enclosed.class) public class ElementMapTRKSEGTest { + @RunWith(Theories.class) public static class 各種GPXファイルを食わせる { static class Fixture { diff --git a/importPicture/test/osm/jp/gpx/ImportPictureTest.java b/importPicture/test/osm/jp/gpx/ImportPictureTest.java index cda2637..76d0db1 100644 --- a/importPicture/test/osm/jp/gpx/ImportPictureTest.java +++ b/importPicture/test/osm/jp/gpx/ImportPictureTest.java @@ -9,8 +9,6 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; -import java.math.BigDecimal; -import java.math.RoundingMode; import java.nio.channels.FileChannel; import org.apache.commons.compress.archivers.tar.TarArchiveEntry; @@ -27,7 +25,6 @@ import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; -@RunWith(Theories.class) public class ImportPictureTest { static class Expecter { String value; @@ -81,597 +78,563 @@ } } - @DataPoints - public static Fixture[] datas = { - new Fixture( - "[A1].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルはコピー対象外の時", - "testdata/Sony20170518.tar.gz", - "testdata/20170518.gpx", - "testdata/cameradata/20170518.gpx", - "testdata/AdjustTime.20170518.A1.ini", - new Expecter[] { - new Expecter("10170518/20170518_.gpx", true, null, 90.0D, 180.0D, false), - new Expecter("10170518/DSC05183.JPG", false, null, 90.0D, 180.0D, false), - new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 09:34:44", 35.4367520000D, 139.4082730000D, true), - new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 09:37:32", 35.4376820000D, 139.4085150000D, true), - new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 09:46:48", 35.4368560000D, 139.4082190000D, true), - new Expecter("10170518/DSC05205.JPG", false, null, 90.0D, 180.0D, false), - }), - new Fixture( - "[A2].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時", - "testdata/Sony20170518.tar.gz", - "testdata/20170518.gpx", - "testdata/cameradata/20170518.gpx", - "testdata/AdjustTime.20170518.A2.ini", - new Expecter[] { - new Expecter("10170518/20170518_.gpx", true, null, 90.0D, 180.0D, false), - new Expecter("10170518/DSC05183.JPG", true, "2017:05:18 09:16:48", 90.0D, 180.0D, true), - new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 09:34:44", 35.4367520000D, 139.4082730000D, true), - new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 09:37:32", 35.4376820000D, 139.4085150000D, true), - new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 09:46:48", 35.4368560000D, 139.4082190000D, true), - new Expecter("10170518/DSC05205.JPG", true, "2017:05:18 09:48:04", 90.0D, 180.0D, true), - }), + + @RunWith(Theories.class) + public static class 各種カメラGPXファイル { + + @DataPoints + public static Fixture[] datas = { + new Fixture( + "[A1].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルはコピー対象外の時", + "testdata/Sony20170518.tar.gz", + "testdata/20170518.gpx", + "testdata/cameradata/20170518.gpx", + "testdata/AdjustTime.20170518.A1.ini", + new Expecter[] { + new Expecter("10170518/20170518_.gpx", true, null, 90.0D, 180.0D, false), + new Expecter("10170518/DSC05183.JPG", false, null, 90.0D, 180.0D, false), + new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 09:34:44", 35.4367520000D, 139.4082730000D, true), + new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 09:37:32", 35.4376820000D, 139.4085150000D, true), + new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 09:46:48", 35.4368560000D, 139.4082190000D, true), + new Expecter("10170518/DSC05205.JPG", false, null, 90.0D, 180.0D, false), + }), + new Fixture( + "[A2].SONYカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時", + "testdata/Sony20170518.tar.gz", + "testdata/20170518.gpx", + "testdata/cameradata/20170518.gpx", + "testdata/AdjustTime.20170518.A2.ini", + new Expecter[] { + new Expecter("10170518/20170518_.gpx", true, null, 90.0D, 180.0D, false), + new Expecter("10170518/DSC05183.JPG", true, "2017:05:18 09:16:48", 90.0D, 180.0D, true), + new Expecter("10170518/DSC05184.JPG", true, "2017:05:18 09:34:44", 35.4367520000D, 139.4082730000D, true), + new Expecter("10170518/DSC05196.JPG", true, "2017:05:18 09:37:32", 35.4376820000D, 139.4085150000D, true), + new Expecter("10170518/DSC05204.JPG", true, "2017:05:18 09:46:48", 35.4368560000D, 139.4082190000D, true), + new Expecter("10170518/DSC05205.JPG", true, "2017:05:18 09:48:04", 90.0D, 180.0D, true), + }), + + new Fixture( + "[B1].WiMiUSカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルはコピー対象外の時", + "testdata/WiMiUS20170518.tar.gz", + "testdata/20170518.gpx", + "testdata/cameradata/20170518.gpx", + "testdata/AdjustTime.20170518.B1.ini", + new Expecter[] { + new Expecter("cameradata/20170518_.gpx", true, null, 90.0D, 180.0D, false), + new Expecter("cameradata/20170518_092031A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 09:42:26", 35.4366860000D, 139.4082650000D, true), + new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 09:47:36", 35.4368200000D, 139.4082810000D, true), + new Expecter("cameradata/20170518_094827A.jpg", false, null, 90.0D, 180.0D, false), + }), + + new Fixture( + "[B2].WiMiUSカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時", + "testdata/WiMiUS20170518.tar.gz", + "testdata/20170518.gpx", + "testdata/cameradata/20170518.gpx", + "testdata/AdjustTime.20170518.B2.ini", + new Expecter[] { + new Expecter("cameradata/20170518_.gpx", true, null, 90.0D, 180.0D, false), + new Expecter("cameradata/20170518_092031A.jpg", true, "2017:05:18 09:20:30", 90.0D, 180.0D, true), + new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 09:42:26", 35.4366860000D, 139.4082650000D, true), + new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 09:47:36", 35.4368200000D, 139.4082810000D, true), + new Expecter("cameradata/20170518_094827A.jpg", true, "2017:05:18 09:48:26", 90.0D, 180.0D, true), + }), + + new Fixture( + "[M1a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.GarminColorado", + "testdata/separate.tar.gz", + "testdata/muiltiTRK.GarminColorado.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M1a.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M1b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.GarminColorado", + "testdata/separate.tar.gz", + "testdata/muiltiTRK.GarminColorado.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M1b.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true), + new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M1c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.GarminColorado", + "testdata/separate.tar.gz", + "testdata/muiltiTRK.GarminColorado.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M1c.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M1d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.GarminColorado", + "testdata/separate.tar.gz", + "testdata/muiltiTRK.GarminColorado.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M1d.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true), + new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339846227D, 138.0625408050D, true), + }), + + + new Fixture( + "[M2a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20J", + "testdata/separate.tar.gz", + "testdata/multiTRKSEG.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2a.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M2b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20J", + "testdata/separate.tar.gz", + "testdata/multiTRKSEG.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2b.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true), + new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M2c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20J", + "testdata/separate.tar.gz", + "testdata/multiTRKSEG.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2c.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), + }), + + new Fixture( + "[M2d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20J", + "testdata/separate.tar.gz", + "testdata/multiTRKSEG.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2d.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true), + new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), + }), + + new Fixture( + "[M3a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20Jreverse", + "testdata/separate.tar.gz", + "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2a.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M3b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20Jreverse", + "testdata/separate.tar.gz", + "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2b.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true), + new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), + }), + + new Fixture( + "[M3c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20Jreverse", + "testdata/separate.tar.gz", + "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2c.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), + new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), + }), + + new Fixture( + "[M3d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20Jreverse", + "testdata/separate.tar.gz", + "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", + "testdata/cameradata/separate.gpx", + "testdata/AdjustTime.M2d.separate.ini", + new Expecter[] { + // GPX file + new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), + + // out of time ( - 2017-05-29T01:23:18) + new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), + + // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) + new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), + new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), + new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), + + // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) + new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true), + new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), + + // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) + new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), + new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), + + // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) + new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true), + new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true), + + // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) + new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), + new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), + }), + }; + + + @Theory + public void パラメータテスト(Fixture dataset) throws Exception { + ImportPictureTest.setup(dataset); + ImportPictureTest.testdo(dataset.iniFilePath); + //SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", Locale.UK); - new Fixture( - "[B1].WiMiUSカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルはコピー対象外の時", - "testdata/WiMiUS20170518.tar.gz", - "testdata/20170518.gpx", - "testdata/cameradata/20170518.gpx", - "testdata/AdjustTime.20170518.B1.ini", - new Expecter[] { - new Expecter("cameradata/20170518_.gpx", true, null, 90.0D, 180.0D, false), - new Expecter("cameradata/20170518_092031A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 09:42:26", 35.4366860000D, 139.4082650000D, true), - new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 09:47:36", 35.4368200000D, 139.4082810000D, true), - new Expecter("cameradata/20170518_094827A.jpg", false, null, 90.0D, 180.0D, false), - }), - - new Fixture( - "[B2].WiMiUSカメラの場合.FILE_UPDATE時間を基準にして時間外のファイルもコピーする時", - "testdata/WiMiUS20170518.tar.gz", - "testdata/20170518.gpx", - "testdata/cameradata/20170518.gpx", - "testdata/AdjustTime.20170518.B2.ini", - new Expecter[] { - new Expecter("cameradata/20170518_.gpx", true, null, 90.0D, 180.0D, false), - new Expecter("cameradata/20170518_092031A.jpg", true, "2017:05:18 09:20:30", 90.0D, 180.0D, true), - new Expecter("cameradata/20170518_094226A_snap.jpg", true, "2017:05:18 09:42:26", 35.4366860000D, 139.4082650000D, true), - new Expecter("cameradata/20170518_094737A.jpg", true, "2017:05:18 09:47:36", 35.4368200000D, 139.4082810000D, true), - new Expecter("cameradata/20170518_094827A.jpg", true, "2017:05:18 09:48:26", 90.0D, 180.0D, true), - }), - - new Fixture( - "[M1a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.GarminColorado", - "testdata/separate.tar.gz", - "testdata/muiltiTRK.GarminColorado.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M1a.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M1b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.GarminColorado", - "testdata/separate.tar.gz", - "testdata/muiltiTRK.GarminColorado.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M1b.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true), - new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M1c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.GarminColorado", - "testdata/separate.tar.gz", - "testdata/muiltiTRK.GarminColorado.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M1c.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M1d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.GarminColorado", - "testdata/separate.tar.gz", - "testdata/muiltiTRK.GarminColorado.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M1d.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true), - new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339846227D, 138.0625408050D, true), - }), - - - new Fixture( - "[M2a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20J", - "testdata/separate.tar.gz", - "testdata/multiTRKSEG.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2a.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M2b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20J", - "testdata/separate.tar.gz", - "testdata/multiTRKSEG.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2b.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true), - new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M2c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20J", - "testdata/separate.tar.gz", - "testdata/multiTRKSEG.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2c.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), - }), - - new Fixture( - "[M2d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20J", - "testdata/separate.tar.gz", - "testdata/multiTRKSEG.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2d.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true), - new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), - }), - - new Fixture( - "[M3a].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20Jreverse", - "testdata/separate.tar.gz", - "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2a.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M3b].GPXが複数のTRKSEGに分割している場合.FILE_UPDATE時間を基準.eTrex_20Jreverse", - "testdata/separate.tar.gz", - "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2b.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:06", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:04", 35.8808881603D, 137.9979396332D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:10", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:14", 90.0D, 180.0D, true), - new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:44", 90.0D, 180.0D, true), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:18", 35.8339846227D, 138.0625408050D, true), - }), - - new Fixture( - "[M3c].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20Jreverse", - "testdata/separate.tar.gz", - "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2c.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102314A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_102418A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", false, null, 90.0D, 180.0D, false), - new Expecter("separate/20170529_103545A.jpg", false, null, 90.0D, 180.0D, false), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), - }), - - new Fixture( - "[M3d].GPXが複数のTRKSEGに分割している場合.EXIF時間を基準.eTrex_20Jreverse", - "testdata/separate.tar.gz", - "testdata/multiTRKSEGreverse.eTrex_20J.gpx.xml", - "testdata/cameradata/separate.gpx", - "testdata/AdjustTime.M2d.separate.ini", - new Expecter[] { - // GPX file - new Expecter("separate/separate_.gpx", true, null, 90.0D, 180.0D, false), - - // out of time ( - 2017-05-29T01:23:18) - new Expecter("separate/20170529_102305A.jpg", true, "2017:05:29 10:23:05", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102314A.jpg", true, "2017:05:29 10:23:14", 90.0D, 180.0D, true), - - // in TRKSEG(1) (2017-05-29T01:23:18 - 2017-05-29T01:24:05) - new Expecter("separate/20170529_102318A.jpg", true, "2017:05:29 10:23:18", 35.8812697884D, 137.9952202085D, true), - new Expecter("separate/20170529_102322A.jpg", true, "2017:05:29 10:23:22", 35.8810500987D, 137.9951669835D, true), - new Expecter("separate/20170529_102405A.jpg", true, "2017:05:29 10:24:05", 35.8808641881D, 137.9981065169D, true), - - // out of time (2017-05-29T01:24:05 - 2017-05-29T01:24:37) - new Expecter("separate/20170529_102409A.jpg", true, "2017:05:29 10:24:09", 90.0D, 180.0D, true), - new Expecter("separate/20170529_102418A.jpg", true, "2017:05:29 10:24:18", 90.0D, 180.0D, true), - - // in TRKSEG(2) (2017-05-29T01:24:37 - 2017-05-29T01:33:03) - new Expecter("separate/20170529_102448A.jpg", true, "2017:05:29 10:24:48", 35.8788877353D, 138.0039562471D, true), - new Expecter("separate/20170529_103246A.jpg", true, "2017:05:29 10:32:46", 35.8405660931D, 138.0353022180D, true), - - // out of time (2017-05-29T01:33:03 - 2017-05-29T01:35:53) - new Expecter("separate/20170529_103315A.jpg", true, "2017:05:29 10:33:15", 90.0D, 180.0D, true), - new Expecter("separate/20170529_103545A.jpg", true, "2017:05:29 10:35:45", 90.0D, 180.0D, true), - - // in TRKSEG(3) (2017-05-29T01:35:53 - 2017-05-29T01:47:35) - new Expecter("separate/20170529_103615A.jpg", true, "2017:05:29 10:36:14", 35.8359798510D, 138.0600296706D, true), - new Expecter("separate/20170529_104119A.jpg", true, "2017:05:29 10:41:19", 35.8339889813D, 138.0625394639D, true), - }), - }; - - - @Theory - public void パラメータテスト(Fixture dataset) throws Exception { - ImportPictureTest.setup(dataset); - ImportPictureTest.testdo(dataset.iniFilePath); - //SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss", Locale.UK); - - Expecter[] es = dataset.expecters; - AppParameters params = new AppParameters(dataset.iniFilePath); - File outDir = new File(params.getProperty(AppParameters.IMG_OUTPUT_FOLDER)); - for (int i = 0; i < es.length; i++) { - File file = new File(outDir, es[i].value); - System.out.println("[JUnit.debug] assert file='"+ file.getAbsolutePath() +"'"); - assertThat(file.exists(), is(es[i].expect)); - if (es[i].timeStr != null) { - // JPEG メタデータが存在すること - ImageMetadata meta = Imaging.getMetadata(file); - - // メタデータは インスタンスJpegImageMetadata であること - assertThat((meta instanceof JpegImageMetadata), is(true)); - - JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta; - assertNotNull(jpegMetadata); - - // EXIFデータが存在すること - TiffImageMetadata exif = jpegMetadata.getExif(); - assertNotNull(exif); - - // EXIF-TIME が正しく設定されていること - String exifTime = ImportPicture.toEXIFString(ImportPicture.toEXIFDate(exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0])); - System.out.println("[debug] exifTime = '"+ exifTime +"' <--> '"+ es[i].timeStr +"'"); - assertThat(exifTime, is(es[i].timeStr)); - - // LAT,LON - GPSInfo gpsInfo = exif.getGPS(); - if (es[i].latD != 90.0D) { - //assertThat(comparePosition(gpsInfo.getLatitudeAsDegreesNorth(), es[i].latD), is(true)); - assertThat(String.format("%.7f", gpsInfo.getLatitudeAsDegreesNorth()), is(comparePosition(es[i].latD))); - } - if (es[i].lonD != 180.0D) { - //assertThat(comparePosition(gpsInfo.getLongitudeAsDegreesEast(), es[i].lonD), is(true)); - assertThat(String.format("%.7f", gpsInfo.getLongitudeAsDegreesEast()), is(comparePosition(es[i].lonD))); - } - } + Expecter[] es = dataset.expecters; + AppParameters params = new AppParameters(dataset.iniFilePath); + File outDir = new File(params.getProperty(AppParameters.IMG_OUTPUT_FOLDER)); + for (int i = 0; i < es.length; i++) { + File file = new File(outDir, es[i].value); + System.out.println("[JUnit.debug] assert file='"+ file.getAbsolutePath() +"'"); + assertThat(file.exists(), is(es[i].expect)); + if (es[i].timeStr != null) { + // JPEG メタデータが存在すること + ImageMetadata meta = Imaging.getMetadata(file); + + // メタデータは インスタンスJpegImageMetadata であること + assertThat((meta instanceof JpegImageMetadata), is(true)); + + JpegImageMetadata jpegMetadata = (JpegImageMetadata)meta; + assertNotNull(jpegMetadata); + + // EXIFデータが存在すること + TiffImageMetadata exif = jpegMetadata.getExif(); + assertNotNull(exif); + + // EXIF-TIME が正しく設定されていること + String exifTime = ImportPicture.toEXIFString(ImportPicture.toEXIFDate(exif.getFieldValue(ExifTagConstants.EXIF_TAG_DATE_TIME_ORIGINAL)[0])); + System.out.println("[debug] exifTime = '"+ exifTime +"' <--> '"+ es[i].timeStr +"'"); + assertThat(exifTime, is(es[i].timeStr)); + + // LAT,LON + GPSInfo gpsInfo = exif.getGPS(); + if (es[i].latD != 90.0D) { + //assertThat(comparePosition(gpsInfo.getLatitudeAsDegreesNorth(), es[i].latD), is(true)); + assertThat(String.format("%.7f", gpsInfo.getLatitudeAsDegreesNorth()), is(comparePosition(es[i].latD))); + } + if (es[i].lonD != 180.0D) { + //assertThat(comparePosition(gpsInfo.getLongitudeAsDegreesEast(), es[i].lonD), is(true)); + assertThat(String.format("%.7f", gpsInfo.getLongitudeAsDegreesEast()), is(comparePosition(es[i].lonD))); + } + } + } } - } - - static String comparePosition(double b) { - //System.out.println(String.format("a=%.10f : b=%.10f", a, b)); - BigDecimal bB = BigDecimal.valueOf(b); - int degreesB = (bB.setScale(0, RoundingMode.DOWN)).intValue(); - bB = bB.subtract(BigDecimal.valueOf(degreesB)); - bB = bB.multiply(BigDecimal.valueOf(60)); - int minutesB = (bB.setScale(0, RoundingMode.DOWN)).intValue(); - bB = bB.subtract(BigDecimal.valueOf(minutesB)); - bB = bB.multiply(BigDecimal.valueOf(60)); - int secondsB = (bB.setScale(0, RoundingMode.DOWN)).intValue(); - - BigDecimal aB = BigDecimal.valueOf(secondsB); - aB = aB.divide(BigDecimal.valueOf(60), 7, RoundingMode.HALF_UP); - aB = aB.add(BigDecimal.valueOf(minutesB)); - aB = aB.divide(BigDecimal.valueOf(60), 7, RoundingMode.HALF_UP); - aB = aB.add(BigDecimal.valueOf(degreesB)); + static String comparePosition(double b) { + return String.format("%.7f", b); + } - /* - BigDecimal aB = BigDecimal.valueOf(a); - int degreesA = (aB.setScale(0, RoundingMode.DOWN)).intValue(); - aB = aB.subtract(BigDecimal.valueOf(degreesA)); - aB = aB.multiply(BigDecimal.valueOf(60)); - int minutesA = (aB.setScale(0, RoundingMode.DOWN)).intValue(); - aB = aB.subtract(BigDecimal.valueOf(minutesA)); - aB = aB.multiply(BigDecimal.valueOf(60)); - int secondsA = (aB.setScale(0, RoundingMode.DOWN)).intValue(); - System.out.println(String.format("a=%2d : b=%2d", degreesA, degreesB)); - if (degreesA != degreesB) { - return false; - } - System.out.println(String.format("a=%2d : b=%2d", minutesA, minutesB)); - if (minutesA != minutesB) { - return false; - } - System.out.println(String.format("a=%2d : b=%2d", secondsA, secondsB)); - if (secondsA != secondsB) { - return false; - } - return true; - */ - return String.format("%.7f", aB.doubleValue()); - } - - /** - * 小数点第8位で四捨五入した文字列 - * @param d - * @return - */ - static String round7(double d) { - return String.format("%.7f", d); + /** + * 小数点第8位で四捨五入した文字列 + * @param d + * @return + */ + static String round7(double d) { + return String.format("%.7f", d); + } + } static void setup(Fixture dataset) throws IOException {