Hey, KC Mike here. I've been kayaking for only a few years, and - I'm Addicted! I met some fellow kayakers/canoers that live in the Branson, MO area, and go floating every weekend in the late spring and summer. I'm blessed to have learned from them how they choose the "perfect" river to float each weekend. This website is my first attempt at aggregating USGS data, and using what I learned from the Branson-gang to process the data to create a tool which makes choosing which river to float - easier. That's my goal right now.
Could there be more - Yes. Am I finished - No. Is this a good first start - I think so. If you kayak or canoe frequently in SOMO or N.ARK, you might recognize the river names. If not, these rivers are in Southern Missouri and Northern Arkansas. These are near where I live and that's why I track them. Some are spring fed, and others are not. Where this comes into play is in the summer when there's not as much rain. Typically, the Branson-gang hits the rain swollen watercourses until they are no more, then they hit the spring fed ones.
The program I wrote to process the data is based on the premise there's a perfect CFS per river. What does CFS mean? CFS is “cubic feet per second,” a unit of measurement referring to the volume and speed of water flow. Our group should call it BFS "basketballs per second" that are going down the river since a cubic foot of water nearly resembles a basketball. I personally think the BFS concept makes the water flow easier to visualize, and provides perspective to respect the power of the water.
Maybe you've planned on floating, but it rained and created a dangerous situation. Outfitters will not put in customers on days that are dangerous. Maybe it has not rained in a month, but you made plans with friends to float the Current River in August and river levels could be hit or miss. If you've had to drag your boat, you know you picked the wrong river to float that day. Having a system to help choose which river means less stress, more fun, and less death.
The system prioritizes how close a river's current CFS matches the ideal, then the distance away.
Here are some items I'm working on:
- Allow user to input a zip code, then calculate the distance away.
- Update ideal CFS numbers per river to be more accurate.
Show the ideal CFS per river in a column, so users can compare.Link each river monitoring location to Google Maps.Add sparklines to show water flow levels, graphically, with color.- Include Weather Forcasts.
- Allow users to select previous experiened waterways which are no longer shown.
- Map puts ins and take outs to suggest for 8, 10, 12, 14 mile daily trips.
Check out my YouTube Channel Floating With KC Mike.
Warning Geeky Stuff - There's a little SQLite database I put together used to keep track of rivers, creeks, & boat ramps. I wrote some python scripts to extract the boat ramp information from the Missouri Department of Conservation (MDC) website for just rivers and creeks. That data was massaged into the database so that relevant boat ramps are tied to the appropriate body of water they provide access for. Fun fact, there are 383 boat ramps in Missouri that MDC maintains.
AI systems were used in creating this website. I had Dalle create me a favicon of a dude in a yellow canoe. I used ChatGPT to write python code for how to figure out distance between two lat,long coordinates. I used ChatGPT to help with formatting requests, processing responses, saving json, and helping me with the sparklines. ChatGPT also helped me write a regular expression that can find data embedded on a webpage in a string of text. Regular expressions offer hardcore text parsing, but are a little tricky to figure out. Here's the expression.
pattern = r'\b(\w+)\s+(Creek|River)\b'
See what I mean?
ChatGPT explained the regular expression - This is a regular expression pattern that matches strings containing a word, followed by one or more whitespace characters, followed by either "Creek" or "River". Here's a breakdown of the components:
- r at the beginning indicates that this is a raw string literal, which allows us to use backslashes without having to escape them.
- \b is a word boundary anchor that matches the position between a word character (as defined by \w) and a non-word character (such as whitespace, punctuation, or the start/end of a string).
- (\w+) is a capturing group that matches one or more word characters. The parentheses around \w+ indicate that we want to capture the matched word(s) for later use.
- \s+ matches one or more whitespace characters (including spaces, tabs, and newlines).
- (Creek|River) is another capturing group that matches either "Creek" or "River".
- \b at the end is another word boundary anchor that ensures that the word before "Creek" or "River" is not part of a larger word (e.g., "Creekside" or "Riverdale").
The main guts of the system is a python script that runs every 6 hours or so. It grabs the last 5 days of CFS from USGS for 60+ rivers and streams then I process that data, sorting, normalizing, and organizing it for the website. There's a template that I use and the python script create some strings that get replaced in the html template and it gets renamed, saved, then uploaded to the website.
If you have any ideas you want me to consider, please email me at 5starnet@ and I'm on gmail. You know how to do it.