So back in September I cycled through the Pyrenees and decided to map it with Folium. Latitude and longitude info was retrieved from Strava gpx files and cleaned up using sed, grep and awk. Result is a file as below.
head Pirenaica_stage_1.csv lat,lon 43.3057130,-1.9778780 43.3057130,-1.9778770 43.3057140,-1.9778770 43.3057230,-1.9778880 43.3060960,-1.9783310 43.3064990,-1.9788360 43.3065760,-1.9789890 43.3067630,-1.9791790 43.3069250,-1.9791730
Below code will create the html with the complete Pirenaica course.
import random import folium from pyspark.sql import SparkSession from pyspark.sql.functions import col spark = SparkSession.builder.master("local").getOrCreate() # Change Spark loglevel spark.sparkContext.setLogLevel('FATAL') # Load the rides and ride_routes data from local instead of HDFS position1 = spark.read.load("/tmp/Pirenaica_stage_1.csv", format="csv", sep=",", inferSchema="true", header="true") position2 = spark.read.load("/tmp/Pirenaica_stage_2.csv", format="csv", sep=",", inferSchema="true", header="true") position3 = spark.read.load("/tmp/Pirenaica_stage_3.csv", format="csv", sep=",", inferSchema="true", header="true") position4 = spark.read.load("/tmp/Pirenaica_stage_4.csv", format="csv", sep=",", inferSchema="true", header="true") position5 = spark.read.load("/tmp/Pirenaica_stage_5.csv", format="csv", sep=",", inferSchema="true", header="true") position6 = spark.read.load("/tmp/Pirenaica_stage_6.csv", format="csv", sep=",", inferSchema="true", header="true") position7 = spark.read.load("/tmp/Pirenaica_stage_7.csv", format="csv", sep=",", inferSchema="true", header="true") position8 = spark.read.load("/tmp/Pirenaica_stage_8.csv", format="csv", sep=",", inferSchema="true", header="true") position9 = spark.read.load("/tmp/Pirenaica_stage_9.csv", format="csv", sep=",", inferSchema="true", header="true") position = [position1, position2, position3, position4, position5, position6, position7, position8, position9] #m = folium.Map() INIT_COORDINATES = (46.00, -0.50) m = folium.Map(location=INIT_COORDINATES, tiles='openstreetmap', zoom_start=1) col=0 colArray=['red','blue','green','yellow', 'brown', 'purple', 'salmon', 'olive', 'orange'] # Check file was correctly loaded for x in position: # x.printSchema() # x.show(2) # Map position coordinates = [[float(i.lat), float(i.lon)] for i in x.collect()] # Make a Folium map #m = folium.Map() m.fit_bounds(coordinates, padding=(25, 25)) folium.PolyLine(locations=coordinates, weight=5, color=colArray[random.randrange(8)]).add_to(m) folium.Marker(coordinates[1], icon=folium.Icon(color='blue'), popup="Origin").add_to(m) folium.Marker(coordinates[-1], popup="Destination", icon=folium.Icon(color='red')).add_to(m) col = col + 1 # Adding cols we crossed folium.Marker([43.366944, -1.820556], icon=folium.Icon(color='green'), popup='Col du Jaizkibel, alt: 455m').add_to(m) folium.Marker([43.175556, -1.402222], icon=folium.Icon(color='green'), popup='Col du Izpegi, alt: 672m').add_to(m) folium.Marker([43.0381288, -1.0287726], icon=folium.Icon(color='green'), popup='Col de Bagargi, alt: 1327m').add_to(m) folium.Marker([42.9966, -0.9871], icon=folium.Icon(color='green'), popup='Col d\'Erroymendi, alt: 1362m').add_to(m) folium.Marker([42.973889, -0.993889], icon=folium.Icon(color='green'), popup='Col de Larrau, alt: 1578m').add_to(m) folium.Marker([42.9212905, -0.989741], icon=folium.Icon(color='green'), popup='Alto de Laza, alt: 1106m').add_to(m) folium.Marker([42.970278, -0.765833], icon=folium.Icon(color='green'), popup='Col de La Pierre de St Martin, alt: 1766m').add_to(m) folium.Marker([42.976667, -0.339722], icon=folium.Icon(color='green'), popup='Col d\'Aubisque, alt: 1709m').add_to(m) folium.Marker([42.908194, 0.145111], icon=folium.Icon(color='green'), popup='Col du Tourmalet, alt: 2115m').add_to(m) folium.Marker([42.942306, 0.327389], icon=folium.Icon(color='green'), popup='Col d\'Aspin, alt: 1489m').add_to(m) folium.Marker([42.802222, 0.462778], icon=folium.Icon(color='green'), popup='Col de Peyresourde, alt: 1596m').add_to(m) folium.Marker([42.79, 0.445], icon=folium.Icon(color='green'), popup='Station de Peyragudes, alt: 1592m').add_to(m) folium.Marker([42.769167, 0.66], icon=folium.Icon(color='green'), popup='Col du Portillon, alt: 1293m').add_to(m) folium.Marker([42.663889, 0.981944], icon=folium.Icon(color='green'), popup='Port de la Bonaigua, alt: 2072m').add_to(m) folium.Marker([42.371444, 1.238953], icon=folium.Icon(color='green'), popup='Port del Canto, alt: 1730m').add_to(m) folium.Marker([42.3324755, 1.9450939], icon=folium.Icon(color='green'), popup='La Molina, alt: 1780m').add_to(m) folium.Marker([42.2111825,2.3321633], icon=folium.Icon(color='green'), popup='Coll de Santigosa, alt: 1064m').add_to(m) # Save to an html file m.save('pirenaica.html') # Cleanup spark.stop()
And output is an html file we will call pirenaica.html which we can see below.