It's not accurate. I mapped it from my house on Cabrillo St in the outer Richmond to 4th avenue and it says I need to climb 25th avenue then walk Geary instead of correctly telling me to use 23rd avenue that is completely flat.
No, as someone who writes a cycle routing engine by hand, this stuff is endemic when dealing with the trifecta of complex traffic regulations, inconsistent mapping data, and user preferences.
Looking at the repository [1], there are very strong signs for this being LLM generated. The README.md just smells of LLM tells, and Claude Code is being listed as "contributor".
I agree that the tone the parent commenter used wasn't the nicest but unfortunately, factually he is correct.
Also "fixed and deployed; your trip should now go Cabrillo → 23rd → Geary". The snappy sentence at the start and the unicode arrows are both pretty big flags for AI writing.
Obviously it's fine to use AI for projects like these, but copy-pasting the response from a coding agent doesn't quite sit right with me.
In my experience, Google Maps too often sends me down dangerous streets - busy, wide, arterials with fast moving automobiles.
Though I do know some people who prefer them because they can be a little faster. Not worth it for me. I'd much rather go a little out of my way for a comfortable safe ride.
There's a weird thing going on at 22nd and San Jose in the Mission, where it doesn't seem to understand that you can simply continue down 22nd, but instead takes a hook down San Jose before backtracking. I see some other weird discontinuities like this as I click around.
I have to say that the Claude UI has made many inexplicable decisions here, including (but not limited to) the mysterious color coding, the confusing continuous slider over a discrete set, and the weird positioning of the height labels in the altitude graph.
Checkout https://bikehopper.org for solid elevation, bike infrastructure and transit-aware routing around the Bay Area. Some friends and I built this about 5 years ago and continue to maintain it. We use 1m DTM elevation data for SF and 50m for rural areas. DTM is a must for elevation based routing in SF as there are so many sizable buildings, large trees the other models fail hard.
Can you please consider expanding it to include Seattle? Or better yet Puget Sound area? 1m DTM elevation data is available here. We have many amazing bike trails, but also plenty of hills that must be avoided.
We’d like too! It’s an open source project that was never designed to scale beyond one regions (bay area, puget sound, NYC, etc…) our hope has always been been that folks in different regions would spin up their own copy. By keeping it regional the data and hardware requirements for running it are minimal. That said, we are working on a new routing engine that we hope can scale to support continent wide routing. Then we can manage running it for many metro’s. If you’re interested in self hosting for Seattle we are happy to help get it set up.
What are the system requirements for hosting it? I'm not sure I have the discretionary funds to host it for the general public - but it all depends on how heavy this is :)
Modemix is solid. Same goal as bikehopper and lots of active dev. We (bikehopper devs) know the modemix dev. Good guy, solid app. I think the Modemix hill data isn’t as detailed as what we use for SF.
I've checked out a few bike mapping apps recently and one feature I found absolutely invaluable was grade indications like http://hillmapper.com (which unfortunately seems unmaintained.)
Google Maps elevation diagrams comparing the various selected routes are nice but they do not do a good job of highlighting extreme grades. I feel like you actually want to graph the change in elevation rather than the elevation itself.
Using a route I cycled the other day (near Mission Bernal Safeway to near Diamond Heights Safeway). I think the routing may overweight bike lanes too much. For instance it will go four blocks by shared street and bike lane to avoid the two blocks on Clipper between Sanchez and Castro which are not a bike lane.
On my heavy cargo e-bike I've found there is quite a non-linear difference as the grade increases. 12% and I'll work a bit but be fine. 22% (the route Google Maps sent me...) and I'll all but collapse after a block.
Hillmapper falling apart was one of the main reasons we prioritized getting good elevation data into our router. We include steepness indicators for steep blocks and an elevation overview of the full trip and have found that combo to serve us well.
Getting between those two Safeways is rough. Bikehopper fails, it suggests the harry street steps; a non-starter for most. I’ll try to fix it. I definitely agree that grade is non-linear. We use accelerating weighting for grade so a hill that is twice as steep is more than twice as “discouraged” by the routing engine.
For bike routing I think e-bikes need a separate profile from acoustic bikes. Hill matter less and stairs are totally out of the question (this is important for routing in and out of transit centers).
The specific route suggested varies a bit depending on where you move the starting point. Closer to Sanchez St it does a better (albeit not perfect) job than google maps.
I guess as a cyclist in SF I’m not necessarily looking for the routing to be perfect but I am looking to see the information that matters so I can understand how appropriate the suggested routing is.
Agree that e-bike and acoustic bike riders probably do have slightly different sets of preferences. A big one for me is that I’m ok with 4 way stops every block on slow streets on an e-bike but on an acoustic bike they’d drive me nuts.
‘Acoustic bike means a bike without an electric assist. So, a "normal" bike. I know the Path Less Pedaled youtube channel has used this term for at least a couple of years, though I don't think that's necessarily the originator. It's a play on electric/acoustic guitars.’
I understand that “acoustic” is generally the term now but it’s too cutesy and doesn’t make any sense. The difference between e-bikes and normal bikes have nothing to do with how they sound — if anything, a traditional bike is quieter.
I always thought “analog” made more sense and it’s commonly used in other areas.
(Okay, technically you could make an e-bike with completely analog electronics, but I highly doubt anyone does commercially)
There’s even “pushbike” if you want to go way back, though admittedly it sounds rather archaic.
Back in 1992, Christy Moore’s (less famous) brother released an album titled “The Acoustic Motorbike” featuring a (regular) bicycle on the album cover.
DSM includes buildings and trees. So the DSM from SRTM data makes market street in S.F. look like a series of very steep hills and valleys because some of the datapoints are street level while others are the roofs of skyscrapers. DTM removes the buildings resulting in a map much closer to what we think of from the ground.
It's interesting (and unsurprising I guess) to see that bike lanes in the US are much like those in the UK - a line on the road, rather than real segmentation.
They are a real segmentation in some places but as you can probably guess that is few and far between. A line on the road is also in the minority with the rest being nothing at all.
This reminds me of a funny story for my first trip to SF. I left the office at 9 and had time to burn until my flight at 1pm.
I decided to walk to the japanese district and check out some shopping there, it was 15 minutes in google maps. I walk every day at home, 2 miles is like 30 minutes ish for me. For some reason it took me 50 minutes (!), and a WHOLE lotta climbing.
And I had to dodge a bunch of drug addicts yelling at people.
By the time I got to japantown I was drenched in sweat lmao so I had to cool off in the shade but man that SUCKED. Never again.
This is great. Since SF is mostly a grid, I used to use the heuristic of only choosing paths that wouldn't take me further from my destination, avoiding going downhill but choosing the shallower uphill climb if a choice is given.
Other than knowing the direction of my destination, it only used local information
It would be neat if it there were an option which added distance and elevation gain, but minimized the grade.
For example, a route from SOMA to Nob Hill can be made flatter by approaching from either the east or west. Technically the "flattest" as measured by elevation gain between the two is straight up Taylor from Market, but it's much nicer to bike to the top of Nob Hill by going out of the way (e.g. Polk → California, Embarcadero → Broadway, etc.)
I suspect that this would result in absurdly long routes. Imagine trying to go up a mountain while minimizing grade... you'd end up zig-zagging back and forth endlessly.
Isn’t that exactly how you build a trail up a mountainside? They are usually a series of switchbacks.
Most people on most bikes can only take so much grade before climbing becomes impossible. A maximum grade setting would be very helpful for that exact reason.
I feel like even if the distances are equal, it's faster to walk a bike up a steep grade and bike the rest flat than it is to bike up a moderate grade the whole way.
People can generally only output their max power for short durations. The output level they can sustain is generally much lower. I bet you could try to model higher limits for short distances, but what those should be could vary greatly depending on personal fitness.
I think that too favors walking the bike up the incline. Anyone able-bodied should be able to do it, some faster than others, but biking up an incline is more hit or miss especially when considering different bikes.
That's some of it too, but in a way legs aren't all that different from wheels in how they work. Most of it is the gearing. Like there's a gear on every mountain bike that will make your feet go down at the same intervals as walking. That sucks on flat terrain. Legs are also not perfectly designed to push pedals, especially for people who don't bike often.
Oh, yeah, I interpreted the parent comment as "minimize the grade" but if it's instead "keep grade below threshold" (for reasonable thresholds) that would make more sense.
Unless you are on foot (and even then) the route needs to follow existing roads, you can only zig zag as much as existing roads do it not endlessly.
And almost any practical routing system will have a mechanism for tradeoffs of different aspects. Often there is a distance/time tradeoff which directly relates to speed on corresponding segments. But the tradeoff can also be in the form of "on average x seconds spent waiting green light in each intersection or time to stop before railroad crossing. So there is no reason for a system optimizing grade to completely ignore all other factors, it's just a question of weights and curves of each of them.
Like the ascent to Mt. Hamilton (southern Bay Area). You can see the peak for like an hour but so much twisting back and forth, going mostly perpendicular to the max gradient. It is an old road and hence graded for mules to carry up telescopes.
your example (from market & taylor to the top of nob hill) is a nice illustration: (1) straight up taylor is 229 ft of climbing at 25%, (2) via polk and california it's 251 ft at 13%.
as you probably noticed, we only look at the total elevation gain, so taylor "wins"... but I see the argument for preferring an extra 20ft of a more gradual climb.
Your net elevation change is just the difference in altitude between your starting point and your ending point. So yes, it’s independent of route, but that’s not what the term “climb” refers to. It’s not a net elevation change; it’s a cumulative elevation gain, because in bicycling and walking the in‑between parts burn energy. Human legs don’t have regenerative braking, so every time you gain a foot of altitude you don’t get those calories back when you lose a foot of altitude.
This seems to have the same issue I saw with Google Maps where it directed me along 29th St from near Mission Bernal Safeway to Diamond Heights Safeway. This includes a 22.7% grade! It's much faster and easier (at least on my cargo e-bike) to take the longer way around up Clipper St (12% grade).
113 comments
[ 8.7 ms ] story [ 76.5 ms ] thread(in honor of my old commute, which I miss)
https://flattensf.com/#t~-122.40850~37.77493~-122.50940~37.7...
https://github.com/opentripplanner/OpenTripPlanner
https://github.com/opentripplanner/OpenTripPlanner/blob/dev-...
Edited: which apparently is hosted for free on AWS S3.
I agree that the tone the parent commenter used wasn't the nicest but unfortunately, factually he is correct.
[1] https://github.com/almostimplemented/flattensf
Obviously it's fine to use AI for projects like these, but copy-pasting the response from a coding agent doesn't quite sit right with me.
Most of us would take a hill with a protected bike lane over a flat 45mph.
Though I do know some people who prefer them because they can be a little faster. Not worth it for me. I'd much rather go a little out of my way for a comfortable safe ride.
The flattest route is only 0.2 miles longer than the shortest, but goes from 200ft of climbing to 500ft of climbing, 12% max grade to 22% max grade.
Apple maps picks the shortest every fucking time.
I have to say that the Claude UI has made many inexplicable decisions here, including (but not limited to) the mysterious color coding, the confusing continuous slider over a discrete set, and the weird positioning of the height labels in the altitude graph.
...though the elevation model I'm currently using is courser (~30m, from Mapzen skadi). This is a good reminder to fix that where available!
Hit me up if you want to use the iOS beta which has some nice transit features (already available on the web).
It's available in Seattle
I've checked out a few bike mapping apps recently and one feature I found absolutely invaluable was grade indications like http://hillmapper.com (which unfortunately seems unmaintained.)
Google Maps elevation diagrams comparing the various selected routes are nice but they do not do a good job of highlighting extreme grades. I feel like you actually want to graph the change in elevation rather than the elevation itself.
Using a route I cycled the other day (near Mission Bernal Safeway to near Diamond Heights Safeway). I think the routing may overweight bike lanes too much. For instance it will go four blocks by shared street and bike lane to avoid the two blocks on Clipper between Sanchez and Castro which are not a bike lane.
On my heavy cargo e-bike I've found there is quite a non-linear difference as the grade increases. 12% and I'll work a bit but be fine. 22% (the route Google Maps sent me...) and I'll all but collapse after a block.
Getting between those two Safeways is rough. Bikehopper fails, it suggests the harry street steps; a non-starter for most. I’ll try to fix it. I definitely agree that grade is non-linear. We use accelerating weighting for grade so a hill that is twice as steep is more than twice as “discouraged” by the routing engine.
For bike routing I think e-bikes need a separate profile from acoustic bikes. Hill matter less and stairs are totally out of the question (this is important for routing in and out of transit centers).
I guess as a cyclist in SF I’m not necessarily looking for the routing to be perfect but I am looking to see the information that matters so I can understand how appropriate the suggested routing is.
Agree that e-bike and acoustic bike riders probably do have slightly different sets of preferences. A big one for me is that I’m ok with 4 way stops every block on slow streets on an e-bike but on an acoustic bike they’d drive me nuts.
I’m a cyclist - thought I knew the terms.
‘Acoustic bike means a bike without an electric assist. So, a "normal" bike. I know the Path Less Pedaled youtube channel has used this term for at least a couple of years, though I don't think that's necessarily the originator. It's a play on electric/acoustic guitars.’
https://www.reddit.com/r/cycling/comments/14wwx0t/whats_an_a...
I always thought “analog” made more sense and it’s commonly used in other areas.
(Okay, technically you could make an e-bike with completely analog electronics, but I highly doubt anyone does commercially)
There’s even “pushbike” if you want to go way back, though admittedly it sounds rather archaic.
“Acoustic” just sounds like a Portlandia joke.
https://en.wikipedia.org/wiki/The_Acoustic_Motorbike
I decided to walk to the japanese district and check out some shopping there, it was 15 minutes in google maps. I walk every day at home, 2 miles is like 30 minutes ish for me. For some reason it took me 50 minutes (!), and a WHOLE lotta climbing.
And I had to dodge a bunch of drug addicts yelling at people.
By the time I got to japantown I was drenched in sweat lmao so I had to cool off in the shade but man that SUCKED. Never again.
Other than knowing the direction of my destination, it only used local information
For example, a route from SOMA to Nob Hill can be made flatter by approaching from either the east or west. Technically the "flattest" as measured by elevation gain between the two is straight up Taylor from Market, but it's much nicer to bike to the top of Nob Hill by going out of the way (e.g. Polk → California, Embarcadero → Broadway, etc.)
Most people on most bikes can only take so much grade before climbing becomes impossible. A maximum grade setting would be very helpful for that exact reason.
Legs have to start, go up, go down, stop.
Wheels go brrrrr.
And almost any practical routing system will have a mechanism for tradeoffs of different aspects. Often there is a distance/time tradeoff which directly relates to speed on corresponding segments. But the tradeoff can also be in the form of "on average x seconds spent waiting green light in each intersection or time to stop before railroad crossing. So there is no reason for a system optimizing grade to completely ignore all other factors, it's just a question of weights and curves of each of them.
your example (from market & taylor to the top of nob hill) is a nice illustration: (1) straight up taylor is 229 ft of climbing at 25%, (2) via polk and california it's 251 ft at 13%.
as you probably noticed, we only look at the total elevation gain, so taylor "wins"... but I see the argument for preferring an extra 20ft of a more gradual climb.
seems like a worthy addition to the objective!