#!/usr/bin/env python3 from argparse import ArgumentParser import pandas as pd import geopandas as gpd import contextily as cx import matplotlib.pyplot as plt if __name__ == "__main__": parser = ArgumentParser() parser.add_argument("-f", "--file", required=True, help="Messfahrt csv") parser.add_argument("-a", "--column", required=True, help="Column to plot") parser.add_argument("-l", "--label", help="Label above the plot.") parser.add_argument("--no_legend", action="store_false", default=True, help="Do not show legend.") parser.add_argument("--save", default=None, help="Location to save pdf file.") parser.add_argument("--time_offset", default=None, type=int, help="Minutes added to GPS datetime.") parser.add_argument( "--show_providerinfo", default=False, help="Show providerinfo for map tiles an zoom levels.", ) args = parser.parse_args() df = pd.read_csv(args.file) gdf = gpd.GeoDataFrame( df, geometry=gpd.points_from_xy(df["longitude"], df["latitude"]), crs="EPSG:4326", ) gdf["srtt"] = gdf["srtt"].apply(lambda x: x / 10 ** 6) print("Start plotting...") df_wm = gdf.to_crs(epsg=3857) ax2 = df_wm.plot() ax2 = df_wm.plot(args.column, cmap="hot", legend=args.no_legend, ax=ax2) # ax2 = df_wm.plot.scatter(x="longitude", y="latitude", c="kmh", cmap="hot") # zoom 17 is pretty cx.add_basemap(ax2, source=cx.providers.OpenStreetMap.Mapnik, zoom=17) # gdf.plot() ax2.set_axis_off() ax2.set_title(args.label if args.label else args.column) if args.show_providerinfo: ##################################### # Identifying how many tiles latlon_outline = gdf.to_crs("epsg:4326").total_bounds def_zoom = cx.tile._calculate_zoom(*latlon_outline) print(f"Default Zoom level {def_zoom}") cx.howmany(*latlon_outline, def_zoom, ll=True) cx.howmany(*latlon_outline, def_zoom + 1, ll=True) cx.howmany(*latlon_outline, def_zoom + 2, ll=True) # Checking out some of the other providers and tiles print(cx.providers.CartoDB.Voyager) print(cx.providers.Stamen.TonerLite) print(cx.providers.Stamen.keys()) ##################################### # df.plot(x="longitude", y="latitude", kind="scatter", colormap="YlOrRd") if args.save: plt.savefig("{}gps_plot.pdf".format(args.save)) else: plt.show()