National Parks Road Trip Planner

Projects
Author

Addison Cunningham

Published

May 5, 2026

Our goal was to build a Java-based system that calculates driving distances between national parks for use in route planning and optimization.

Team Members:

Madelyn Gray
Emerson Brown

Project Summary

For this project, we developed a Java-based system to generate a distance matrix between U.S. national parks using real-world geographic data. The system reads park information (name, code, latitude, longitude, and type) from a CSV file and uses the Google Routes API to calculate driving distances between each pair of parks. The resulting distances are stored in a 2D array and exported as a CSV file for further analysis.

The intended purpose of this project is to support route optimization and decision-making problems, such as determining efficient travel paths between multiple locations. This type of system can be applied to logistics, transportation planning, and operations research problems like the Traveling Salesman Problem (TSP).

From an Industrial Engineering perspective, this project relates to optimization and network modeling. The distance matrix serves as the input for solving routing problems, which are commonly used in transportation systems to minimize cost, distance, or travel time.

Throughout the project, we practiced several important technical skills. We created custom Java classes to organize and separate functionality. We worked with ArrayList data structures to store and manipulate park data, and used file input/output to read from and write to CSV files. We also integrated an external library (OpenCSV) to efficiently parse structured data. Additionally, we gained experience working with external APIs.

Project Development Process

Our original goal was to create a road trip planner that could generate optimal routes between national parks while accounting for a user’s vehicle. Initially, we planned to include a feature where users could select their car make and model to automatically determine fuel efficiency and driving range. However, we were unable to find a reliable dataset with MPG values for a wide range of vehicles, so we pivoted to allowing users to manually input their MPG and gas tank size to estimate range and required gas stops. We also reduced the size of our destinations dataset from the 433 units in the National Park System down to only the National Parks in order to reduce runtime and API calls.

As the project progressed, our biggest shift was in the optimization model. We originally attempted to use a Google OR-Tools mixed integer programming model to solve a modified orienteering problem, but we ran into challenges with subtour elimination and the lack of a fixed set of parks, making it incompatible with standard formulations. We then explored several alternatives, including generating permutations, backtracking, and depth-first search, and ant colony optimization, but we ultimately settled on an iterative local search (ILS) heuristic.

Our final model starts with a greedy initial solution, then applies perturbations to escape local optima and iteratively searches for improved routes. The best solution is selected based on maximizing the number of parks visited while minimizing total distance. Overall, our final project evolved significantly from our initial plan, but it closely matched our original design vision and resulted in a functional and realistic road trip planning tool.

Our orignal mock-up, generated by Claude

Our final UI

Key Features

The biggest component for our website is the integration of the Google Routes API to generate a real distance matrix between national parks. Instead of using straight-line distances, our system calculates actual driving distances based on real roads, so the results are accurate and applicable. 

The autocomplete feature on the Starting and Ending Point fields is something that elevates the user experience and makes it feel like a fully developed website. Without this feature, it would be difficult to ensure the user enters in a correctly formatted input to be read by our API. This would make the system less reliable and harder to use.

The overall visual appeal of our website is something we spent a lot of time on. We first chose a color scheme that reminded us of road trips and nature. This attention to design makes the application feel like a complete product rather than just a technical prototype.

Finally, the Preferred Parks input feature adds realism and flexibility to the model. Users often have specific destinations in mind, and this feature allows them to prioritize certain parks while still finding a feasible route. Instead of forcing a route that may not make sense, the system incorporates user preferences in a balanced way, which increases its practicality.

Reflection

This was the biggest project I have been a part of in my academic career so far. Having such a long period of time to bring a vision to life was initially daunting, but with every new challenge came the satisfaction of a new accomplishment. For much of this project, we had to research and learn new methods to implement into our code. This was especially challenging because multiple team members were working on different components that all needed to function together seamlessly. Communication with my teammates became a crucial element of our success. Delegating tasks, developing a shared vision, and ensuring everyone felt proud of the final product were just a few ways this project taught me far more than simply how to code a website from scratch.

When reflecting on my individual contributions, I found value in both the small and large accomplishments. As shown earlier, we had a baseline design that guided our user interface. I took the initiative to align as many design elements as possible with that vision. Creating a visually appealing website required far more time and attention to detail than I initially expected, but I am proud of the final result. In addition, I was responsible for learning how the Google Maps APIs work and implementing them into our application. This was one of the most difficult aspects of the project due to the complexity involved. From embedding the map into the website to generating routes based on user input, the process was challenging but ultimately very rewarding.

This project gave me many opportunities to grow in different areas. As a developer, I learned how to take an idea, conduct research, ask effective questions, and utilize the appropriate tools to achieve a desired outcome. I also gained technical experience with API keys, integrating different file types with code, and building a complete application. Most importantly, I learned that I am capable of creating work that I am genuinely proud of. Beyond technical skills, I strengthened my ability to collaborate with others. It was incredibly rewarding to set goals as a team and successfully achieve them together. Although we faced many challenges, our teamwork and determination allowed us to overcome obstacles and produce a strong final product.

My confidence at the beginning of this project was very low. While I trusted my teammates and my work ethic, I had never taken on a project of this scale without detailed instructions. I doubted my ability to complete something of this magnitude to a standard I would be satisfied with. However, as I invested time into learning and problem-solving, my confidence began to grow. I realized that intimidating tasks are best approached by breaking them down into smaller, manageable steps. I spent countless hours refining both functionality and design, and while it was not easy, it was incredibly worthwhile. As a result, I am now much more confident in my ability to approach complex challenges without compromising my standards.