%matplotlib inline
import urllib
import os
import pandas as pd
import geopandas as gpd
from geopandas import GeoDataFrame, read_file
from shapely.geometry import Point, LineString, Polygon
from pyproj import CRS
from datetime import datetime, timedelta
from matplotlib import pyplot as plt
import sys
sys.path.append("..")
import movingpandas as mpd
import warnings
warnings.simplefilter("ignore")
import panel as pn
import panel.widgets as pnw
df = read_file('../data/geolife_small.gpkg')
df['t'] = pd.to_datetime(df['t'])
df = df.set_index('t').tz_localize(None)
df.head()
traj_collection = mpd.TrajectoryCollection(df, 'trajectory_id')
my_traj = traj_collection.trajectories[1].to_crs(CRS(4088))
my_traj.is_latlon
def my_plot(tolerance=0.001, generalizer='douglas-peucker'):
if generalizer=='douglas-peucker':
generalized = mpd.DouglasPeuckerGeneralizer(my_traj).generalize(tolerance=tolerance)
else:
generalized = mpd.MinDistanceGeneralizer(my_traj).generalize(tolerance=tolerance)
generalized.add_speed(overwrite=True)
return ( generalized.hvplot(title='Trajectory {}'.format(generalized.id), c='speed', cmap='Viridis', colorbar=True, clim=(0,20), line_width=10, width=500, height=500) +
generalized.df['speed'].hvplot.hist(title='Speed histogram', width=300, height=500)
)
kw = dict(tolerance=(0, 1000), generalizer=['douglas-peucker', 'min-distance'])
pn.interact(my_plot, **kw)
def plot_generalized(traj_id=1, tolerance=10, generalizer='douglas-peucker'):
my_traj = traj_collection.get_trajectory(traj_id).to_crs(CRS(4088))
if generalizer=='douglas-peucker':
generalized = mpd.DouglasPeuckerGeneralizer(my_traj).generalize(tolerance)
else:
generalized = mpd.MinDistanceGeneralizer(my_traj).generalize(tolerance)
generalized.add_speed(overwrite=True)
return (
generalized.hvplot(title='Trajectory {} (tolerance={})'.format(my_traj.id, tolerance), c='speed', cmap='Viridis', colorbar=True, clim=(0,20), line_width=10, width=500, height=500) +
generalized.df['speed'].hvplot.hist(title='Speed histogram', width=300, height=500)
)
kw = dict(traj_id=(1, len(traj_collection)), tolerance=(10, 100, 10), generalizer=['douglas-peucker', 'min-distance'])
pn.interact(plot_generalized, **kw)