5
5
6
6
from shapely .affinity import translate
7
7
from shapely .geometry import Point , LineString
8
- from fiona .crs import from_epsg
9
8
from datetime import datetime
10
9
from pandas import Grouper
11
10
@@ -87,7 +86,7 @@ def hvplot(self, *args, **kwargs):
87
86
"""
88
87
Generate an interactive plot using hvplot.
89
88
90
- The following parameters are set by default: geo=True, tiles='OSM'.
89
+ The following parameters are set by default: geo=True, tiles='OSM'.
91
90
92
91
Parameters
93
92
----------
@@ -114,16 +113,16 @@ def is_valid(self):
114
113
115
114
def is_latlon (self ):
116
115
"""
117
- Return whether the trajectory CRS is WGS 84 .
116
+ Return whether the trajectory CRS is geographic .
118
117
119
118
Returns
120
119
-------
121
120
bool
122
121
"""
123
- if self . crs [ 'init' ] == from_epsg ( 4326 )[ 'init' ]:
124
- return True
125
- else :
126
- return False
122
+ from pyproj import CRS
123
+
124
+ crs = CRS . from_user_input ( self . crs )
125
+ return crs . is_geographic
127
126
128
127
def to_crs (self , crs ):
129
128
"""
@@ -368,7 +367,7 @@ def get_segment_between(self, t1, t2):
368
367
if not segment .is_valid ():
369
368
raise RuntimeError ("Failed to extract valid trajectory segment between {} and {}" .format (t1 , t2 ))
370
369
return segment
371
-
370
+
372
371
def _compute_distance (self , row ):
373
372
pt0 = row ['prev_pt' ]
374
373
pt1 = row ['geometry' ]
@@ -380,16 +379,16 @@ def _compute_distance(self, row):
380
379
dist_meters = measure_distance_spherical (pt0 , pt1 )
381
380
else : # The following distance will be in CRS units that might not be meters!
382
381
dist_meters = measure_distance_euclidean (pt0 , pt1 )
383
- return dist_meters
384
-
382
+ return dist_meters
383
+
385
384
def _add_prev_pt (self , force = True ):
386
385
"""
387
386
Create a shifted geometry column with previous positions.
388
387
"""
389
388
if 'prev_pt' not in self .df .columns or force :
390
389
# TODO: decide on default enforcement behavior
391
390
self .df = self .df .assign (prev_pt = self .df .geometry .shift ())
392
-
391
+
393
392
def get_length (self ):
394
393
"""
395
394
Return the length of the trajectory.
@@ -424,7 +423,7 @@ def get_direction(self):
424
423
return calculate_initial_compass_bearing (pt0 , pt1 )
425
424
else :
426
425
return azimuth (pt0 , pt1 )
427
-
426
+
428
427
def _compute_heading (self , row ):
429
428
pt0 = row ['prev_pt' ]
430
429
pt1 = row ['geometry' ]
@@ -566,7 +565,7 @@ def intersection(self, feature, pointbased=False):
566
565
Trajectory segment intersecting with the feature
567
566
"""
568
567
return intersection (self , feature , pointbased )
569
-
568
+
570
569
def split_by_date (self , mode = 'day' ):
571
570
"""
572
571
Split trajectory into subtrajectories using regular time intervals.
0 commit comments