def test_create_index(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") track = Track() p1 = Obs(ENUCoords(550, 320), GPSTime.readTimestamp('2020-01-01 10:00:00')) track.addObs(p1) p2 = Obs(ENUCoords(610, 325), GPSTime.readTimestamp('2020-01-01 10:08:00')) track.addObs(p2) p3 = Obs(ENUCoords(610, 330), GPSTime.readTimestamp('2020-01-01 10:17:00')) track.addObs(p3) p4 = Obs(ENUCoords(650, 330), GPSTime.readTimestamp('2020-01-01 10:21:00')) track.addObs(p4) p5 = Obs(ENUCoords(675, 340), GPSTime.readTimestamp('2020-01-01 10:25:00')) track.addObs(p5) #track.plot() #track.plotAsMarkers() TRACES = [] TRACES.append(track) collection = TrackCollection(TRACES) res = (25, 4) index = SpatialIndex(collection, res, 0.05, True) index.plot() # ===================================================================== self.assertEqual(index.request(0, 0), [0]) self.assertEqual(index.request(1, 0), [0]) self.assertEqual(index.request(0, 1), []) self.assertEqual(index.request(1, 1), [0]) self.assertEqual(index.request(2, 0), []) self.assertEqual(index.request(2, 1), [0])
def test_write_csv_path(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") track = Track() p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) track.addObs(p1) p2 = Obs(ENUCoords(0, 1), GPSTime.readTimestamp('2020-01-01 10:00:01')) track.addObs(p2) p3 = Obs(ENUCoords(1, 1), GPSTime.readTimestamp('2020-01-01 10:00:02')) track.addObs(p3) p4 = Obs(ENUCoords(1, 2), GPSTime.readTimestamp('2020-01-01 10:00:03')) track.addObs(p4) p5 = Obs(ENUCoords(2, 2), GPSTime.readTimestamp('2020-01-01 10:00:04')) track.addObs(p5) csvpath = os.path.join(self.resource_path, 'data/test/test_write_csv_path.wkt') FileWriter.writeToFile(track, csvpath) contents = open(csvpath).read() txt = "0.000,0.000,0.000,01/01/2020 10:00:00\n" txt += "0.000,1.000,0.000,01/01/2020 10:00:01\n" txt += "1.000,1.000,0.000,01/01/2020 10:00:02\n" txt += "1.000,2.000,0.000,01/01/2020 10:00:03\n" txt += "2.000,2.000,0.000,01/01/2020 10:00:04\n" self.assertEqual(contents.strip(), txt.strip())
def test_write_csv_minim(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") track = Track() p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) track.addObs(p1) p2 = Obs(ENUCoords(0, 1), GPSTime.readTimestamp('2020-01-01 10:00:01')) track.addObs(p2) csvpath = os.path.join(self.resource_path, 'data/test/test_write_csv_minim.wkt') FileWriter.writeToFile(track, csvpath, id_E=0,id_N=1,id_U=2,id_T=3,h=1, separator=";") contents = open(csvpath).read() txt = "#srid: ENU\n" txt += "#E;N;U;time\n" txt += "0.000;0.000;0.000;01/01/2020 10:00:00\n" txt += "0.000;1.000;0.000;01/01/2020 10:00:01\n" self.assertEqual(contents.strip(), txt.strip())
def test_create_index_collection2(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") track = Track() p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) track.addObs(p1) p2 = Obs(ENUCoords(3.1, 3), GPSTime.readTimestamp('2020-01-01 10:08:00')) track.addObs(p2) p3 = Obs(ENUCoords(3.1, 4.5), GPSTime.readTimestamp('2020-01-01 10:17:00')) track.addObs(p3) p4 = Obs(ENUCoords(4.5, 4.5), GPSTime.readTimestamp('2020-01-01 10:21:00')) track.addObs(p4) p5 = Obs(ENUCoords(6, 5.5), GPSTime.readTimestamp('2020-01-01 10:21:00')) track.addObs(p5) p6 = Obs(ENUCoords(7, 4.5), GPSTime.readTimestamp('2020-01-01 10:21:00')) track.addObs(p6) p7 = Obs(ENUCoords(11, 5.5), GPSTime.readTimestamp('2020-01-01 10:21:00')) track.addObs(p7) p8 = Obs(ENUCoords(13, 10), GPSTime.readTimestamp('2020-01-01 10:25:00')) track.addObs(p8) #track.plot() #track.plotAsMarkers() TRACES = [] TRACES.append(track) collection = TrackCollection(TRACES) index = SpatialIndex(collection, (2, 2)) index.plot() # ===================================================================== # ===================================================================== self.assertEqual(index.request(0, 0), [0]) self.assertEqual(index.request(1, 0), [0]) self.assertEqual(index.request(0, 1), []) self.assertEqual(index.request(1, 1), [0]) self.assertEqual(index.request(2, 0), []) self.assertEqual(index.request(2, 1), []) self.assertEqual(index.request(1, 2), [0]) self.assertEqual(index.request(2, 2), [0]) self.assertEqual(index.request(3, 2), [0]) self.assertEqual(index.request(3, 3), []) self.assertEqual(index.request(4, 2), [0]) self.assertEqual(index.request(4, 3), []) self.assertEqual(index.request(4, 4), []) self.assertEqual(index.request(5, 2), [0]) self.assertEqual(index.request(5, 3), [0]) self.assertEqual(index.request(5, 4), [])
def test_format_time(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") madate = '2018-01-31 13:21:46' t = GPSTime.readTimestamp(madate) self.assertEqual("31/01/2018 13:21:46", str(t)) GPSTime.setReadFormat("4Y-2M-2DT2h:2m:2s1Z") madate = '2018-01-31T11:17:46Z' t = GPSTime.readTimestamp(madate) self.assertEqual("31/01/2018 11:17:46", str(t)) d = GPSTime.readUnixTime(1550941038.0) self.assertIsInstance(d, GPSTime) self.assertEqual('23/02/2019 16:57:18', str(d)) self.assertEqual(23, d.day) self.assertEqual(2, d.month) self.assertEqual(2019, d.year) self.assertEqual(16, d.hour) self.assertEqual(57, d.min) self.assertEqual(18, d.sec)
def setUp(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") self.track = Track() p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.track.addObs(p1) p2 = Obs(ENUCoords(0, 1), GPSTime.readTimestamp('2020-01-01 10:00:01')) self.track.addObs(p2) p3 = Obs(ENUCoords(1, 1), GPSTime.readTimestamp('2020-01-01 10:00:02')) self.track.addObs(p3) p4 = Obs(ENUCoords(1, 2), GPSTime.readTimestamp('2020-01-01 10:00:03')) self.track.addObs(p4) p5 = Obs(ENUCoords(2, 2), GPSTime.readTimestamp('2020-01-01 10:00:04')) self.track.addObs(p5) p6 = Obs(ENUCoords(2, 3), GPSTime.readTimestamp('2020-01-01 10:00:06')) self.track.addObs(p6) p7 = Obs(ENUCoords(3, 3), GPSTime.readTimestamp('2020-01-01 10:00:08')) self.track.addObs(p7) p8 = Obs(ENUCoords(3, 4), GPSTime.readTimestamp('2020-01-01 10:00:10')) self.track.addObs(p8) p9 = Obs(ENUCoords(4, 4), GPSTime.readTimestamp('2020-01-01 10:00:12')) self.track.addObs(p9)
def test_create_index_collection1(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") track = Track() p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) track.addObs(p1) p2 = Obs(ENUCoords(2.5, 3), GPSTime.readTimestamp('2020-01-01 10:08:00')) track.addObs(p2) p3 = Obs(ENUCoords(2.5, 5), GPSTime.readTimestamp('2020-01-01 10:17:00')) track.addObs(p3) p4 = Obs(ENUCoords(7, 5), GPSTime.readTimestamp('2020-01-01 10:21:00')) track.addObs(p4) p5 = Obs(ENUCoords(10, 10), GPSTime.readTimestamp('2020-01-01 10:25:00')) track.addObs(p5) #track.plot() #track.plotAsMarkers() TRACES = [] TRACES.append(track) collection = TrackCollection(TRACES) index = SpatialIndex(collection, (2, 2)) index.plot() # ===================================================================== # ===================================================================== self.assertEqual(index.request(0, 0), [0]) self.assertEqual(index.request(1, 0), []) self.assertEqual(index.request(0, 1), [0]) self.assertEqual(index.request(1, 1), [0]) self.assertEqual(index.request(2, 0), []) self.assertEqual(index.request(2, 1), []) self.assertEqual(index.request(1, 2), [0]) self.assertEqual(index.request(2, 2), [0]) self.assertEqual(index.request(3, 2), [0]) self.assertEqual(index.request(3, 3), [0]) self.assertEqual(index.request(4, 3), [0]) self.assertEqual(index.request(4, 4), [0]) # # ===================================================================== self.assertEqual(index.request(ENUCoords(0, 0)), [0]) self.assertEqual(index.request(ENUCoords(2.5, 3)), [0]) self.assertEqual(index.request(ENUCoords(2.5, 5)), [0]) self.assertEqual(index.request(ENUCoords(7, 5)), [0]) self.assertEqual(index.request(ENUCoords(10, 10)), [0]) self.assertEqual(index.request(ENUCoords(0.5, 2.5)), [0]) self.assertEqual(index.request(ENUCoords(4.2, 5.8)), [0]) # # ===================================================================== self.assertEqual(index.request([ENUCoords(2.1, 0.5), ENUCoords(1.1, 1.1)]), [0]) self.assertEqual(index.request([ENUCoords(2.1, 0.5), ENUCoords(7.1, 3.5)]), []) self.assertEqual(index.request([ENUCoords(5.8, 5.8), ENUCoords(2.1, 1.1)]), [0]) # # ===================================================================== self.assertEqual(index.request(track), [0]) track2 = Track() p6 = Obs(ENUCoords(2.2, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) track2.addObs(p6) p7 = Obs(ENUCoords(2.2, 3.8), GPSTime.readTimestamp('2020-01-01 10:08:00')) track2.addObs(p7) p8 = Obs(ENUCoords(6.5, 3.8), GPSTime.readTimestamp('2020-01-01 10:08:00')) track2.addObs(p8) self.assertEqual(index.request(track2), [0]) track3 = Track() p9 = Obs(ENUCoords(6.5, 3.8), GPSTime.readTimestamp('2020-01-01 10:00:00')) track3.addObs(p9) p10 = Obs(ENUCoords(6.5, 7), GPSTime.readTimestamp('2020-01-01 10:08:00')) track3.addObs(p10) p11 = Obs(ENUCoords(10, 7), GPSTime.readTimestamp('2020-01-01 10:08:00')) track3.addObs(p11) self.assertEqual(index.request(track3), [0]) # # ===================================================================== # # ===================================================================== self.assertCountEqual(index.neighborhood(0, 4, 0), []) self.assertCountEqual(index.neighborhood(0, 4, 1), []) self.assertCountEqual(index.neighborhood(0, 4, 2), [0]) self.assertCountEqual(index.neighborhood(0, 4, 3), [0]) self.assertCountEqual(index.neighborhood(3, 0, 0), []) self.assertCountEqual(index.neighborhood(3, 0, 1), []) self.assertCountEqual(index.neighborhood(3, 0, 2), [0]) self.assertCountEqual(index.neighborhood(3, 0, 3), [0]) self.assertCountEqual(index.neighborhood(2, 2, 0), [0]) self.assertCountEqual(index.neighborhood(2, 2, 1), [0]) self.assertCountEqual(index.neighborhood(2, 2, 2), [0]) #self.assertCountEqual(index.neighborhood(2, 2, 3), [0]) # # UNIT = -1 self.assertCountEqual(index.neighborhood(2, 1, -1), [0]) self.assertCountEqual(index.neighborhood(2, 0, -1), [0]) self.assertCountEqual(index.neighborhood(0, 1, -1), [0]) self.assertCountEqual(index.neighborhood(1, 1, -1), [0]) self.assertCountEqual(index.neighborhood(0, 4, -1), [0]) self.assertCountEqual(index.neighborhood(3, 4, -1), [0]) self.assertCountEqual(index.neighborhood(4, 4, -1), [0]) self.assertCountEqual(index.neighborhood(2, 4, -1), [0]) # # ===================================================================== self.assertCountEqual(index.neighborhood(ENUCoords(0, 0.1)), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.5, 3)), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.5, 5)), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(7, 5)), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(10, 10)), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(6.5, 3.8), None, 0), []) self.assertCountEqual(index.neighborhood(ENUCoords(6.5, 3.8), None, 1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(6.5, 3.8), None, 2), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(6.5, 3.8), None, 3), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.2, 3.8), None, 0), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.2, 3.8), None, 1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.2, 3.8), None, 2), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.2, 3.8), None, 3), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(9.9, 7), None, 0), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(9.9, 7), None, 1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(9.9, 7), None, 2), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(9.9, 7), None, 3), [0]) # # UNIT = -1 self.assertCountEqual(index.neighborhood(ENUCoords(0, 0), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.5, 3), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.5, 5), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(7, 5), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(10, 10), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(6.5, 3.8), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(2.2, 3.8), None, -1), [0]) self.assertCountEqual(index.neighborhood(ENUCoords(9.9, 7), None, -1), [0]) # # ===================================================================== self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(0.1, 2.1)], None, 0), [0]) self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(0.1, 2.1)], None, 1), [0]) self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(0.1, 2.1)], None, 2), [0]) self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(0.1, 2.1)], None, -1), [0]) self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(7.1, 3.5)]), []) self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(7.1, 3.5)], None, 2), [0]) self.assertEqual(index.neighborhood([ENUCoords(2.1, 0.5), ENUCoords(7.1, 3.5)], None, -1), [0]) self.assertEqual(index.neighborhood([ENUCoords(5.8, 5.8), ENUCoords(2.1, 1.1)]), [0]) self.assertEqual(index.neighborhood([ENUCoords(5.8, 5.8), ENUCoords(2.1, 1.1)], None, 1), [0]) self.assertEqual(index.neighborhood([ENUCoords(5.8, 5.8), ENUCoords(2.1, 1.1)], None, 2), [0]) self.assertEqual(index.neighborhood([ENUCoords(5.8, 5.8), ENUCoords(2.1, 1.1)], None, -1), [0]) # # ===================================================================== self.assertEqual(index.neighborhood(track), [0]) self.assertEqual(index.neighborhood(track, None, 1), [0]) self.assertEqual(index.neighborhood(track, None, 3), [0]) self.assertEqual(index.neighborhood(track, None, -1), [0]) self.assertEqual(index.neighborhood(track2), [0]) self.assertEqual(index.neighborhood(track2, None, 0), [0]) self.assertEqual(index.neighborhood(track2, None, 1), [0]) self.assertEqual(index.neighborhood(track2, None, 3), [0]) self.assertEqual(index.neighborhood(track2, None, -1), [0]) self.assertEqual(index.neighborhood(track3), [0]) self.assertEqual(index.neighborhood(track3, None, 0), [0]) self.assertEqual(index.neighborhood(track3, None, 1), [0]) self.assertEqual(index.neighborhood(track3, None, 2), [0]) self.assertEqual(index.neighborhood(track3, None, 3), [0]) self.assertEqual(index.neighborhood(track3, None, -1), [0])
def test_selection_track_constraint(self): GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") chemin = os.path.join(self.resource_path, './data/trace1.dat') trace = FileReader.readFromFile(chemin, 2, 3, -1, 4, separator=",") trace.plot() # ===================================================================== trace1 = Track() c1 = trace.getObs(1350).position c0 = ENUCoords(c1.getX() + 5000, c1.getY()) c2 = ENUCoords(c1.getX() - 5000, c1.getY()) p1 = Obs(c0, GPSTime.readTimestamp("2018-07-31 14:00:00")) p2 = Obs(c1, GPSTime.readTimestamp("2018-07-31 14:01:00")) p3 = Obs(c2, GPSTime.readTimestamp("2018-07-31 14:02:00")) trace1.addObs(p1) trace1.addObs(p2) trace1.addObs(p3) plt.plot(trace1.getX(), trace1.getY(), 'r-') plt.show() c3 = TrackConstraint(trace1, mode=MODE_PARALLEL) s = Selector([c3]) selector = GlobalSelector([s]) isSelection = selector.contains(trace) self.assertFalse(isSelection) c4 = TrackConstraint(trace1, mode=MODE_CROSSES) s = Selector([c4]) selector = GlobalSelector([s]) isSelection = selector.contains(trace) self.assertTrue(isSelection) # ===================================================================== trace1 = Track() c0 = ENUCoords( trace.getObs(1349).position.getX(), trace.getObs(1349).position.getY()) c1 = ENUCoords( trace.getObs(1350).position.getX(), trace.getObs(1350).position.getY()) c2 = ENUCoords( trace.getObs(1351).position.getX(), trace.getObs(1351).position.getY()) p1 = Obs(c0, GPSTime.readTimestamp("2018-07-31 14:00:00")) p2 = Obs(c1, GPSTime.readTimestamp("2018-07-31 14:01:00")) p3 = Obs(c2, GPSTime.readTimestamp("2018-07-31 14:02:00")) trace1.addObs(p1) trace1.addObs(p2) trace1.addObs(p3) trace.plot() plt.plot(trace1.getX(), trace1.getY(), 'r-') plt.show() c3 = TrackConstraint(trace1, mode=MODE_PARALLEL) s = Selector([c3]) selector = GlobalSelector([s]) isSelection = selector.contains(trace) self.assertTrue(isSelection) c4 = TrackConstraint(trace1, mode=MODE_CROSSES) s = Selector([c4]) selector = GlobalSelector([s]) isSelection = selector.contains(trace) self.assertTrue(isSelection)
def setUp(self): #---------------------------------------------------------------------- # 4 sommets sur axes du cercle trigonométrique GPSTime.setReadFormat("4Y-2M-2D 2h:2m:2s") self.trace1 = Track() c1 = ENUCoords(1, 0, 0) p1 = Obs(c1, GPSTime.readTimestamp("2018-01-01 10:00:00")) self.trace1.addObs(p1) c2 = ENUCoords(0, 1, 0) p2 = Obs(c2, GPSTime.readTimestamp("2018-01-01 10:00:12")) self.trace1.addObs(p2) c3 = ENUCoords(-1, 0, 0) p3 = Obs(c3, GPSTime.readTimestamp("2018-01-01 10:00:40")) self.trace1.addObs(p3) c4 = ENUCoords(0, -1, 0) p4 = Obs(c4, GPSTime.readTimestamp("2018-01-01 10:01:50")) self.trace1.addObs(p4) self.trace1.addObs(p1) # --------------------------------------------------------------------- # Un escalier self.trace2 = Track() pm3 = Obs(ENUCoords(-2, -1), GPSTime.readTimestamp('2020-01-01 09:59:44')) self.trace2.addObs(pm3) pm2 = Obs(ENUCoords(-1, -1), GPSTime.readTimestamp('2020-01-01 09:59:48')) self.trace2.addObs(pm2) pm1 = Obs(ENUCoords(-1, 0), GPSTime.readTimestamp('2020-01-01 09:59:55')) self.trace2.addObs(pm1) p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace2.addObs(p1) p2 = Obs(ENUCoords(0, 2), GPSTime.readTimestamp('2020-01-01 10:00:01')) self.trace2.addObs(p2) p3 = Obs(ENUCoords(1, 2), GPSTime.readTimestamp('2020-01-01 10:00:02')) self.trace2.addObs(p3) p4 = Obs(ENUCoords(1, 5), GPSTime.readTimestamp('2020-01-01 10:00:03')) self.trace2.addObs(p4) p5 = Obs(ENUCoords(2, 5), GPSTime.readTimestamp('2020-01-01 10:00:04')) self.trace2.addObs(p5) p6 = Obs(ENUCoords(2, 9), GPSTime.readTimestamp('2020-01-01 10:00:06')) self.trace2.addObs(p6) p7 = Obs(ENUCoords(3, 9), GPSTime.readTimestamp('2020-01-01 10:00:08')) self.trace2.addObs(p7) p8 = Obs(ENUCoords(3, 14), GPSTime.readTimestamp('2020-01-01 10:00:10')) self.trace2.addObs(p8) p9 = Obs(ENUCoords(4, 14), GPSTime.readTimestamp('2020-01-01 10:00:12')) self.trace2.addObs(p9) p10 = Obs(ENUCoords(4, 20), GPSTime.readTimestamp('2020-01-01 10:00:15')) self.trace2.addObs(p10) # --------------------------------------------------------------------- # self.trace3 = Track() p1 = Obs(ENUCoords(0, 0), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p1) p2 = Obs(ENUCoords(1.5, 0.5), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p2) p3 = Obs(ENUCoords(2, 2), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p3) p4 = Obs(ENUCoords(3.75, 0.6), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p4) p5 = Obs(ENUCoords(5, 0.5), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p5) p6 = Obs(ENUCoords(3.55, -0.5), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p6) p7 = Obs(ENUCoords(1.8, -1.2), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p7) p8 = Obs(ENUCoords(1, -3), GPSTime.readTimestamp('2020-01-01 10:00:00')) self.trace3.addObs(p8)