Run

$AlbumDirectory="C:\\drorbn\\Album\\2026.07.18-19_Calgary_to_Banff_Ride";

res=800;
fs=FileNames[$AlbumDirectory<>"/*.gpx"];
fs=Complement[fs,
Union[
StringReplace[{"@.gpx"->".gpx", "@.kml"->".kml"}]/@Select[fs,StringPart[#,-5]=="@"&]
]
]
data=DeleteCases[
Union@Table["Geometry"/.Import[f,"Data"],{f,fs}],
GeoPosition[{_,None}], ∞
];
BruceData=Union["Geometry"/.Import[$AlbumDirectory<>"/../Summaries/Bruce_Trail.gpx","Data"]];
map0=GeoGraphics[{Red,data},GeoScaleBar->"Kilometers", ImageSize ->res];
AllTracks=Get["C:\\drorbn\\Album/Summaries/AllTracks.m"];

Rasterize[
map=GeoGraphics[{Thickness[0.001], Purple, BruceData,Thickness[0.0016],Blue, AllTracks,Thickness[0.0024], Red,data},
GeoScaleBar->"Kilometers",
ImageSize ->res,
GeoRange->(GeoRange/.Options[map0])
],
RasterSize ->res
]
Export[$AlbumDirectory<>"/Path%.png",map];

map3D=Echo@ResourceFunction["GeoElevationGraphics3D"][
{Purple, BruceData,Thick, Blue, AllTracks,Red,data},
GeoGridRangePadding->0,
GeoScaleBar->"Kilometers",
ImageSize ->res,
GeoRange->(GeoRange/.Options[map0])
];
Export[$AlbumDirectory<>"/Path3D.png",map3D]

PathsLocation=Module[{R=3000,r=80,n=6,res=1000},
ImageAssemble[
Partition[#,3]&@Table[
Rasterize[
GeoGraphics[{Thickness[(2n-k)/6000],Purple, BruceData,Thickness[(2n-k)/4000],Blue,AllTracks, Red,Thickness[(2n-k)/1500],data},
GeoCenter->Mean@Cases[data,GeoPosition[l_List]:>Mean[l],∞] ,
GeoRange->Quantity[R(((r/R))^((k-1)/(n-1))),"Kilometers"],
GeoScaleBar->"Kilometers",
ImageSize->res
],
RasterSize->res
],
{k,n}],
"Fit",Background -> White]
]
Export[$AlbumDirectory<>"/PathsLocation.png",PathsLocation]

Map with photo thumbnails

imgs=FileNames["*.jpg",$AlbumDirectory];
map=GeoGraphics[{
GeoMarker[
GeoPosition[{1,-1}*Lookup[Import[#,"Exif"],{"GPSLatitude","GPSLongitude"}]], Graphics@Rasterize[Import[#],RasterSize ->res],
"Scale"->0.0075
]& /@ imgs,
Thickness[0.0016], Purple, BruceData,Blue, AllTracks,Thickness[0.0024], Red,data
},
GeoScaleBar->"Kilometers",
ImageSize ->res,
GeoRange->(GeoRange/.Options[map0])
]
Export[$AlbumDirectory<>"/PathWithImages.png",map]

Image Directory

If[Head[PensieveDirectives]===List, ImageComments="ImageComments"/.PensieveDirectives,ImageComments={}];
(Interpretation[ImageResize[Import@#,400],#]->(#/.ImageComments/.(#->"")))&/@FileNames["*.jpg"|"*.jpeg"|"*.png"|"*.mp4", $AlbumDirectory]

Export

I’ve set up to meet with Dylan at Calgary airport, to ride together to a <a href=http://drorbn.net/ba26>conference</a> in Banff. When I got to the luggage carousel, Dylan was there chatting with another cyclist. Nice, I thought. But then the nice turned into amazing and wonderful, when I realized that that other cyclist was my son, Assaf, who came in surprise from Vancouver to join us for the first day of the ride! Yay Assaf! Thanks Assaf!
<p>On Saturday we rode 45.4km, with 500 meters of ascents from Calgary airport to Cochrane, with Assaf on a rental bike, Dylan on his Bike Friday, and me on <a href=../Equipment/Bromp/index.html>Bromp</a>. We then had dinner in a nice vegetarian Thai restaurant, and crowded into our motel room.
<p>On Sunday we had breakfast together and then Assaf caught the bus back to Calgary and Dylan and I continued another 108km with 790m of ascents and strong headwinds to Banff. It was hard day! It ended with a dinner and social gathering with many of the conference people; many of them I’ve known and loved for years.

PensieveDirectives={
"TitleNotes" -> "I've set up to meet with Dylan at Calgary airport, to ride together to a <a href=http://drorbn.net/ba26>conference</a> in Banff. When I got to the luggage carousel, Dylan was there chatting with another cyclist. Nice, I thought. But then the nice turned into amazing and wonderful, when I realized that that other cyclist was my son, Assaf, who came in surprise from Vancouver to join us for the first day of the ride! Yay Assaf! Thanks Assaf!
<p>On Saturday we rode 45.4km, with 500 meters of ascents from Calgary airport to Cochrane, with Assaf on a rental bike, Dylan on his Bike Friday, and me on <a href=../Equipment/Bromp/index.html>Bromp</a>. We then had dinner in a nice vegetarian Thai restaurant, and crowded into our motel room.
<p>On Sunday we had breakfast together and then Assaf caught the bus back to Calgary and Dylan and I continued another 108km with 790m of ascents and strong headwinds to Banff. It was hard day! It ended with a dinner and social gathering with many of the conference people; many of whom I've known and loved for years.",
"ImageComments" ->{}
}