No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

73 líneas
2.4KB

  1. #!/usr/bin/env python3
  2. from argparse import ArgumentParser
  3. import pandas as pd
  4. import geopandas as gpd
  5. import contextily as cx
  6. import matplotlib.pyplot as plt
  7. if __name__ == "__main__":
  8. parser = ArgumentParser()
  9. parser.add_argument("-f", "--file", required=True, help="Messfahrt csv")
  10. parser.add_argument("-a", "--column", required=True, help="Column to plot")
  11. parser.add_argument("-l", "--label", help="Label above the plot.")
  12. parser.add_argument("--no_legend", action="store_false", default=True, help="Do not show legend.")
  13. parser.add_argument("--save", default=None, help="Location to save pdf file.")
  14. parser.add_argument("--time_offset", default=None, type=int, help="Minutes added to GPS datetime.")
  15. parser.add_argument(
  16. "--show_providerinfo",
  17. default=False,
  18. help="Show providerinfo for map tiles an zoom levels.",
  19. )
  20. args = parser.parse_args()
  21. df = pd.read_csv(args.file)
  22. gdf = gpd.GeoDataFrame(
  23. df,
  24. geometry=gpd.points_from_xy(df["longitude"], df["latitude"]),
  25. crs="EPSG:4326",
  26. )
  27. gdf["srtt"] = gdf["srtt"].apply(lambda x: x / 10 ** 6)
  28. print("Start plotting...")
  29. df_wm = gdf.to_crs(epsg=3857)
  30. ax2 = df_wm.plot()
  31. ax2 = df_wm.plot(args.column, cmap="hot", legend=args.no_legend, ax=ax2)
  32. # ax2 = df_wm.plot.scatter(x="longitude", y="latitude", c="kmh", cmap="hot")
  33. # zoom 17 is pretty
  34. cx.add_basemap(ax2, source=cx.providers.OpenStreetMap.Mapnik, zoom=17)
  35. # gdf.plot()
  36. ax2.set_axis_off()
  37. ax2.set_title(args.label if args.label else args.column)
  38. if args.show_providerinfo:
  39. #####################################
  40. # Identifying how many tiles
  41. latlon_outline = gdf.to_crs("epsg:4326").total_bounds
  42. def_zoom = cx.tile._calculate_zoom(*latlon_outline)
  43. print(f"Default Zoom level {def_zoom}")
  44. cx.howmany(*latlon_outline, def_zoom, ll=True)
  45. cx.howmany(*latlon_outline, def_zoom + 1, ll=True)
  46. cx.howmany(*latlon_outline, def_zoom + 2, ll=True)
  47. # Checking out some of the other providers and tiles
  48. print(cx.providers.CartoDB.Voyager)
  49. print(cx.providers.Stamen.TonerLite)
  50. print(cx.providers.Stamen.keys())
  51. #####################################
  52. # df.plot(x="longitude", y="latitude", kind="scatter", colormap="YlOrRd")
  53. if args.save:
  54. plt.savefig("{}gps_plot.pdf".format(args.save))
  55. else:
  56. plt.show()