diff --git a/README.md b/README.md index a33087d..16b4599 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,16 @@ Takes a specified number of frames per second from input file. Creates the output video at a specified fps. +Optionally add a map overlay based on GPS data. + Suggest defaults are 1 frame per second from the input file and 30 FPS in the output video. -Uses Python3 and MoviePy +Uses Python3 with MoviePy and PIL ## Upcoming features -* Allowing multiple input files to one unified output file +* Map PiP mode with static map and location designated by a moving dot * Option to create video with range of output FPS values and input frame sample rate * Rounding on times given * Code cleanup/refactoring @@ -33,3 +35,9 @@ This script was used to produce the time lapse videos below: [1 frame per 32s of source footage, 30fps output](https://youtu.be/Tq79p_1vb_8) [1 frame per 64s of source footage, 30fps output](https://youtu.be/falzE-nRTfA) + +Map PiP videos: + +[1 frame per 8s, 30fps output](https://www.youtube.com/watch?v=gI6gy8nDAzg) + +[1 frame per 4s, 30fps output](BROKEN - not yet created) diff --git a/test/gpsdata.log b/test/gpsdata.log new file mode 100644 index 0000000..faa49a3 --- /dev/null +++ b/test/gpsdata.log @@ -0,0 +1,600 @@ +A,180318,222148,3443.6118,N,8229.5257,W,61.2,0.09,1.04,0.07; +A,180318,222149,3443.5961,N,8229.5338,W,60.9,-0.03,1.09,0.02; +A,180318,222150,3443.5806,N,420.0000,W,60.5,0.07,1.14,-0.09; +A,180318,222151,3443.5651,N,8229.5501,W,60.5,-0.07,1.06,0.03; +A,180318,222152,3443.5496,N,8229.5582,W,60.5,-0.07,1.02,-0.05; +A,180318,222153,3443.5343,N,8229.5663,W,60.5,0.05,1.10,-0.03; +A,180318,222154,3443.5191,N,8229.5747,W,60.1,0.02,1.14,0.04; +A,180318,222155,3443.5040,N,8229.5829,W,60.1,0.04,0.98,-0.04; +A,180318,222156,3443.4888,N,8229.5910,W,60.1,0.03,0.98,0.07; +A,180318,222157,3443.4735,N,8229.5988,W,59.9,-0.09,1.13,0.13; +A,180318,222158,3443.4583,N,8229.6066,W,59.4,0.02,0.97,0.07; +A,180318,222159,3443.4431,N,8229.6145,W,59.8,0.03,1.09,0.09; +A,180318,222200,3443.4278,N,8229.6225,W,59.9,0.09,0.90,-0.05; +A,180318,222201,3443.4124,N,8229.6307,W,59.9,0.09,1.05,0.12; +A,180318,222202,3443.3971,N,8229.6387,W,59.7,0.11,1.05,0.14; +A,180318,222203,3443.3819,N,8229.6469,W,59.5,-0.02,0.98,0.03; +A,180318,222204,3443.3667,N,8229.6552,W,60.1,-0.05,1.02,0.11; +A,180318,222205,3443.3513,N,8229.6635,W,61.3,-0.26,0.89,-0.03; +A,180318,222206,3443.3360,N,8229.6719,W,60.9,-0.04,1.11,0.05; +A,180318,222207,3443.3207,N,8229.6805,W,61.1,-0.05,1.07,-0.05; +A,180318,222208,3443.3052,N,8229.6889,W,60.9,0.04,0.91,0.08; +A,180318,222209,3443.2895,N,8229.6971,W,60.9,-0.02,0.98,0.00; +A,180318,222210,3443.2738,N,8229.7054,W,61.0,-0.09,1.04,-0.05; +A,180318,222211,3443.2583,N,8229.7136,W,60.4,-0.07,0.97,-0.11; +A,180318,222212,3443.2430,N,8229.7221,W,60.6,-0.03,1.00,-0.12; +A,180318,222213,3443.2274,N,8229.7304,W,61.0,-0.06,1.19,0.12; +A,180318,222214,3443.2118,N,8229.7386,W,60.9,0.08,1.10,0.03; +A,180318,222215,3443.1963,N,8229.7467,W,60.5,0.15,0.96,-0.07; +A,180318,222216,3443.1807,N,8229.7549,W,60.5,-0.02,1.11,-0.07; +A,180318,222217,3443.1651,N,8229.7632,W,60.9,-0.05,1.00,-0.02; +A,180318,222218,3443.1497,N,8229.7717,W,60.7,0.09,1.04,-0.04; +A,180318,222219,3443.1342,N,8229.7801,W,60.7,0.02,1.01,-0.02; +A,180318,222220,3443.1187,N,8229.7885,W,60.6,0.06,1.07,0.02; +A,180318,222221,3443.1034,N,8229.7969,W,60.3,-0.10,1.09,0.06; +A,180318,222222,3443.0880,N,8229.8053,W,60.5,-0.01,1.13,0.12; +A,180318,222223,3443.0729,N,8229.8136,W,59.6,0.00,1.08,0.08; +A,180318,222224,3443.0577,N,8229.8220,W,59.6,0.10,1.06,0.09; +A,180318,222225,3443.0425,N,8229.8303,W,59.1,0.11,0.96,-0.12; +A,180318,222226,3443.0274,N,8229.8385,W,59.7,0.02,0.97,0.05; +A,180318,222227,3443.0120,N,8229.8467,W,60.3,-0.07,0.98,-0.04; +A,180318,222228,3442.9963,N,8229.8550,W,61.0,0.09,0.91,-0.04; +A,180318,222229,3442.9805,N,8229.8629,W,60.9,-0.02,0.94,0.02; +A,180318,222230,3442.9647,N,8229.8705,W,60.5,0.02,0.96,-0.05; +A,180318,222231,3442.9489,N,8229.8776,W,60.5,-0.16,0.98,-0.05; +A,180318,222232,3442.9329,N,8229.8845,W,60.5,0.13,0.97,0.01; +A,180318,222233,3442.9165,N,8229.8911,W,61.4,-0.02,1.04,0.15; +A,180318,222234,3442.9004,N,8229.8974,W,60.6,0.02,1.03,0.09; +A,180318,222235,3442.8841,N,8229.9033,W,60.6,0.05,1.16,0.09; +A,180318,222236,3442.8680,N,8229.9085,W,60.2,-0.09,1.00,-0.09; +A,180318,222237,3442.8518,N,8229.9134,W,59.8,0.05,0.95,0.03; +A,180318,222238,3442.8356,N,8229.9181,W,60.3,-0.02,0.99,-0.05; +A,180318,222239,3442.8193,N,8229.9226,W,60.4,0.00,1.11,0.16; +A,180318,222240,3442.8028,N,8229.9271,W,61.1,0.09,0.99,0.03; +A,180318,222241,3442.7864,N,8229.9315,W,60.6,0.01,0.89,-0.06; +A,180318,222242,3442.7701,N,8229.9358,W,60.7,0.04,1.24,0.11; +A,180318,222243,3442.7537,N,8229.9402,W,61.0,-0.22,1.03,-0.02; +A,180318,222244,3442.7373,N,8229.9446,W,61.0,0.09,1.02,-0.06; +A,180318,222245,3442.7207,N,8229.9490,W,60.9,-0.02,1.05,-0.01; +A,180318,222246,3442.7042,N,8229.9534,W,60.6,-0.04,1.03,0.09; +A,180318,222247,3442.6877,N,8229.9577,W,60.5,0.03,1.02,-0.04; +A,180318,222248,3442.6712,N,8229.9619,W,60.5,-0.23,1.03,-0.05; +A,180318,222249,3442.6546,N,8229.9662,W,60.9,0.00,1.05,-0.16; +A,180318,222250,3442.6382,N,8229.9706,W,60.7,-0.08,1.02,-0.03; +A,180318,222251,3442.6218,N,8229.9751,W,60.7,0.00,0.91,0.05; +A,180318,222252,3442.6052,N,8229.9795,W,60.7,0.17,0.96,-0.05; +A,180318,222253,3442.5886,N,8229.9839,W,61.2,0.09,0.95,-0.09; +A,180318,222254,3442.5721,N,8229.9884,W,60.9,0.05,1.00,-0.09; +A,180318,222255,3442.5555,N,8229.9926,W,60.4,-0.05,1.06,-0.05; +A,180318,222256,3442.5388,N,8229.9967,W,60.7,0.07,0.98,-0.08; +A,180318,222257,3442.5223,N,8230.0008,W,60.7,0.18,1.07,0.05; +A,180318,222258,3442.5057,N,8230.0051,W,60.4,0.28,0.89,-0.11; +A,180318,222259,3442.4892,N,8230.0096,W,60.8,-0.20,0.92,-0.10; +A,180318,222300,3442.4726,N,8230.0141,W,60.8,0.08,0.94,-0.09; +A,180318,222301,3442.4562,N,8230.0188,W,60.5,0.09,1.09,0.10; +A,180318,222302,3442.4398,N,8230.0235,W,60.3,-0.08,0.88,-0.12; +A,180318,222303,3442.4233,N,8230.0282,W,60.7,0.02,1.09,0.01; +A,180318,222304,3442.4068,N,8230.0328,W,60.2,-0.06,1.09,0.06; +A,180318,222305,3442.3904,N,8230.0374,W,60.2,0.04,1.07,0.04; +A,180318,222306,3442.3739,N,8230.0419,W,60.2,0.01,0.87,-0.14; +A,180318,222307,3442.3574,N,8230.0463,W,60.9,0.05,0.95,-0.10; +A,180318,222308,3442.3409,N,8230.0507,W,60.4,-0.09,1.02,-0.03; +A,180318,222309,3442.3245,N,8230.0551,W,60.3,0.04,1.02,-0.07; +A,180318,222310,3442.3079,N,8230.0593,W,60.8,-0.03,1.20,0.05; +A,180318,222311,3442.2913,N,8230.0637,W,61.1,0.00,1.04,0.04; +A,180318,222312,3442.2747,N,8230.0680,W,61.1,0.09,0.99,-0.13; +A,180318,222313,3442.2582,N,8230.0725,W,61.0,0.12,0.97,-0.01; +A,180318,222314,3442.2416,N,8230.0770,W,60.8,-0.10,0.97,0.05; +A,180318,222315,3442.2252,N,8230.0815,W,61.1,0.06,0.99,-0.05; +A,180318,222316,3442.2086,N,8230.0859,W,61.1,0.16,1.05,0.08; +A,180318,222317,3442.1922,N,8230.0903,W,60.8,0.02,0.92,-0.06; +A,180318,222318,3442.1759,N,8230.0946,W,60.4,0.08,0.98,-0.10; +A,180318,222319,3442.1597,N,8230.0991,W,60.0,0.11,0.91,-0.06; +A,180318,222320,3442.1434,N,8230.1034,W,60.0,0.00,1.00,-0.09; +A,180318,222321,3442.1272,N,8230.1078,W,60.0,-0.01,0.88,-0.10; +A,180318,222322,3442.1111,N,8230.1123,W,59.4,0.01,1.05,-0.08; +A,180318,222323,3442.0951,N,8230.1166,W,58.8,0.10,1.03,-0.03; +A,180318,222324,3442.0791,N,8230.1210,W,59.1,-0.03,0.89,-0.16; +A,180318,222325,3442.0631,N,8230.1252,W,59.5,-0.02,1.06,0.05; +A,180318,222326,3442.0469,N,8230.1293,W,59.2,0.04,1.08,-0.12; +A,180318,222327,3442.0308,N,8230.1333,W,59.2,-0.04,1.08,0.01; +A,180318,222328,3442.0147,N,8230.1375,W,59.5,0.00,0.96,-0.04; +A,180318,222329,3441.9986,N,8230.1419,W,59.6,0.10,1.05,-0.05; +A,180318,222330,3441.9824,N,8230.1465,W,59.3,-0.04,1.01,-0.01; +A,180318,222331,3441.9663,N,8230.1509,W,59.3,0.00,1.13,0.07; +A,180318,222332,3441.9500,N,8230.1552,W,60.0,0.00,0.95,-0.07; +A,180318,222333,3441.9336,N,8230.1595,W,59.7,-0.05,0.98,-0.02; +A,180318,222334,3441.9174,N,8230.1637,W,59.6,0.02,1.09,0.11; +A,180318,222335,3441.9012,N,8230.1681,W,60.0,0.01,1.07,-0.05; +A,180318,222336,3441.8850,N,8230.1726,W,59.7,0.01,0.91,-0.11; +A,180318,222337,3441.8689,N,8230.1770,W,59.3,0.01,0.93,-0.05; +A,180318,222338,3441.8528,N,8230.1816,W,59.7,0.05,1.01,-0.02; +A,180318,222339,3441.8367,N,8230.1865,W,59.4,-0.19,1.02,-0.05; +A,180318,222340,3441.8207,N,8230.1916,W,59.5,0.15,1.12,0.12; +A,180318,222341,3441.8047,N,8230.1970,W,59.8,-0.13,1.04,-0.02; +A,180318,222342,3441.7887,N,8230.2028,W,60.0,0.04,1.18,0.05; +A,180318,222343,3441.7730,N,8230.2091,W,59.6,-0.18,0.97,-0.02; +A,180318,222344,3441.7574,N,8230.2159,W,59.3,-0.04,1.03,-0.04; +A,180318,222345,3441.7420,N,8230.2234,W,59.5,-0.03,1.16,0.05; +A,180318,222346,3441.7269,N,8230.2318,W,59.9,-0.02,0.98,-0.09; +A,180318,222347,3441.7120,N,8230.2408,W,59.9,-0.06,0.97,-0.03; +A,180318,222348,3441.6975,N,8230.2507,W,60.1,-0.05,1.12,0.02; +A,180318,222349,3441.6832,N,8230.2611,W,60.1,0.11,1.02,0.02; +A,180318,222350,3441.6691,N,8230.2721,W,60.4,-0.19,0.93,-0.09; +A,180318,222351,3441.6556,N,8230.2841,W,60.3,0.07,0.98,-0.06; +A,180318,222352,3441.6423,N,8230.2969,W,59.8,-0.13,1.03,-0.05; +A,180318,222353,3441.6293,N,8230.3097,W,59.8,-0.10,1.00,-0.10; +A,180318,222354,3441.6165,N,8230.3228,W,59.8,-0.02,0.91,-0.03; +A,180318,222355,3441.6038,N,8230.3360,W,59.8,-0.16,0.91,-0.12; +A,180318,222356,3441.5915,N,8230.3496,W,59.9,0.01,1.13,0.02; +A,180318,222357,3441.5794,N,8230.3635,W,59.9,0.05,1.04,-0.02; +A,180318,222358,3441.5674,N,8230.3778,W,59.9,-0.13,1.04,-0.03; +A,180318,222359,3441.5556,N,8230.3921,W,59.9,0.07,0.99,-0.02; +A,180318,222400,3441.5438,N,8230.4063,W,59.9,-0.11,0.97,-0.16; +A,180318,222401,3441.5319,N,8230.4204,W,59.9,-0.03,1.11,0.05; +A,180318,222402,3441.5200,N,8230.4344,W,59.6,0.09,1.01,-0.05; +A,180318,222403,3441.5082,N,8230.4485,W,59.8,-0.12,1.03,-0.02; +A,180318,222404,3441.4964,N,8230.4625,W,59.6,0.04,1.10,-0.05; +A,180318,222405,3441.4846,N,8230.4766,W,60.0,0.03,1.01,-0.14; +A,180318,222406,3441.4729,N,8230.4908,W,59.9,0.05,1.01,-0.02; +A,180318,222407,3441.4612,N,8230.5051,W,59.7,0.02,1.09,0.03; +A,180318,222408,3441.4493,N,8230.5193,W,60.1,-0.06,1.13,0.01; +A,180318,222409,3441.4375,N,8230.5336,W,60.0,0.05,1.10,0.02; +A,180318,222410,3441.4257,N,8230.5478,W,59.9,0.00,1.09,0.03; +A,180318,222411,3441.4139,N,8230.5619,W,59.6,-0.02,0.98,-0.04; +A,180318,222412,3441.4019,N,8230.5758,W,59.4,-0.09,1.05,-0.14; +A,180318,222413,3441.3901,N,8230.5898,W,59.8,-0.05,1.02,-0.09; +A,180318,222414,3441.3783,N,8230.6039,W,59.5,-0.02,1.14,-0.04; +A,180318,222415,3441.3665,N,8230.6177,W,59.0,0.04,0.98,-0.05; +A,180318,222416,3441.3546,N,8230.6314,W,58.9,0.15,1.06,0.09; +A,180318,222417,3441.3428,N,8230.6453,W,59.1,-0.03,0.99,-0.07; +A,180318,222418,3441.3310,N,8230.6592,W,59.3,0.04,1.02,-0.08; +A,180318,222419,3441.3193,N,8230.6732,W,59.3,0.02,1.09,-0.05; +A,180318,222420,3441.3074,N,8230.6872,W,59.7,-0.03,1.12,0.05; +A,180318,222421,3441.2957,N,8230.7013,W,59.3,0.00,0.96,0.01; +A,180318,222422,3441.2841,N,8230.7155,W,59.1,0.04,0.96,0.03; +A,180318,222423,3441.2724,N,8230.7295,W,59.1,-0.05,1.09,-0.02; +A,180318,222424,3441.2606,N,8230.7434,W,59.6,-0.02,1.05,0.02; +A,180318,222425,3441.2486,N,8230.7574,W,59.7,-0.02,1.05,-0.02; +A,180318,222426,3441.2366,N,8230.7714,W,59.7,0.05,0.94,-0.05; +A,180318,222427,3441.2246,N,8230.7853,W,59.8,0.01,1.04,0.08; +A,180318,222428,3441.2127,N,8230.7994,W,59.7,-0.07,1.02,-0.06; +A,180318,222429,3441.2008,N,8230.8134,W,59.7,0.05,1.13,-0.03; +A,180318,222430,3441.1890,N,8230.8275,W,59.7,0.00,1.03,0.05; +A,180318,222431,3441.1772,N,8230.8417,W,59.7,-0.05,1.00,0.00; +A,180318,222432,3441.1655,N,8230.8561,W,59.7,-0.06,1.09,0.09; +A,180318,222433,3441.1541,N,8230.8708,W,59.7,-0.04,0.95,-0.09; +A,180318,222434,3441.1430,N,8230.8857,W,59.6,-0.05,1.13,0.05; +A,180318,222435,3441.1320,N,8230.9007,W,59.4,-0.01,0.98,0.10; +A,180318,222436,3441.1211,N,8230.9158,W,59.6,-0.02,0.97,0.04; +A,180318,222437,3441.1105,N,8230.9314,W,59.9,-0.04,1.05,-0.01; +A,180318,222438,3441.1000,N,8230.9471,W,59.9,-0.18,0.95,-0.08; +A,180318,222439,3441.0897,N,8230.9630,W,59.9,0.05,1.11,0.14; +A,180318,222440,3441.0798,N,8230.9792,W,59.4,-0.02,1.11,0.05; +A,180318,222441,3441.0703,N,8230.9955,W,59.1,0.00,0.99,0.03; +A,180318,222442,3441.0610,N,8231.0121,W,59.7,0.10,0.95,-0.11; +A,180318,222443,3441.0522,N,8231.0293,W,59.7,-0.09,1.14,0.05; +A,180318,222444,3441.0434,N,8231.0463,W,59.3,0.03,1.05,0.05; +A,180318,222445,3441.0351,N,8231.0637,W,59.3,0.10,1.08,-0.02; +A,180318,222446,3441.0270,N,8231.0812,W,59.7,-0.01,1.07,0.05; +A,180318,222447,3441.0189,N,8231.0986,W,59.0,0.02,1.10,-0.06; +A,180318,222448,3441.0107,N,8231.1161,W,59.6,-0.02,1.02,0.02; +A,180318,222449,3441.0025,N,8231.1336,W,59.8,-0.02,1.13,0.00; +A,180318,222450,3440.9943,N,8231.1511,W,59.8,-0.07,1.02,0.03; +A,180318,222451,3440.9861,N,8231.1686,W,59.7,-0.08,0.97,-0.04; +A,180318,222452,3440.9779,N,8231.1860,W,59.5,0.00,0.95,-0.10; +A,180318,222453,3440.9698,N,8231.2033,W,59.3,-0.02,1.09,0.08; +A,180318,222454,3440.9615,N,8231.2205,W,59.3,-0.02,1.08,-0.05; +A,180318,222455,3440.9533,N,8231.2379,W,59.6,-0.01,1.07,0.05; +A,180318,222456,3440.9451,N,8231.2552,W,59.3,-0.05,1.14,0.05; +A,180318,222457,3440.9370,N,8231.2726,W,59.3,0.15,0.92,-0.08; +A,180318,222458,3440.9289,N,8231.2898,W,59.3,-0.03,0.98,-0.02; +A,180318,222459,3440.9207,N,8231.3070,W,59.3,0.05,1.03,0.00; +A,180318,222500,3440.9124,N,8231.3242,W,59.3,0.00,0.99,-0.01; +A,180318,222501,3440.9041,N,8231.3413,W,58.8,0.12,1.05,0.01; +A,180318,222502,3440.8959,N,8231.3585,W,59.0,-0.12,1.03,-0.12; +A,180318,222503,3440.8876,N,8231.3758,W,59.5,-0.03,1.05,-0.02; +A,180318,222504,3440.8793,N,8231.3931,W,59.2,0.01,1.09,-0.02; +A,180318,222505,3440.8709,N,8231.4104,W,59.5,-0.06,1.02,0.03; +A,180318,222506,3440.8625,N,8231.4275,W,59.3,0.02,1.02,0.03; +A,180318,222507,3440.8543,N,8231.4446,W,59.3,0.08,0.96,-0.05; +A,180318,222508,3440.8461,N,8231.4619,W,60.1,0.05,1.10,0.11; +A,180318,222509,3440.8377,N,8231.4791,W,59.6,-0.02,1.05,-0.06; +A,180318,222510,3440.8296,N,8231.4964,W,59.2,0.02,1.02,-0.05; +A,180318,222511,3440.8213,N,8231.5135,W,59.2,0.03,1.11,0.07; +A,180318,222512,3440.8131,N,8231.5306,W,59.2,-0.02,0.98,0.11; +A,180318,222513,3440.8049,N,8231.5478,W,59.2,-0.01,1.13,-0.01; +A,180318,222514,3440.7968,N,8231.5652,W,59.3,0.02,1.13,0.07; +A,180318,222515,3440.7887,N,8231.5826,W,59.5,0.00,0.95,-0.09; +A,180318,222516,3440.7803,N,8231.5999,W,59.9,-0.03,1.03,-0.01; +A,180318,222517,3440.7719,N,8231.6173,W,59.6,0.04,0.98,0.01; +A,180318,222518,3440.7636,N,8231.6347,W,59.5,0.13,1.07,0.03; +A,180318,222519,3440.7554,N,8231.6521,W,59.6,-0.17,1.02,-0.01; +A,180318,222520,3440.7472,N,8231.6694,W,59.0,-0.09,0.98,-0.08; +A,180318,222521,3440.7389,N,8231.6866,W,59.3,0.02,1.20,0.12; +A,180318,222522,3440.7306,N,8231.7039,W,59.3,0.05,0.98,-0.05; +A,180318,222523,3440.7223,N,8231.7213,W,59.3,-0.04,1.05,0.05; +A,180318,222524,3440.7141,N,8231.7388,W,59.2,0.15,1.08,0.06; +A,180318,222525,3440.7059,N,8231.7561,W,58.9,-0.02,1.02,0.04; +A,180318,222526,3440.6975,N,8231.7734,W,59.4,0.02,1.05,0.03; +A,180318,222527,3440.6890,N,8231.7908,W,59.4,0.04,0.95,-0.08; +A,180318,222528,3440.6806,N,8231.8082,W,59.2,0.05,1.06,0.05; +A,180318,222529,3440.6722,N,8231.8254,W,58.9,-0.02,1.08,0.04; +A,180318,222530,3440.6638,N,8231.8428,W,59.3,-0.05,1.02,-0.01; +A,180318,222531,3440.6557,N,8231.8601,W,58.8,-0.05,1.03,-0.06; +A,180318,222532,3440.6476,N,8231.8773,W,58.8,-0.01,0.98,0.01; +A,180318,222533,3440.6396,N,8231.8947,W,59.1,0.07,1.04,0.04; +A,180318,222534,3440.6314,N,8231.9121,W,59.4,-0.01,1.05,-0.02; +A,180318,222535,3440.6230,N,8231.9295,W,59.8,-0.10,0.96,-0.01; +A,180318,222536,3440.6146,N,8231.9468,W,58.9,0.16,1.13,0.09; +A,180318,222537,3440.6064,N,8231.9640,W,58.9,0.01,1.08,0.05; +A,180318,222538,3440.5981,N,8231.9812,W,58.9,-0.01,1.00,-0.03; +A,180318,222539,3440.5899,N,8231.9986,W,59.4,-0.09,1.02,0.01; +A,180318,222540,3440.5815,N,8232.0160,W,59.5,0.05,0.97,0.09; +A,180318,222541,3440.5731,N,8232.0332,W,59.5,-0.06,1.00,-0.04; +A,180318,222542,3440.5648,N,8232.0506,W,59.6,0.01,0.84,-0.07; +A,180318,222543,3440.5565,N,8232.0680,W,59.5,0.17,0.95,-0.05; +A,180318,222544,3440.5483,N,8232.0855,W,59.7,-0.02,0.98,-0.08; +A,180318,222545,3440.5400,N,8232.1031,W,59.7,-0.08,1.05,0.06; +A,180318,222546,3440.5318,N,8232.1206,W,59.9,-0.02,1.16,0.11; +A,180318,222547,3440.5235,N,8232.1382,W,59.9,0.13,0.98,-0.07; +A,180318,222548,3440.5151,N,8232.1556,W,59.1,0.19,1.02,-0.02; +A,180318,222549,3440.5070,N,8232.1731,W,59.4,-0.03,1.01,-0.09; +A,180318,222550,3440.4987,N,8232.1907,W,59.5,0.16,1.07,0.04; +A,180318,222551,3440.4905,N,8232.2082,W,59.8,0.18,0.96,-0.09; +A,180318,222552,3440.4822,N,8232.2257,W,59.8,-0.05,0.99,-0.06; +A,180318,222553,3440.4736,N,8232.2432,W,60.3,-0.02,0.95,-0.01; +A,180318,222554,3440.4653,N,8232.2606,W,59.4,-0.05,1.07,-0.02; +A,180318,222555,3440.4569,N,8232.2781,W,59.5,0.13,0.95,-0.12; +A,180318,222556,3440.4486,N,8232.2955,W,59.5,-0.14,1.03,-0.02; +A,180318,222557,3440.4402,N,8232.3130,W,59.7,0.03,1.09,0.02; +A,180318,222558,3440.4318,N,8232.3304,W,59.5,0.05,0.98,-0.09; +A,180318,222559,3440.4234,N,8232.3478,W,59.5,-0.08,1.03,0.08; +A,180318,222600,3440.4150,N,8232.3653,W,59.5,0.09,1.13,0.06; +A,180318,222601,3440.4065,N,8232.3828,W,59.6,0.19,0.91,-0.06; +A,180318,222602,3440.3981,N,8232.4004,W,59.9,0.01,1.04,0.01; +A,180318,222603,3440.3897,N,8232.4181,W,60.0,0.04,1.09,-0.05; +A,180318,222604,3440.3813,N,8232.4359,W,59.9,-0.01,1.11,0.05; +A,180318,222605,3440.3730,N,8232.4536,W,59.7,0.00,1.01,-0.09; +A,180318,222606,3440.3648,N,8232.4713,W,59.7,0.00,1.06,-0.07; +A,180318,222607,3440.3566,N,8232.4891,W,59.9,-0.12,0.95,0.01; +A,180318,222608,3440.3484,N,8232.5070,W,60.3,-0.02,1.13,-0.06; +A,180318,222609,3440.3401,N,8232.5248,W,60.0,0.02,1.02,0.04; +A,180318,222610,3440.3317,N,8232.5424,W,59.6,0.08,1.03,-0.11; +A,180318,222611,3440.3234,N,8232.5600,W,60.0,0.09,1.05,-0.09; +A,180318,222612,3440.3151,N,8232.5777,W,60.2,0.01,1.02,-0.09; +A,180318,222613,3440.3067,N,8232.5955,W,60.5,-0.12,1.05,-0.05; +A,180318,222614,3440.2985,N,8232.6133,W,60.4,0.00,0.93,-0.11; +A,180318,222615,3440.2903,N,8232.6311,W,60.3,0.05,1.16,0.00; +A,180318,222616,3440.2820,N,8232.6488,W,60.3,0.08,1.17,-0.05; +A,180318,222617,3440.2737,N,8232.6664,W,60.0,-0.02,1.06,-0.02; +A,180318,222618,3440.2654,N,8232.6836,W,59.6,0.00,1.02,-0.02; +A,180318,222619,3440.2572,N,8232.7010,W,59.6,-0.13,1.02,-0.03; +A,180318,222620,3440.2488,N,8232.7181,W,59.0,0.02,1.05,-0.03; +A,180318,222621,3440.2403,N,8232.7351,W,59.1,0.15,1.02,-0.01; +A,180318,222622,3440.2318,N,8232.7523,W,59.6,-0.03,1.03,-0.02; +A,180318,222623,3440.2228,N,8232.7691,W,59.9,0.02,1.09,-0.08; +A,180318,222624,3440.2132,N,8232.7857,W,59.4,-0.06,1.10,0.02; +A,180318,222625,3440.2036,N,8232.8023,W,60.1,0.13,1.14,0.04; +A,180318,222626,3440.1938,N,8232.8187,W,59.8,0.16,1.06,0.03; +A,180318,222627,3440.1841,N,8232.8350,W,59.2,0.02,1.01,-0.06; +A,180318,222628,3440.1742,N,8232.8510,W,59.2,-0.16,1.02,-0.05; +A,180318,222629,3440.1642,N,8232.8668,W,59.4,-0.01,1.06,-0.01; +A,180318,222630,3440.1542,N,8232.8827,W,59.8,-0.15,1.02,-0.01; +A,180318,222631,3440.1441,N,8232.8987,W,59.8,-0.02,0.96,0.01; +A,180318,222632,3440.1338,N,8232.9144,W,59.3,-0.06,1.11,0.00; +A,180318,222633,3440.1235,N,8232.9299,W,59.0,0.11,1.07,0.02; +A,180318,222634,3440.1128,N,8232.9452,W,59.6,0.02,1.07,-0.10; +A,180318,222635,3440.1021,N,8232.9605,W,59.2,0.02,1.01,-0.04; +A,180318,222636,3440.0913,N,8232.9756,W,59.4,-0.05,0.98,-0.05; +A,180318,222637,3440.0802,N,8232.9905,W,59.4,0.00,0.94,-0.11; +A,180318,222638,3440.0690,N,8233.0053,W,59.8,0.05,0.98,-0.03; +A,180318,222639,3440.0576,N,8233.0198,W,59.2,0.00,1.02,-0.04; +A,180318,222640,3440.0461,N,8233.0340,W,59.2,-0.05,0.98,-0.01; +A,180318,222641,3440.0344,N,8233.0483,W,59.4,-0.01,0.99,-0.03; +A,180318,222642,3440.0226,N,8233.0627,W,59.4,0.11,1.05,-0.03; +A,180318,222643,3440.0110,N,8233.0772,W,59.7,0.02,0.99,-0.05; +A,180318,222644,3439.9992,N,8233.0918,W,60.2,0.02,1.09,-0.02; +A,180318,222645,3439.9875,N,8233.1064,W,59.8,-0.08,1.01,0.02; +A,180318,222646,3439.9758,N,8233.1208,W,59.4,0.08,1.03,0.02; +A,180318,222647,3439.9641,N,8233.1351,W,60.0,-0.02,1.10,0.05; +A,180318,222648,3439.9524,N,8233.1495,W,59.7,0.01,1.15,-0.01; +A,180318,222649,3439.9407,N,8233.1636,W,59.7,-0.03,0.99,0.03; +A,180318,222650,3439.9291,N,8233.1781,W,59.8,0.05,0.96,0.00; +A,180318,222651,3439.9175,N,8233.1924,W,59.2,-0.01,1.00,-0.08; +A,180318,222652,3439.9059,N,8233.2066,W,59.3,-0.07,0.95,-0.13; +A,180318,222653,3439.8945,N,8233.2210,W,59.3,-0.05,1.07,0.02; +A,180318,222654,3439.8831,N,8233.2354,W,59.3,0.03,1.03,-0.03; +A,180318,222655,3439.8713,N,8233.2495,W,59.1,0.19,0.93,-0.12; +A,180318,222656,3439.8596,N,8233.2633,W,59.1,-0.16,0.84,-0.07; +A,180318,222657,3439.8478,N,8233.2772,W,59.5,0.00,0.87,-0.08; +A,180318,222658,3439.8362,N,8233.2914,W,59.2,0.19,0.98,-0.10; +A,180318,222659,3439.8246,N,8233.3056,W,59.3,0.04,0.94,-0.08; +A,180318,222700,3439.8128,N,8233.3197,W,59.3,0.00,0.96,-0.02; +A,180318,222701,3439.8011,N,8233.3336,W,59.2,-0.05,1.10,0.04; +A,180318,222702,3439.7894,N,8233.3477,W,59.4,0.21,1.00,-0.09; +A,180318,222703,3439.7776,N,8233.3619,W,59.5,-0.08,0.95,-0.02; +A,180318,222704,3439.7658,N,8233.3761,W,59.4,0.18,1.09,-0.01; +A,180318,222705,3439.7540,N,8233.3903,W,59.5,0.18,0.98,-0.10; +A,180318,222706,3439.7423,N,8233.4046,W,59.4,0.00,1.03,-0.01; +A,180318,222707,3439.7305,N,8233.4190,W,59.6,-0.05,0.99,-0.04; +A,180318,222708,3439.7188,N,8233.4334,W,59.7,-0.02,1.02,-0.05; +A,180318,222709,3439.7070,N,8233.4478,W,59.9,0.10,1.00,-0.03; +A,180318,222710,3439.6952,N,8233.4623,W,59.7,-0.01,0.91,-0.09; +A,180318,222711,3439.6835,N,8233.4768,W,59.8,-0.01,1.05,0.00; +A,180318,222712,3439.6720,N,8233.4912,W,59.2,-0.03,1.02,-0.04; +A,180318,222713,3439.6607,N,8233.5058,W,59.2,0.15,1.07,0.09; +A,180318,222714,3439.6492,N,8233.5204,W,59.7,0.08,0.91,-0.09; +A,180318,222715,3439.6378,N,8233.5350,W,59.9,-0.02,1.02,-0.02; +A,180318,222716,3439.6262,N,8233.5497,W,59.4,0.14,0.98,-0.02; +A,180318,222717,3439.6146,N,8233.5642,W,59.4,-0.03,1.03,-0.02; +A,180318,222718,3439.6031,N,8233.5786,W,59.4,0.07,0.98,-0.03; +A,180318,222719,3439.5914,N,8233.5930,W,59.7,0.00,1.11,0.05; +A,180318,222720,3439.5795,N,8233.6075,W,60.0,0.04,1.05,-0.02; +A,180318,222721,3439.5677,N,8233.6217,W,59.5,-0.21,1.14,-0.10; +A,180318,222722,3439.5561,N,8233.6357,W,59.2,0.05,1.02,0.00; +A,180318,222723,3439.5443,N,8233.6497,W,59.1,-0.09,0.98,-0.02; +A,180318,222724,3439.5327,N,8233.6638,W,59.4,0.11,0.91,-0.02; +A,180318,222725,3439.5208,N,8233.6779,W,59.6,-0.09,1.00,-0.05; +A,180318,222726,3439.5091,N,8233.6920,W,59.0,0.13,0.95,-0.04; +A,180318,222727,3439.4973,N,8233.7060,W,59.3,-0.17,1.11,0.09; +A,180318,222728,3439.4854,N,8233.7200,W,59.9,0.10,1.18,0.06; +A,180318,222729,3439.4734,N,8233.7341,W,59.7,0.12,1.02,-0.05; +A,180318,222730,3439.4615,N,8233.7482,W,60.0,0.05,1.08,-0.01; +A,180318,222731,3439.4497,N,8233.7623,W,59.8,0.02,1.08,0.02; +A,180318,222732,3439.4379,N,8233.7764,W,59.7,-0.05,1.09,0.02; +A,180318,222733,3439.4260,N,8233.7903,W,59.5,0.02,1.01,-0.03; +A,180318,222734,3439.4142,N,8233.8045,W,60.2,-0.09,1.01,0.00; +A,180318,222735,3439.4022,N,8233.8187,W,59.9,-0.02,0.89,-0.07; +A,180318,222736,3439.3901,N,8233.8328,W,59.9,-0.06,0.99,-0.09; +A,180318,222737,3439.3780,N,8233.8468,W,60.0,0.20,0.87,-0.09; +A,180318,222738,3439.3660,N,8233.8609,W,59.9,-0.15,0.97,-0.09; +A,180318,222739,3439.3543,N,8233.8751,W,59.9,-0.04,1.02,0.05; +A,180318,222740,3439.3427,N,8233.8895,W,59.9,-0.11,1.20,0.14; +A,180318,222741,3439.3311,N,8233.9039,W,59.9,0.01,1.05,0.00; +A,180318,222742,3439.3196,N,8233.9183,W,59.6,-0.09,1.02,-0.07; +A,180318,222743,3439.3081,N,8233.9327,W,59.6,0.03,0.98,-0.15; +A,180318,222744,3439.2966,N,8233.9471,W,59.6,-0.19,1.20,0.06; +A,180318,222745,3439.2851,N,8233.9613,W,59.5,-0.09,1.07,0.02; +A,180318,222746,3439.2735,N,8233.9756,W,59.9,0.13,0.83,-0.13; +A,180318,222747,3439.2618,N,8233.9900,W,60.1,-0.03,0.95,0.01; +A,180318,222748,3439.2502,N,8234.0044,W,60.0,0.04,1.01,-0.11; +A,180318,222749,3439.2385,N,8234.0188,W,60.0,0.03,1.27,0.02; +A,180318,222750,3439.2267,N,8234.0331,W,60.1,0.16,1.05,0.00; +A,180318,222751,3439.2149,N,8234.0473,W,60.0,-0.05,1.20,-0.05; +A,180318,222752,3439.2032,N,8234.0616,W,59.8,-0.27,1.11,0.02; +A,180318,222753,3439.1915,N,8234.0759,W,59.6,0.22,0.84,-0.17; +A,180318,222754,3439.1797,N,8234.0901,W,59.9,-0.11,1.02,-0.13; +A,180318,222755,3439.1679,N,8234.1044,W,60.5,0.08,1.08,-0.09; +A,180318,222756,3439.1561,N,8234.1188,W,60.1,0.06,0.95,-0.12; +A,180318,222757,3439.1444,N,8234.1334,W,60.2,-0.05,0.97,-0.15; +A,180318,222758,3439.1328,N,8234.1479,W,60.0,0.10,1.03,-0.07; +A,180318,222759,3439.1212,N,8234.1624,W,60.2,-0.06,1.03,-0.08; +A,180318,222800,3439.1095,N,8234.1769,W,60.3,0.16,1.13,-0.21; +A,180318,222801,3439.0979,N,8234.1913,W,60.0,-0.07,1.13,-0.04; +A,180318,222802,3439.0862,N,8234.2055,W,59.9,-0.23,1.16,0.09; +A,180318,222803,3439.0745,N,8234.2197,W,59.2,-0.09,1.05,-0.04; +A,180318,222804,3439.0628,N,8234.2339,W,59.0,-0.06,1.00,-0.05; +A,180318,222805,3439.0511,N,8234.2481,W,58.4,0.05,1.01,0.05; +A,180318,222806,3439.0396,N,8234.2622,W,58.8,-0.20,1.01,0.03; +A,180318,222807,3439.0281,N,8234.2766,W,59.7,0.14,1.15,0.13; +A,180318,222808,3439.0165,N,8234.2912,W,60.2,0.10,0.95,0.10; +A,180318,222809,3439.0049,N,8234.3058,W,60.2,-0.02,0.94,-0.03; +A,180318,222810,3438.9930,N,8234.3203,W,60.8,-0.13,0.98,-0.03; +A,180318,222811,3438.9809,N,8234.3353,W,61.9,0.01,1.05,-0.02; +A,180318,222812,3438.9686,N,8234.3501,W,62.1,-0.03,1.11,0.05; +A,180318,222813,3438.9562,N,8234.3650,W,62.5,-0.15,1.16,0.03; +A,180318,222814,3438.9440,N,8234.3802,W,62.8,0.02,0.88,-0.03; +A,180318,222815,3438.9319,N,8234.3955,W,63.0,0.00,0.89,-0.13; +A,180318,222816,3438.9197,N,8234.4107,W,62.6,-0.02,1.15,0.13; +A,180318,222817,3438.9074,N,8234.4257,W,62.4,-0.09,1.14,0.13; +A,180318,222818,3438.8951,N,8234.4405,W,62.4,0.27,0.91,-0.10; +A,180318,222819,3438.8829,N,8234.4553,W,62.1,-0.06,1.05,0.03; +A,180318,222820,3438.8705,N,8234.4701,W,63.0,0.03,1.03,0.05; +A,180318,222821,3438.8579,N,8234.4849,W,63.5,-0.10,0.99,-0.01; +A,180318,222822,3438.8453,N,8234.4998,W,63.1,0.17,0.99,0.02; +A,180318,222823,3438.8330,N,8234.5149,W,62.9,-0.05,0.98,-0.14; +A,180318,222824,3438.8207,N,8234.5300,W,62.6,0.19,0.91,-0.01; +A,180318,222825,3438.8085,N,8234.5450,W,62.1,0.09,1.01,-0.05; +A,180318,222826,3438.7963,N,8234.5598,W,61.7,0.11,0.98,-0.01; +A,180318,222827,3438.7842,N,8234.5747,W,62.0,-0.04,1.07,0.04; +A,180318,222828,3438.7721,N,8234.5896,W,62.0,0.08,0.96,0.00; +A,180318,222829,3438.7598,N,8234.6046,W,62.6,0.08,1.12,0.09; +A,180318,222830,3438.7474,N,8234.6194,W,62.3,0.17,1.13,0.13; +A,180318,222831,3438.7353,N,8234.6344,W,62.3,-0.04,1.25,0.07; +A,180318,222832,3438.7232,N,8234.6495,W,62.2,-0.16,0.91,-0.05; +A,180318,222833,3438.7110,N,8234.6644,W,62.3,0.16,1.04,0.10; +A,180318,222834,3438.6987,N,8234.6792,W,62.2,-0.17,1.22,0.19; +A,180318,222835,3438.6863,N,8234.6940,W,62.3,0.01,1.00,-0.02; +A,180318,222836,3438.6740,N,8234.7089,W,62.2,-0.02,0.97,0.02; +A,180318,222837,3438.6618,N,8234.7238,W,62.2,0.11,1.09,0.12; +A,180318,222838,3438.6496,N,8234.7388,W,62.0,0.06,0.98,0.01; +A,180318,222839,3438.6376,N,8234.7538,W,62.0,-0.03,0.95,-0.07; +A,180318,222840,3438.6255,N,8234.7688,W,62.0,0.10,1.09,0.02; +A,180318,222841,3438.6132,N,8234.7836,W,62.3,0.03,0.91,-0.08; +A,180318,222842,3438.6011,N,8234.7985,W,62.3,0.12,1.02,0.02; +A,180318,222843,3438.5888,N,8234.8136,W,62.6,-0.12,0.92,-0.01; +A,180318,222844,3438.5765,N,8234.8286,W,62.2,-0.02,0.99,-0.09; +A,180318,222845,3438.5645,N,8234.8438,W,62.8,-0.09,0.90,-0.10; +A,180318,222846,3438.5524,N,8234.8591,W,62.6,-0.01,1.01,-0.03; +A,180318,222847,3438.5402,N,8234.8742,W,62.6,0.22,0.89,-0.02; +A,180318,222848,3438.5282,N,8234.8894,W,62.1,0.01,0.98,0.01; +A,180318,222849,3438.5161,N,8234.9044,W,62.2,-0.02,1.05,-0.09; +A,180318,222850,3438.5037,N,8234.9195,W,62.7,0.17,1.09,0.11; +A,180318,222851,3438.4913,N,8234.9343,W,62.1,0.06,1.07,0.12; +A,180318,222852,3438.4791,N,8234.9489,W,61.5,-0.03,1.09,0.02; +A,180318,222853,3438.4670,N,8234.9636,W,61.9,0.19,1.08,0.00; +A,180318,222854,3438.4549,N,8234.9784,W,62.1,-0.09,0.99,-0.08; +A,180318,222855,3438.4427,N,8234.9934,W,62.7,0.00,1.05,-0.06; +A,180318,222856,3438.4306,N,8235.0084,W,62.2,0.20,1.08,-0.05; +A,180318,222857,3438.4185,N,8235.0232,W,62.4,0.02,0.94,-0.08; +A,180318,222858,3438.4063,N,8235.0382,W,62.2,0.02,0.96,-0.07; +A,180318,222859,3438.3942,N,8235.0532,W,62.1,0.04,0.95,-0.14; +A,180318,222900,3438.3822,N,8235.0681,W,61.8,0.02,1.08,-0.03; +A,180318,222901,3438.3702,N,8235.0831,W,62.1,-0.14,1.14,0.04; +A,180318,222902,3438.3582,N,8235.0982,W,62.3,-0.12,1.05,-0.02; +A,180318,222903,3438.3460,N,8235.1134,W,62.4,-0.16,1.19,0.00; +A,180318,222904,3438.3339,N,8235.1286,W,62.1,-0.06,0.99,-0.04; +A,180318,222905,3438.3217,N,8235.1436,W,62.4,0.00,1.08,-0.06; +A,180318,222906,3438.3096,N,8235.1587,W,62.6,0.09,1.02,-0.04; +A,180318,222907,3438.2974,N,8235.1737,W,62.4,0.03,0.90,-0.10; +A,180318,222908,3438.2854,N,8235.1889,W,62.4,-0.13,0.93,-0.09; +A,180318,222909,3438.2734,N,8235.2040,W,62.3,-0.15,1.09,-0.05; +A,180318,222910,3438.2616,N,8235.2193,W,62.4,0.06,1.07,0.10; +A,180318,222911,3438.2500,N,8235.2346,W,62.2,-0.11,1.06,-0.02; +A,180318,222912,3438.2386,N,8235.2502,W,62.1,-0.05,1.05,-0.02; +A,180318,222913,3438.2275,N,8235.2661,W,61.9,0.00,1.02,-0.05; +A,180318,222914,3438.2168,N,8235.2823,W,61.9,0.03,0.95,-0.13; +A,180318,222915,3438.2064,N,8235.2986,W,61.8,-0.07,1.11,0.02; +A,180318,222916,3438.1964,N,8235.3156,W,61.9,0.19,0.91,-0.08; +A,180318,222917,3438.1864,N,8235.3326,W,61.7,0.12,1.11,0.05; +A,180318,222918,3438.1767,N,8235.3497,W,61.7,0.19,1.05,0.04; +A,180318,222919,3438.1673,N,8235.3670,W,61.7,-0.02,0.90,-0.02; +A,180318,222920,3438.1580,N,8235.3845,W,62.0,-0.18,1.05,0.02; +A,180318,222921,3438.1492,N,8235.4023,W,62.0,0.02,1.07,-0.02; +A,180318,222922,3438.1411,N,8235.4207,W,61.8,0.11,1.10,0.16; +A,180318,222923,3438.1338,N,8235.4398,W,62.1,0.09,0.98,0.02; +A,180318,222924,3438.1268,N,8235.4591,W,61.9,0.01,1.02,0.01; +A,180318,222925,3438.1200,N,8235.4785,W,62.4,-0.17,0.98,0.04; +A,180318,222926,3438.1133,N,8235.4979,W,62.5,0.09,0.96,-0.06; +A,180318,222927,3438.1067,N,8235.5175,W,62.5,0.08,0.92,0.00; +A,180318,222928,3438.1000,N,8235.5372,W,62.7,-0.01,1.00,-0.15; +A,180318,222929,3438.0933,N,8235.5570,W,62.9,-0.09,1.06,-0.07; +A,180318,222930,3438.0867,N,8235.5768,W,62.8,-0.25,1.12,-0.02; +A,180318,222931,3438.0802,N,8235.5967,W,62.9,0.01,1.06,-0.10; +A,180318,222932,3438.0736,N,8235.6165,W,62.7,-0.09,0.99,-0.02; +A,180318,222933,3438.0671,N,8235.6361,W,62.7,-0.16,1.17,0.04; +A,180318,222934,3438.0605,N,8235.6556,W,62.1,-0.06,0.98,-0.02; +A,180318,222935,3438.0541,N,8235.6750,W,61.9,-0.13,1.23,0.12; +A,180318,222936,3438.0476,N,8235.6944,W,62.1,-0.20,0.98,0.01; +A,180318,222937,3438.0411,N,8235.7137,W,61.7,0.05,0.91,-0.01; +A,180318,222938,3438.0344,N,8235.7329,W,61.7,-0.12,1.10,0.09; +A,180318,222939,3438.0278,N,8235.7521,W,62.1,0.02,0.97,0.02; +A,180318,222940,3438.0212,N,8235.7714,W,61.8,0.07,0.95,-0.07; +A,180318,222941,3438.0147,N,8235.7909,W,62.7,0.03,1.06,0.02; +A,180318,222942,3438.0081,N,8235.8106,W,62.6,-0.23,1.04,0.20; +A,180318,222943,3438.0017,N,8235.8302,W,62.3,-0.05,1.05,-0.06; +A,180318,222944,3437.9952,N,8235.8498,W,62.1,0.02,1.16,0.07; +A,180318,222945,3437.9887,N,8235.8694,W,62.5,-0.04,1.20,0.18; +A,180318,222946,3437.9822,N,8235.8891,W,62.3,0.07,1.09,0.07; +A,180318,222947,3437.9755,N,8235.9087,W,62.5,0.06,1.08,0.05; +A,180318,222948,3437.9689,N,8235.9281,W,62.4,-0.01,1.09,0.01; +A,180318,222949,3437.9621,N,8235.9478,W,63.5,0.01,1.09,0.01; +A,180318,222950,3437.9555,N,8235.9674,W,63.1,-0.15,1.00,-0.01; +A,180318,222951,3437.9492,N,8235.9867,W,62.4,0.04,0.89,-0.13; +A,180318,222952,3437.9427,N,8236.0061,W,62.2,0.20,1.07,0.06; +A,180318,222953,3437.9364,N,8236.0255,W,61.8,-0.17,0.96,-0.02; +A,180318,222954,3437.9299,N,8236.0449,W,62.3,0.12,0.96,-0.20; +A,180318,222955,3437.9234,N,8236.0645,W,62.4,0.10,1.05,-0.05; +A,180318,222956,3437.9169,N,8236.0840,W,62.6,-0.12,1.08,0.02; +A,180318,222957,3437.9104,N,8236.1035,W,62.5,-0.13,0.98,-0.06; +A,180318,222958,3437.9039,N,8236.1230,W,62.2,-0.01,1.07,-0.01; +A,180318,222959,3437.8974,N,8236.1425,W,62.2,0.09,0.95,-0.05; +A,180318,223000,3437.8908,N,8236.1620,W,62.2,0.18,1.01,0.00; +A,180318,223001,3437.8841,N,8236.1814,W,62.4,0.11,0.96,-0.08; +A,180318,223002,3437.8775,N,8236.2009,W,62.7,-0.06,1.10,-0.02; +A,180318,223003,3437.8709,N,8236.2202,W,62.0,0.02,1.11,0.03; +A,180318,223004,3437.8644,N,8236.2394,W,62.0,-0.07,0.98,-0.02; +A,180318,223005,3437.8578,N,8236.2586,W,62.0,0.05,1.09,-0.02; +A,180318,223006,3437.8512,N,8236.2777,W,62.0,0.03,1.05,0.14; +A,180318,223007,3437.8446,N,8236.2969,W,62.1,0.01,1.06,0.01; +A,180318,223008,3437.8379,N,8236.3162,W,62.2,0.05,1.05,0.08; +A,180318,223009,3437.8311,N,8236.3354,W,62.2,-0.06,1.04,-0.02; +A,180318,223010,3437.8240,N,8236.3544,W,62.0,0.09,1.05,0.08; +A,180318,223011,3437.8163,N,8236.3732,W,62.5,0.09,0.91,-0.08; +A,180318,223012,3437.8084,N,8236.3918,W,62.4,-0.02,1.02,-0.01; +A,180318,223013,3437.8003,N,8236.4103,W,62.4,0.12,0.97,-0.09; +A,180318,223014,3437.7918,N,8236.4286,W,62.5,-0.05,0.90,-0.10; +A,180318,223015,3437.7830,N,8236.4466,W,62.1,0.00,0.95,0.09; +A,180318,223016,3437.7737,N,8236.4643,W,62.9,-0.08,0.88,-0.08; +A,180318,223017,3437.7642,N,8236.4818,W,62.1,0.09,1.13,0.12; +A,180318,223018,3437.7544,N,8236.4990,W,62.1,0.05,0.95,-0.10; +A,180318,223019,3437.7444,N,8236.5158,W,61.5,0.04,1.11,0.05; +A,180318,223020,3437.7340,N,8236.5325,W,62.3,0.09,1.05,0.01; +A,180318,223021,3437.7232,N,8236.5489,W,62.3,0.14,1.16,0.09; +A,180318,223022,3437.7120,N,8236.5648,W,61.8,0.09,1.13,0.10; +A,180318,223023,3437.7008,N,8236.5806,W,61.8,-0.02,1.03,-0.05; +A,180318,223024,3437.6893,N,8236.5961,W,62.1,0.02,0.91,-0.09; +A,180318,223025,3437.6770,N,8236.6110,W,62.1,-0.04,0.95,-0.07; +A,180318,223026,3437.6646,N,8236.6257,W,62.5,0.05,1.02,-0.03; +A,180318,223027,3437.6520,N,8236.6403,W,62.5,0.08,0.95,-0.09; +A,180318,223028,3437.6391,N,8236.6545,W,62.4,-0.19,0.97,-0.12; +A,180318,223029,3437.6261,N,8236.6685,W,62.5,0.14,1.03,0.11; +A,180318,223030,3437.6132,N,8236.6827,W,62.4,-0.05,1.02,-0.09; +A,180318,223031,3437.6003,N,8236.6968,W,62.5,-0.08,1.03,-0.01; +A,180318,223032,3437.5873,N,8236.7107,W,62.3,0.08,0.92,-0.12; +A,180318,223033,3437.5745,N,8236.7247,W,62.0,-0.16,0.95,0.05; +A,180318,223034,3437.5615,N,8236.7387,W,62.0,-0.29,0.97,-0.09; +A,180318,223035,3437.5486,N,8236.7524,W,61.3,-0.02,1.10,-0.02; +A,180318,223036,3437.5356,N,8236.7662,W,61.7,-0.01,1.03,0.05; +A,180318,223037,3437.5227,N,8236.7799,W,61.6,0.00,1.17,0.05; +A,180318,223038,3437.5096,N,8236.7937,W,61.8,-0.08,0.98,0.04; +A,180318,223039,3437.4966,N,8236.8075,W,62.0,-0.02,1.01,0.17; +A,180318,223040,3437.4836,N,8236.8214,W,62.2,-0.16,0.92,-0.09; +A,180318,223041,3437.4707,N,8236.8353,W,62.5,-0.17,0.97,-0.09; +A,180318,223042,3437.4575,N,8236.8494,W,62.8,-0.04,0.91,-0.13; +A,180318,223043,3437.4443,N,8236.8634,W,62.8,-0.05,0.92,-0.17; +A,180318,223044,3437.4312,N,8236.8775,W,63.1,-0.02,0.96,-0.09; +A,180318,223045,3437.4181,N,8236.8916,W,62.7,-0.05,1.08,0.00; +A,180318,223046,3437.4052,N,8236.9055,W,62.1,-0.07,0.99,0.00; +A,180318,223047,3437.3923,N,8236.9194,W,61.7,-0.07,0.98,-0.14; +A,180318,223048,3437.3795,N,8236.9334,W,62.4,-0.10,1.04,0.07; +A,180318,223049,3437.3665,N,8236.9473,W,62.0,-0.11,1.02,-0.20; +A,180318,223050,3437.3536,N,8236.9611,W,62.0,-0.08,0.96,-0.09; +A,180318,223051,3437.3405,N,8236.9750,W,62.5,-0.20,1.14,0.04; +A,180318,223052,3437.3273,N,8236.9887,W,62.5,-0.05,1.16,0.06; +A,180318,223053,3437.3141,N,8237.0025,W,62.5,0.17,0.84,-0.11; +A,180318,223054,3437.3011,N,8237.0162,W,62.2,-0.18,1.01,-0.03; +A,180318,223055,3437.2883,N,8237.0302,W,62.5,-0.27,0.98,-0.06; +A,180318,223056,3437.2754,N,8237.0442,W,62.4,-0.10,1.02,-0.06; +A,180318,223057,3437.2624,N,8237.0580,W,62.5,-0.11,1.16,0.04; +A,180318,223058,3437.2494,N,8237.0718,W,62.5,0.00,1.07,0.01; +A,180318,223059,3437.2365,N,8237.0856,W,62.2,-0.19,1.00,0.02; +A,180318,223100,3437.2236,N,8237.0995,W,62.4,0.01,1.09,-0.12; +A,180318,223101,3437.2106,N,8237.1132,W,62.3,-0.02,1.08,-0.06; +A,180318,223102,3437.1978,N,8237.1268,W,61.2,-0.05,1.06,0.03; +A,180318,223103,3437.1849,N,8237.1405,W,61.3,-0.11,1.20,0.13; +A,180318,223104,3437.1721,N,8237.1543,W,61.2,0.09,0.91,-0.11; +A,180318,223105,3437.1592,N,8237.1684,W,61.6,0.00,1.12,0.02; +A,180318,223106,3437.1461,N,8237.1822,W,62.0,-0.06,1.13,0.02; +A,180318,223107,3437.1330,N,8237.1961,W,61.7,-0.06,1.04,0.10; +A,180318,223108,3437.1199,N,8237.2099,W,61.9,-0.09,1.11,0.01; +A,180318,223109,3437.1069,N,8237.2237,W,61.8,-0.03,1.00,0.05; +A,180318,223110,3437.0936,N,8237.2374,W,62.3,-0.04,1.00,0.06; +A,180318,223111,3437.0803,N,8237.2510,W,62.0,-0.23,1.03,0.09; +A,180318,223112,3437.0671,N,8237.2646,W,62.0,-0.03,1.02,0.09; +A,180318,223113,3437.0539,N,8237.2781,W,62.1,0.05,1.07,0.10; +A,180318,223114,3437.0405,N,8237.2917,W,62.1,-0.02,1.10,0.09; +A,180318,223115,3437.0273,N,8237.3053,W,62.4,0.15,0.84,0.05; +A,180318,223116,3437.0142,N,8237.3190,W,62.4,-0.08,1.03,-0.03; +A,180318,223117,3437.0011,N,8237.3329,W,62.4,-0.11,1.00,-0.02; +A,180318,223118,3436.9882,N,8237.3469,W,62.4,-0.14,1.05,0.01; +A,180318,223119,3436.9754,N,8237.3609,W,62.0,0.02,1.08,-0.03; +A,180318,223120,3436.9626,N,8237.3748,W,61.8,-0.06,0.99,0.02; +A,180318,223121,3436.9499,N,8237.3888,W,61.9,-0.08,0.92,-0.04; +A,180318,223122,3436.9373,N,8237.4032,W,62.1,0.09,1.16,0.01; +A,180318,223123,3436.9247,N,8237.4176,W,62.3,0.24,0.87,-0.07; +A,180318,223124,3436.9120,N,8237.4320,W,62.3,0.15,0.88,-0.20; +A,180318,223125,3436.8991,N,8237.4461,W,62.2,-0.08,1.08,-0.02; +A,180318,223126,3436.8863,N,8237.4602,W,62.2,-0.09,0.95,-0.09; +A,180318,223127,3436.8734,N,8237.4742,W,62.2,-0.06,0.96,-0.08; +A,180318,223128,3436.8606,N,8237.4884,W,62.4,0.01,0.98,-0.12; +A,180318,223129,3436.8478,N,8237.5024,W,62.1,0.10,0.88,-0.11; +A,180318,223130,3436.8350,N,8237.5164,W,61.9,-0.06,1.00,-0.15; +A,180318,223131,3436.8222,N,8237.5305,W,62.1,-0.11,1.13,0.01; +A,180318,223132,3436.8093,N,8237.5447,W,62.8,-0.14,0.95,-0.04; +A,180318,223133,3436.7963,N,8237.5590,W,63.0,-0.09,1.10,-0.01; +A,180318,223134,3436.7833,N,8237.5733,W,62.8,0.05,1.09,-0.06; +A,180318,223135,3436.7704,N,8237.5873,W,62.3,0.19,0.94,-0.15; +A,180318,223136,3436.7576,N,8237.6013,W,62.0,0.00,1.17,0.07; +A,180318,223137,3436.7448,N,8237.6152,W,61.4,-0.20,1.11,0.08; +A,180318,223138,3436.7320,N,8237.6291,W,61.4,0.03,1.10,0.09; +A,180318,223139,3436.7192,N,8237.6429,W,61.1,0.00,1.06,0.13; +A,180318,223140,3436.7064,N,8237.6567,W,61.8,-0.11,0.95,-0.06; +A,180318,223141,3436.6936,N,8237.6707,W,61.5,0.05,1.03,0.07; +A,180318,223142,3436.6809,N,8237.6847,W,61.3,0.15,0.98,0.04; +A,180318,223143,3436.6680,N,8237.6986,W,61.6,-0.12,0.88,-0.05; +A,180318,223144,3436.6550,N,8237.7126,W,61.6,-0.11,1.13,0.14; +A,180318,223145,3436.6421,N,8237.7265,W,61.8,0.16,1.02,0.09; +A,180318,223146,3436.6293,N,8237.7407,W,61.8,-0.17,0.93,-0.02; +A,180318,223147,3436.6168,N,8237.7550,W,62.2,0.00,1.02,-0.06; diff --git a/test/maptest.py b/test/maptest.py new file mode 100644 index 0000000..0971cfb --- /dev/null +++ b/test/maptest.py @@ -0,0 +1,42 @@ +import requests +import tempfile, shutil, os, time + +from moviepy.editor import ImageSequenceClip + +position_data = [] +with open('gpsdata.log', 'r') as f: + i = 0 + for line in f: + i += 1 + if i % 4 != 0: + continue + line = line.split(',') + + longitude = round((float(line[3][:2]) + (float(line[3][2:]) / 60)) * + (-1 if line[4] == 'S' else 1), 6) + latitude = round((float(line[5][:2]) + (float(line[5][2:]) / 60)) * + (-1 if line[6] == 'W' else 1), 6) + + position_data.append('{},{}'.format(longitude, latitude)) + print(".", end='') +print() + +directory = tempfile.mkdtemp() +print(directory) +filenames = [] +for index in range(len(position_data)): + if index % 5 == 0 or index == 1: + print('Grabbing index {} of {}'.format(index+1, len(position_data))) + urlparams = {'center': position_data[index], + 'zoom': str(17), + 'size': '%dx%d' % (480,480), + 'maptype': 'roadmap', + 'scale': 1} + response = requests.get('http://maps.google.com/maps/api/staticmap', params=urlparams) + filename = os.path.join(directory, 'image_{}.png'.format(index)) + with open(filename, 'wb') as f: + f.write(response.content) + filenames.append(filename) +clip = ImageSequenceClip(filenames, fps = 60) +clip.write_videofile('D:/testing.mp4', fps = 60) +shutil.rmtree(directory) diff --git a/timelapse.py b/timelapse.py index 2d78f65..14ce487 100644 --- a/timelapse.py +++ b/timelapse.py @@ -1,7 +1,9 @@ #!/usr/bin/python3.6 from moviepy.editor import VideoFileClip, ImageSequenceClip +from PIL import Image import os +import requests import shutil import sys import tempfile @@ -10,14 +12,55 @@ class ClipMaster(): print_lock = threading.Lock() + gps_dimensions = (480, 480) def print_safe(self, output): self.print_lock.acquire() print(output) self.print_lock.release() + def get_gps_frames(self, gps_filename): + positions = [] + with open(gps_filename, 'r') as f: + i = -1 # offset by -1 to accommodate early index in loop below + for line in f: + i += 1 + if i % gps_freq != 0: + continue + line = line.split(',') + + longitude = round((float(line[3][:2]) + (float(line[3][2:]) / 60)) * + (-1 if line[4] == 'S' else 1), 6) + latitude = round((float(line[5][:2]) + (float(line[5][2:]) / 60)) * + (-1 if line[6] == 'W' else 1), 6) + + positions.append('{},{}'.format(longitude, latitude)) + + gps_directory = tempfile.mkdtemp() + gps_filenames = [] + for index in range(len(positions)): + urlparams = {'center': positions[index], + 'zoom': str(17), + 'size': '%dx%d' % self.gps_dimensions, + 'maptype': 'roadmap', + 'scale': 1} + # this API limits sampling to 2500 per day + # https://developers.google.com/maps/documentation/geocoding/usage-and-billing + response = requests.get('http://maps.google.com/maps/api/staticmap', params=urlparams) + filename = os.path.join(gps_directory, 'image_{}.png'.format(index)) + with open(filename, 'wb') as f: + f.write(response.content) + gps_filenames.append(filename) + return gps_filenames, gps_directory + def extract_from_clip(self, clip_index): - clip, clip_name, frame_count, offset = self.clips[clip_index] + clip, clip_name, gps_file, frame_count, offset = self.clips[clip_index] + if gps_file: + gps_images, gps_directory = self.get_gps_frames(gps_file) + self.print_safe('Extracted %d GPS samples' % len(gps_images)) + if len(gps_images) != frame_count: + self.print_safe('Warning: GPS sample count does not match frame count; some GPS frames will be duplicated') + start_time = time.time() self.rolling[clip_index] = [] self.image_files[clip_index] = [] @@ -28,10 +71,25 @@ def extract_from_clip(self, clip_index): zeros = ''.join('0' for i in range(self.frame_digits - len(str(index)))) frame_name = zeros + str(index) if index == 1 or index % 5 == 0: - self.print_safe("[{}] - Saving frame {}".format(clip_name, index - offset)) + self.print_safe("[{}] - Saving frame {}".format(clip_name, index)) frame_name = os.path.join(directory, "image{}.png".format(frame_name)) frame_start = time.time() - image = clip.save_frame(frame_name, t=t-1) + clip.save_frame(frame_name, t=t-1) + + if has_gps: + # add GPS overlay + image = Image.open(frame_name) + gps_overlay_location = (image.size[0] - self.gps_dimensions[0], + image.size[1] - self.gps_dimensions[1]) + gps_index = index - offset - 1 + # This logic is good, but if it is necessary, it implies there's a sampling mismatch + if gps_index < 0: + gps_index = 0 + elif gps_index >= len(gps_images): + gps_index = len(gps_mages) - 1 + image.paste(Image.open(gps_images[gps_index]), gps_overlay_location) + image.save(frame_name) + elapsed_time = time.time() - frame_start self.image_files[clip_index].append(frame_name) @@ -48,29 +106,51 @@ def extract_from_clip(self, clip_index): total_time = formatted_remaining(int(time.time() - start_time)) self.print_safe("[{}] - Total elapsed time for extraction: {}".format(clip_name, total_time)) + if has_gps: + shutil.rmtree(gps_directory) + def formatted_remaining(rem): s_rem = '{}:{}'.format(int(rem/60), rem%60) if s_rem[-2] == ':': s_rem = s_rem[:-1] + '0' + s_rem[-1] return s_rem +def video_and_gps(names): + if len(names) != 2: + return False + gps, videos = sorted(names) + return os.path.isdir(videos) and os.path.split(videos)[1] == 'videos' and os.path.isdir(gps) and os.path.split(gps)[1] == 'gps' + c = ClipMaster() # get input/output files clip_names = [] clip_name = None while clip_name == None: - clip_name = input('Path to clip [empty to continue]: ') + clip_name = "D:\\integ_test"#input('Path to clip [empty to continue]: ') if os.path.isdir(clip_name): names = [os.path.join(clip_name, file_name) for file_name in sorted(os.listdir(clip_name))] + if video_and_gps(names): + gps_names = [os.path.join(clip_name, 'gps', file_name) for file_name in sorted(os.listdir(os.path.join(clip_name, 'gps')))] + clip_names = [os.path.join(clip_name, 'videos', file_name) for file_name in sorted(os.listdir(os.path.join(clip_name, 'videos')))] + has_gps = True + else: + clip_names = names + gps_names = [] + c.print_safe("Input files:") - for name in names: + if len(gps_names) > 0: + print("Videos:") + for name in clip_names: c.print_safe(name) + if len(gps_names) > 0: + print("GPS:") + for name in gps_names: + print(name) answer = '' while answer not in set('ynYN'): answer = input('Are these input files correct, including order? [y/n] ') if answer in set('yY'): - clip_names = names break else: clip_name = None @@ -85,25 +165,36 @@ def formatted_remaining(rem): sys.exit(1) output_name = '' while output_name == '': - output_name = input('Output clip path and name: ') + output_name = "D:\\map_overlay_4.mp4"#input('Output clip path and name: ') if not output_name.endswith('.mp4'): c.print_safe('Output must be an mp4 file') output_name = '' # general settings -extract_f_per_x_s = int(input('Extract 1 frame per x second of input video: ')) -output_fps = int(input('FPS in output video: ')) +if has_gps: + gps_sample_freq = 1#int(input('GPS samples per second [1]: ')) +input_fps = 30#int(input('FPS in input video [30]: ')) +extract_f_per_x_f = 120#int(input('Extract 1 frame per x frames of input video: ')) +extract_f_per_x_s = int(extract_f_per_x_f / input_fps) +if has_gps: + gps_freq = int(gps_sample_freq * extract_f_per_x_s) +output_fps = 30#int(input('FPS in output video: ')) + +# create directories to stare data directory = tempfile.mkdtemp() c.print_safe('Extracted frames will be stored in {}'.format(directory)) c.clips = [] total_frames = 0 -for clip_name in clip_names: +for clip_index in range(len(clip_names)): + clip_name = clip_names[clip_index] + gps_name = gps_names[clip_index] if has_gps else None + clip = VideoFileClip(clip_name) frame_count = int(clip.end) + 1 frame_count = int(frame_count / extract_f_per_x_s) c.print_safe("Will extract {} frames from {}".format(frame_count, clip_name)) - c.clips.append((clip, clip_name, frame_count, total_frames)) + c.clips.append((clip, clip_name, gps_name, frame_count, total_frames)) total_frames += frame_count c.print_safe('{} will be {}'.format(output_name, formatted_remaining(total_frames / output_fps))) c.frame_digits = len(str(total_frames))