---
title: "Bendigo-Nagambie-Echuca"
keywords: 
  - Heathcote
  - Mooroopna
  - Kyabram
  - Yellowbelly Track
  - O'Keefe Rail Trail
---

```{r}
#| echo: false
#| label: setup
#| message: false
#| warning: false

library(dplyr); library(leaflet); library(gpx); library(sf);
library(simplevis); library(downloadthis);library(osmdata);
library(RColorBrewer)
rename_geometry <- function(g, name){
    current = attr(g, "sf_column")
    names(g)[names(g)==current] = name
    st_geometry(g)=name
    g
}
```

```{r}
#| eval: false
#| echo: false

gpx_files <- dir("gpx_files/bendigo_echuca")
dates <- vector("numeric")
for(i in 1:length(gpx_files)){
route <- gpx::read_gpx(paste0("gpx_files/bendigo_echuca/",gpx_files[i]))
if(names(route$tracks) == "Echuca loop"){
assign("x", sf::st_as_sf(route$tracks$`Echuca loop`,
                         coords = c("Longitude","Latitude"), crs = 4326))
}else{
assign("x", sf::st_as_sf(route$tracks$`Bicycle Tour`,
                         coords = c("Longitude","Latitude"), crs = 4326))
}
dates <- c(dates, as.Date(x$Time[round(length(x$Time)/2)]))
sf::st_write(x, paste0("gpx_files/bendigo_echuca/segment_",i,".gpkg"))
}
```

```{r}
#| echo: false
#| label: master
#| message: false
#| warning: false
#| fig-width: 5
#| fig-height: 5

gpx_files <- dir("gpx_files/bendigo_echuca")[grep("gpx",dir("gpx_files/bendigo_echuca"))]
dates <- vector("numeric")
for(i in 1:length(gpx_files)){
  route <- gpx::read_gpx(paste0("gpx_files/bendigo_echuca/",gpx_files[i]))
if(names(route$tracks) == "Echuca loop"){
assign("x", sf::st_as_sf(route$tracks$`Echuca loop`,
                         coords = c("Longitude","Latitude"), crs = 4326))
}else{
assign("x", sf::st_as_sf(route$tracks$`Bicycle Tour`,
                         coords = c("Longitude","Latitude"), crs = 4326))
}
dates <- c(dates, as.Date(x$Time[round(length(x$Time)/2)]))
}
  gpkg_files <- dir("gpx_files/bendigo_echuca")[grep("gpkg",dir("gpx_files/bendigo_echuca"))]
for(i in 1:length(gpkg_files)){
route_i <- sf::st_read(paste0("gpx_files/bendigo_echuca/",
                              gpkg_files[i]), quiet = TRUE)
route_i$date <- dates[i]
if(i == 1){ 
  cycle_route <- route_i
}else{
  cycle_route <- rbind(cycle_route, route_i)
}
}
cycle_route$day <- (1:6)[match(cycle_route$date, unique(cycle_route$date))]
cycle_route_lines <- cycle_route %>%  group_by(day) %>% 
       summarise(do_union = FALSE) %>%
       st_cast("LINESTRING")
cycle_route_lines$col <- RColorBrewer::brewer.pal(6,"Paired")

day_cols <- RColorBrewer::brewer.pal(6,"Spectral")
simplevis::leaf_sf_col(cycle_route, col_var = "day", pal = day_cols,
                       basemap = "light",
                       popup = FALSE)
```

A five-day bike tour during an unexpected longish-term stay in Bendigo. Mainly quiet back roads and clay-lined river roads, with a few unexpected steep-sided channels in the floodplain south of Mooroopna requiring porting of luggage and bikes. Lots of quiet red-gum floodplain forest (and irrigated floodplain agriculture).

### Day 1. Bendigo to Heathcote

Monday, 8 Apr 2024 (\~54 km from Central Bendigo, all bike trail)

```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 3.5
#| fig-height: 2
seg1 <- sf::st_read("gpx_files/bendigo_echuca/segment_1.gpkg", quiet = TRUE)
simplevis::leaf_sf_col(seg1, col_var = "Elevation", basemap = "street",
                       popup = FALSE)
download_file(
  path = "gpx_files/bendigo_echuca/2024-04-08_1503044920_Bicycle Tour.gpx",
  output_name = "bendigo_heathcote.gpx",
  button_label = "Download gpx of route",
  button_type = "success",
  has_icon = TRUE,
  icon = "fa fa-save",
  self_contained = FALSE
)
```

We began on the O'Keefe Rail Trail from Bendigo to Heatchote. The trail starts north of Lake Weeroona off the Bendigo Creek bike trail that bisects Bendigo. A pretty standard 49-km-long rail trail, it begins with 10 or so km through the low-density industrial outskirts of Bendigo, and then the big-block rural residential forests of Strathfieldsaye, Junourton, and Longlea. We made a brief stop to use the bike stand on the track at Junourton to tweak gears and pump tyres (there's another one at Axedale).

::: {layout="[60,40]"}
![The platypus compass on the Campaspe at Axedale](images/axedale_platypus_compass.jpg)

![](images/axedale_campaspe.jpg){fig-alt="The Campaspe at Axedale"}
:::

After lunch in the sun at the Rise-and-Grind at Axedale, we rolled down the hill to the Campaspe River (no platypus to be seen today at the platypus compass), and slogged up the other side to the flat ride through scrappy forests and farmland. The track, having descended to Lake Eppalock, crossed an arm of the lake, which is a nice place to stop and bird watch. We had a comfortable night in a cabin at the caravan park (which was better than our last stay at the Heathcote Inn, 2 km north along the crazily long main street). Monday night eating options in Heathcote are limited, but we managed a passable pizza at the Midlands pizza shop. (Our last visit, on a weekend, afforded a very passable dinner at Paling Brothers.)

![Crossing an arm of Lake Eppalock](images/lake_eppalock.jpg){fig-alt="Crossing an arm of Lake Eppalock"}

Todays wildlife highlights: cute grebes on the pond at the Axedale quarry; a mob of huge grey kangaroos bouncing out of a culvert under the track soon after the quarry; an egret lunging and catching fish after fish on the edge of Lake Eppalock.

### Day 2. Heathcote to Nagambie

Tuesday, 9 Apr 2024. (57 km, mainly back roads, mainly gravel, 8 km of a hairy C-road)

```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 3.5
#| fig-height: 2
seg1 <- sf::st_read("gpx_files/bendigo_echuca/segment_2.gpkg", quiet = TRUE)
simplevis::leaf_sf_col(seg1, col_var = "Elevation", basemap = "street",
                       popup = FALSE)
download_file(
  path = "gpx_files//bendigo_echuca/2024-04-09_1504435965_Bicycle Tour.gpx",
  output_name = "heathcote_nagambie.gpx",
  button_label = "Download gpx of route",
  button_type = "success",
  has_icon = TRUE,
  icon = "fa fa-save",
  self_contained = FALSE
)
```

We've ridden a lot of C roads in Australia, but can't remember any quite so terrifying as the Heathcote-Nagambie Road. We managed to spend most of the day on back roads, but the 8 or so km that we had to spend on the main road, even on a quiet Tuesday, were somewhat hair-raising. We were probably only passed by a dozen cars and two trucks in total, but almost all of the cars were big SUVs, very few of them slowed down (from 100+ km/h) to pass, and a couple didn't bother to shift lane, even a little bit, screaming by us with well less that a metre to spare. (The trucks were better.) Not sure what it is about this particular road, but it certainly lived up to the warnings we were given by the locals in Heathcote before we headed off.

But all in all, it was a pleasant day's riding. The ride out of Heathcote was along quiet Caldwell St to the Costerfield Road, which was sealed about half way, and good quality gravel the rest of the way to the main road at Costerfield. At Costerfield we sat on the stoop of the Community Hall to gauge how keen we were to stay off the main road. When the first big tanker truck roared by, we quickly decided to head down the unsealed Costerfield Reservoir and Graytown Roads, which took us another 10 or so km closer to Nagambie. These back roads were pleasant, flat, and reasonably smooth, taking us across some small creeks and along the northern boundary of the Puckapunyal Army Reserve. At times it was difficult to talk because of the deafening screeching of the Sulphur-crested cockatoos.

::: column-margin
![](images/graytown_road.jpg){fig-alt="On the Graytown Road"}
:::

The Graytown Community Hall was a pleasant place to shelter from a passing squall, much more pleasant than Graytown itself that we found ourselves in 10 minutes later down the road. With nothing better on offer, we sat on a couple of rocks next to the information board (which we failed to look at) and ate our lunch (sandwiches bought in Heathcote on the way out). With food on board, we tackled the unpleasant 5 km of main road until the next back road to Mitchellstown: another pleasant diversion through ironbark and redgum forests over a couple of hills to the Goulburn Valley. The road along the river didn't afford any river views until we crossed Sandy Creek, which looked suspiciously large - presumably a backwash of the Goulburn. We can't be sure but we reckon we spotted a platypus from the bridge there.

::: {layout-ncol="2"}
![Crossing the Goulburn at Nagambie](images/Goulburn_bridge_nagambie.jpg)

![](images/Goulburn_at_nagambie.jpg)
:::

Back to the main road for the last 3 km of low-level terror until we finally crossed the Goulburn itself and on another backroad to our accommodation at the Caravan Park at the south end of Nagambie. A long ride into the Rowing Club in town gave us a sunset view over the lake with dinner.

Today's wildlife highlight: a small mob of emus in a paddock on the Goulburn floodplain, and maybe evidence of a platypus in Sandy Creek.

### Day 3. Nagambie to Mooroopna

Wednesday, 10 Apr 2024 (67 km, quiet back roads, clay river roads, the odd surprise obstacle)

::: {layout-ncol="2"}
```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 3.5
#| fig-height: 5
#| 
seg1 <- sf::st_read("gpx_files/bendigo_echuca/segment_3.gpkg", quiet = TRUE)
simplevis::leaf_sf_col(seg1, col_var = "Elevation", basemap = "street",
                       popup = FALSE)
download_file(
  path = "gpx_files//bendigo_echuca/2024-04-10_1505857016_Bicycle Tour.gpx",
  output_name = "nagambie_mooroopna.gpx",
  button_label = "Download gpx of route",
  button_type = "success",
  has_icon = TRUE,
  icon = "fa fa-save",
  self_contained = FALSE
)
```

::: {layout-ncol="1"}
The last 10 km of today's tour brought some unexpected challenges that were not evident from the route map, but otherwise it was an easy, flat day's ride with the wind at our backs.

After breakfast at a cafe overlooking Lake Nagambie, we took the service lane and then bike track along the main road before turning off on the quieter Kirwans Bridge Road to the river. Our anxiety levels only increased a little as we passed several signs telling us the bridge was closed. It was indeed closed, but only to car traffic and we were able to make the long walk across it: riding with our road tyres definitely out of the question with the many gaps between the planks. We stopped on the bridge to admire the strange flooded forest of the inundated river, trying to make sense of the distant noises that we finally decided were a mix of nail guns, bird-scaring booms to keep the corellas off crops, and actual guns aimed at waterbirds. Fortunately none were aimed at us.

At the other side of the bridge, protest signs revealed community disgruntlement at being on the wrong side of the closed bridge. The bridge road took us to the Murchison Road, a quiet, sealed ride that took us all the way to Murchison only a couple of hours after leaving Nagambie. We rode past vineyards and fruit orchards, a chocolate brown wallaby in the roadside scrub, and a series of piles of dead corellas, presumably left as a warning to others.
:::
:::

![Kirwans Bridge](images/kirwan_bridge.jpg)

At Murchison, a little too early for lunch, we took a coffee and bought take-away rolls to eat further up the road at what we imagined would be one of many idyllic river-side picnic stops. The park on the river at Murchison was one such place, but alas the River Road out of Murchison kept a substantial distance from the river for 10 km. The first few km, along a busy stretch of the road were mainly along an off-road bike track, which was fine (with one massive widow-maker presenting the only significant challenge). Back on the road itself, when the main route to Mooroopna headed off left, we rolled through cattle country for a long way, through some gravel sections, increasingly keen on a lunch stop, which was not an attractive option among the cows and flies, tantalizingly close to the river-red gum forests of the rivers which were always visible, just over there.

::: column-margin
![](images/murchison_widowmaker.jpg){fig-alt="A redgum widow-maker on the track out of Murchison"} A redgum widow-maker on the track out of Murchison
:::

We decided to aim for the Arcadia Streamside Reserve, where it came close to the river at the Toolamba Cemetry. A short ride down a dirt track led to an impressive billabong and beyond to the river for our much anticipated lunch by the river under the shade of the red gums.

Onward, back on sealed roads to Toolamba, a surprisingly substantial town. We were first tempted to stop for a drink at the pub. But then we saw the shop up the road and decided to try that instead. Sadly it was closed, so we kept on going. Turning off the sealed roads we found ourselves at last on the firm clay tracks through the redgum forests and billabongs of the Shepparton Regional Park. Finally, well after lunch time we had found no shortage of idyllic streamside picnic spots.

::: {layout-ncol="2"}
![](images/goulburn_clay_road.jpg)

![](images/goulburn_billabong.jpg)
:::

We were feeling pretty happy with ourselves for how smooth these tracks were until about 5 km from Mooroopna, when the track suddenly deteriorated, and then suddenly stopped at a deep eroded tributary. The steep descent through the gully on a secondary track (according to the map) was the only option. I clambered down it and along the narrow track to check that it did indeed join up with the track on the other side. A 100 m or so on, I found the main track again and followed it back to the gully, and sure enough, it just ends at the gully. I was able to clamber down at that point, but the secondary track was better option for porting our bikes and bags across. (The small loop in today's route, east of Tatura, shows the location of this gully: zoom in twice to see it) The track continued on, once again reasonably smooth and rideable (this would be less the case if it had been raining).

::: column-margin
![](images/goulburn_trib_gully.jpg){fig-alt="Porting our bikes through an unexpected gully"} Porting our bikes through an unexpected gully
:::

A bit further down the track, we followed a more obvious farm track to the left, but soon realised we had left the mapped track. We back-tracked to the mapped track which veered right through a couple more, less challenging gullies, that still required bike-pushing rather than riding. At this point we were 4 km from Mooroopna, and in retrospect, we probably should have taken the farm track back to the road. All was well, until we were 1 km from our destination. The train bridge at Mooroopna was being re-built and the track under it was a construction site: no access permitted. We could see the big Ardmona building over the railway track, but it remained frustratingly unaccessible.

So, we decided to walk our bikes through the bush, over, under and around the main fallen logs, up the gully along the railway track (which was high up on a steep levee) until we reached Young Street, which we were able to clamber up to through the 'Environment no-go' signs suggesting that where we had come from was not a place you wanted to go. It was a surprising contrast to find ourselves immediately out of the seemingly remote scrub onto a civilised, sealed road in the middle of Mooroopna. It was a short ride to the terrifyingly busy peak-hour main street of Mooroopna where our welcoming motel awaited.

Today's wildlife highlights: a second brown wallaby in the redgum forest, a large mob of grey kangaroos bouncing through the forest in the late sunny late afternoon; more families of mournfully whistling choughs.

Wildlife lowlights: the piles of dead corellas along the orchards, a pile of four dead wood ducks by the river on the way into Mooroopna.

### Day 4. Mooroopna to Kyabram

Thursday, 11 Apr 2024 (59 km, clay river roads, straight gravel and sealed back roads)

```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 5
#| fig-height: 3
#| 
seg1 <- sf::st_read("gpx_files/bendigo_echuca/segment_4.gpkg", quiet = TRUE)
simplevis::leaf_sf_col(seg1, col_var = "Elevation", basemap = "street",
                       popup = FALSE)
download_file(
  path = "gpx_files//bendigo_echuca/2024-04-11_1507181007_Bicycle Tour.gpx",
  output_name = "mooroopna_kyabram.gpx",
  button_label = "Download gpx of route",
  button_type = "success",
  has_icon = TRUE,
  icon = "fa fa-save",
  self_contained = FALSE
)
```

The north-east corner of the trail along the Goulburn lacks much in the way of accommodation. If you were carrying camping gear there would be no end of good places to camp along the river, but alas we were not. So our options were the Undera Hotel (too close to Mooroopna, 10 km off the track, and in the middle of nowhere) or the [Wakiti Creek Resort](https://www.wakiticreekresort.com.au/) (too close to Echuca, 7 km off the track, and also in the middle of nowhere). So we reluctantly chose 20 km of dead straight gravel roads through the irrigation district to Kyabram for a night in a town with some options. It's not a bad town really.

Our day started with some trepidation following one of the narrow green lines on the map, which yesterday meant clambering down steep gullies. But today, they indicated the beautifully sealed off-road bike trail connecting Mooroopna and Shepparton. At the bridge over the Goulburn, we needed to cross the road, and we had the choice of tackling the traffic to get to the track on the other side or heading down to the riverbank and under the bridge. We chose the latter, and it was ok. The former would have been ok too.

Once on the other side of the road, we had 10 km of clay roads (somehow more bumpy than yesterday's) through the redgum floodplain forest. Lots of beautiful billabongs along the way. Then a long straight, mainly sealed stretch north along the edge of the 1-mile block grid that lay to the west, before a turn for a km east back to the tangle of clay roads through the floodplain forest. We decided to head off trail to find a lunch spot on the river. (Very pleasant).

::: {layout="[50,50]"}
![Another bloody billabong](images/another_bloody_billabong.jpg)

![Lunch spot on the Goulburn](images/goulburn_lunch.jpg)
:::

From there it was a long gravel ride east along the grid before some left-right turns to maximize our paved distance into Kyabram. Little traffic on the gravel roads, except for the occasional massive tractor, and not much more on the sealed sections. Kyabram is a surprisingly engaging town. We had a great dinner at the [Three-620 cafe](https://three620.com.au/) in the old post office before retiring to our motel.

Today's wildlife highlights: A big buck deer, with antlers and all on the track out from lunch (probably should be a lowlight, given they're a pest); a massive wasp eating an equally massive spider in the road gravel on our last rest before Kyabram.

::: {layout="[56,44]"}
![Traffic on the road to Kyabram](images/kyabram_traffic.jpg)

![Nature, red in tooth and claw on the road to Kyabram](images/wasp_eating_spider.jpg)
:::

### Day 5. Kyabram to Echuca

Friday, 12 Apr 2024. (57 km, sealed, clay and gravel roads)

```{r}
#| echo: false
#| message: false
#| warning: false
#| fig-width: 5
#| fig-height: 4
#| 
seg5 <- sf::st_read("gpx_files/bendigo_echuca/segment_5.gpkg", quiet = TRUE)
seg6 <- sf::st_read("gpx_files/bendigo_echuca/segment_6.gpkg", quiet = TRUE)
seg5 <- rbind(seg5,seg6)
simplevis::leaf_sf_col(seg5, col_var = "Elevation", basemap = "street",
                       popup = FALSE)
download_file(
  path = "gpx_files//bendigo_echuca/2024-04-12_1508643038_Bicycle Tour.gpx",
  output_name = "mooroopna_kyabram.gpx",
  button_label = "Download partial gpx of route",
  button_type = "success",
  has_icon = TRUE,
  icon = "fa fa-save",
  self_contained = FALSE
)
```

It is a long straight C road north out of Kyabram, with a more typical volume of traffic than on the Heathcote-Nagambie C road, with a generally more careful approach to passing cyclists. It ends at the Murray Valley Highway (B400), and a turn right onto the highway for 400 m is necessary to get onto quiet Alfred Road to continue north to the river. The highway was a more hair-raising prospect, but we found a grassed track along its north verge that got us to Alfred Road with a little more effort, but a lot less stress. A km or two down Alfred Road had us back on gravel until the clay roads of the Lower Goulburn National Park.

The track followed the river closely for 20 or so km, affording lots of places to sit by the river and contemplate the view. We managed to squander all those opportunities before lunch, and found ourselves on the less pleasant gravel surface of Yambuna Bridge Road heading away from the river. So we turned right instead of left and rode a km or so to have lunch under the bridge. The gravel stretches before Goulburn Road into Echuca became sealed were becoming a little tedious. The final 12 km into Echuca on sealed roads (with some gravel breaks still awaiting fixing after the 2022 floods) were easier to take.

Todays wildlife highlight: spotted pardalotes and white-plumed honey eaters flitting in the branches just a couple of metres above one of our resting spots on the river bank.

![The rest stop on the river among the pardalotes](images/goulburn_pardalote_rest.jpg)

### Day 6. A rest day in Echuca

Saturday, 13 Apr 2024

We stayed at the Nirebo Motel in the port district of Echuca: a nice enough motel, but directly behind the American Hotel, which had remarkably loud bands playing Friday and Saturday nights. It was a noisy friday night, and a better Saturday night after we had asked to be moved to a quieter room away from the hotel (still incredibly noisy, but only to 11 pm). On Saturday we rode south to the aquatic centre for a swim and further south down the Campaspe to visit family. The ride back home along the Campaspe bike path in the late afternoon sun was lovely. On Sunday morning we piled our bikes on the train south to Melbourne, happy and a bit fitter than we had been a week before.
