Пример #1
0
 def test_clip_two_intersections_with_same_polygon(self):
     polygon = Polygon([(5, -5), (7, -5), (7, 12), (5, 12), (5, -5)])
     df = pd.DataFrame([
         {'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 12, 0, 0)},
         {'geometry': Point(6, 0), 't': datetime(2018, 1, 1, 12, 6, 0)},
         {'geometry': Point(10, 0), 't': datetime(2018, 1, 1, 12, 10, 0)},
         {'geometry': Point(10, 10), 't': datetime(2018, 1, 1, 12, 30, 0)},
         {'geometry': Point(0, 10), 't': datetime(2018, 1, 1, 13, 0, 0)}
         ]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     intersections = traj.clip(polygon)
     # spatial 
     result = []
     for x in intersections:
         result.append(x.to_linestring().wkt)
     expected_result = ["LINESTRING (5 0, 6 0, 7 0)", "LINESTRING (7 10, 5 10)"]
     self.assertEqual(expected_result, result)
     # temporal 
     result = []
     for x in intersections:
         result.append((x.get_start_time(), x.get_end_time()))
     expected_result = [(datetime(2018, 1, 1, 12, 5, 0), datetime(2018, 1, 1, 12, 7, 0)),
                        (datetime(2018, 1, 1, 12, 39, 0), datetime(2018, 1, 1, 12, 45, 0))]
     self.assertEqual(expected_result, result)
     # ids
     result = []
     for x in intersections:
         result.append(x.id)
     expected_result = ['1_0', '1_1']
     self.assertEqual(expected_result, result)
Пример #2
0
 def test_clip_pointbased(self):
     polygon = Polygon([(5.1, -5), (7.5, -5), (7.5, 12), (5.1, 12), (5.1, -5)])
     df = pd.DataFrame([
         {'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 12, 0, 0)},
         {'geometry': Point(6, 0), 't': datetime(2018, 1, 1, 12, 6, 0)},
         {'geometry': Point(6.5, 0), 't': datetime(2018, 1, 1, 12, 6, 30)},
         {'geometry': Point(7, 0), 't': datetime(2018, 1, 1, 12, 7, 0)},
         {'geometry': Point(10, 0), 't': datetime(2018, 1, 1, 12, 11, 0)},
         {'geometry': Point(10, 10), 't': datetime(2018, 1, 1, 12, 30, 0)},
         {'geometry': Point(5, 10), 't': datetime(2018, 1, 1, 12, 45, 0)},
         {'geometry': Point(0, 10), 't': datetime(2018, 1, 1, 13, 0, 0)}
         ]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     intersections = traj.clip(polygon, pointbased=True)
     # spatial
     result = []
     for x in intersections:
         result.append(x.to_linestring())
     expected_result = [LineString([(6, 0), (6.5, 0), (7, 0)])]
     self.assertEqual(expected_result, result)
     # temporal
     result = []
     for x in intersections:
         result.append((x.get_start_time(), x.get_end_time()))
     expected_result = [(datetime(2018, 1, 1, 12, 6, 0), datetime(2018, 1, 1, 12, 7, 0))]
     self.assertEqual(expected_result, result)
     # ids
     result = []
     for x in intersections:
         result.append(x.id)
     expected_result = ['1_0']
     self.assertEqual(expected_result, result)
Пример #3
0
 def test_clip_with_no_intersection(self):
     polygon = Polygon([(105, -5), (107, -5), (107, 12), (105, 12), (105, -5)])
     df = pd.DataFrame([
         {'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 12, 0, 0)},
         {'geometry': Point(6, 0), 't': datetime(2018, 1, 1, 12, 10, 0)},
         {'geometry': Point(10, 0), 't': datetime(2018, 1, 1, 12, 15, 0)},
         {'geometry': Point(10, 10), 't': datetime(2018, 1, 1, 12, 30, 0)},
         {'geometry': Point(0, 10), 't': datetime(2018, 1, 1, 13, 0, 0)}]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     result = traj.clip(polygon)
     expected_result = []
     self.assertEqual(expected_result, result)
Пример #4
0
 def test_clip_with_numerical_time_issues(self):     
     xmin, xmax, ymin, ymax = 116.36850352835575, 116.37029459899574, 39.904675309969896, 39.90772814977718
     polygon = Polygon([(xmin, ymin), (xmin, ymax), (xmax, ymax), (xmax, ymin), (xmin, ymin)])
     df = pd.DataFrame([
         {'geometry': Point(116.36855, 39.904926), 't': datetime(2009, 3, 10, 11, 3, 35)},
         {'geometry': Point(116.368612, 39.904877), 't': datetime(2009, 3, 10, 11, 3, 37)},
         {'geometry': Point(116.368644, 39.90484), 't': datetime(2009, 3, 10, 11, 3, 39)}
         ]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     intersection = traj.clip(polygon)[0]
     result = intersection.to_linestring().wkt
     expected_result = "LINESTRING (116.36855 39.904926, 116.368612 39.904877, 116.368644 39.90484)"
     self.assertEqual(expected_result, result)
Пример #5
0
 def test_clip_pointbased_singlepoint(self):
     polygon = Polygon([(5.1, -5), (6.4, -5), (6.4, 12), (5.1, 12), (5.1, -5)])
     df = pd.DataFrame([
         {'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 12, 0, 0)},
         {'geometry': Point(6, 0), 't': datetime(2018, 1, 1, 12, 6, 0)},
         {'geometry': Point(6.5, 0), 't': datetime(2018, 1, 1, 12, 6, 30)},
         {'geometry': Point(7, 0), 't': datetime(2018, 1, 1, 12, 7, 0)},
         {'geometry': Point(10, 0), 't': datetime(2018, 1, 1, 12, 11, 0)}
         ]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     intersections = traj.clip(polygon, pointbased=True)
     result = intersections
     expected_result = []
     self.assertEqual(expected_result, result)
Пример #6
0
 def test_clip_interpolated_singlepoint(self):
     polygon = Polygon([(5.1, -5), (6.4, -5), (6.4, 12), (5.1, 12), (5.1, -5)])
     df = pd.DataFrame([
         {'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 12, 0, 0)},
         {'geometry': Point(6, 0), 't': datetime(2018, 1, 1, 12, 6, 0)},
         {'geometry': Point(6.5, 0), 't': datetime(2018, 1, 1, 12, 6, 30)},
         {'geometry': Point(7, 0), 't': datetime(2018, 1, 1, 12, 7, 0)},
         {'geometry': Point(10, 0), 't': datetime(2018, 1, 1, 12, 11, 0)}
         ]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     intersections = traj.clip(polygon, pointbased=False)
     result = []
     for x in intersections:
         result.append(x.to_linestring())
     expected_result = [LineString([(5.1, 0), (6.0, 0), (6.4, 0)])]
     self.assertEqual(expected_result, result)
Пример #7
0
 def test_clip_with_milliseconds(self):
     polygon = Polygon([(5, -5), (7, -5), (8, 5), (5, 5), (5, -5)])
     df = pd.DataFrame([
         {'geometry': Point(0, 10), 't': datetime(2018, 1, 1, 12, 0, 0)},
         {'geometry': Point(10, 10), 't': datetime(2018, 1, 1, 12, 10, 0)},
         {'geometry': Point(10, 0), 't': datetime(2018, 1, 1, 12, 15, 0)},
         {'geometry': Point(6, 0), 't': datetime(2018, 1, 1, 12, 30, 0)},
         {'geometry': Point(0, 0), 't': datetime(2018, 1, 1, 13, 0, 0)}
         ]).set_index('t')
     geo_df = GeoDataFrame(df, crs=from_epsg(31256))
     traj = Trajectory(1, geo_df)
     intersection = traj.clip(polygon)[0]
     # spatial
     result = intersection.to_linestring().wkt
     expected_result = "LINESTRING (7.5 0, 6 0, 5 0)"
     self.assertEqual(expected_result, result)
     # temporal
     self.assertAlmostEqual(datetime(2018, 1, 1, 12, 24, 22, 500000), intersection.get_start_time(), delta=timedelta(milliseconds=1))
     self.assertEqual(datetime(2018, 1, 1, 12, 35, 0), intersection.get_end_time())
Пример #8
0
if __name__ == '__main__':
    xmin, xmax, ymin, ymax = 116.3685035, 116.3702945, 39.904675, 39.907728
    polygon = Polygon([(xmin, ymin), (xmin, ymax), (xmax, ymax), (xmax, ymin),
                       (xmin, ymin)])

    t_start = datetime.now()
    df = read_file(os.path.join(script_path, 'demodata_geolife.gpkg'))
    df['t'] = pd.to_datetime(df['t'])
    df = df.set_index('t')
    print("Finished reading {} rows in {}".format(len(df),
                                                  datetime.now() - t_start))

    t_start = datetime.now()
    trajectories = []
    for key, values in df.groupby(['trajectory_id']):
        trajectory = Trajectory(key, values)
        print(trajectory)
        trajectories.append(trajectory)
    print("Finished creating {} trajectories in {}".format(
        len(trajectories),
        datetime.now() - t_start))

    t_start = datetime.now()
    intersections = []
    for key, values in df.groupby(['trajectory_id']):
        traj = Trajectory(key, values)
        for intersection in traj.clip(polygon):
            intersections.append(intersection)
    print("Found {} intersections in {}".format(len(intersections),
                                                datetime.now() - t_start))