Developed by Don Le, William Jin, Lucas Kassman, Karisma Kumar, Albert Lin, Brian Lu

Demo written by Don Le

Introduction

Zooseeker is an Android app designed and developed by six friends over the course of about six weeks.

The purpose was to prototype and create a functional tool to aid zoo visitors in creating the optimal route for their zoo trip (specifically designed around the map of San Diego Zoo). Creating a route plan and navigating the many paths of a zoo can be confusing and tiresome, so a tool like Zooseeker handles that task and lets visitors focus on what matters to them — seeing their favorite animals!

During this project, we learned a lot about team management, adapting to technologies, and software design strategies: see more in our Reflection.


Features

The following feature demos of this app were run on real hardware (a physical Android phone).

Search and add zoo animals to list

Make a list of animals that you want to visit by searching with the search bar. You can search by the animal’s name or a related term (e.g. you can find Emerald Dove by searching “bird”).

Tap on an animal in the search results to add it to your visit list (shown on the right). This also shows how many animal exhibits are in your list.

search and add zoo animals to list.mp4

Generate optimal (shortest) route plan from list

Tap “Plan” to generate a route that connects the entrance gate, your selected exhibits, and the exit gate in the shortest distance.

While the generated list looks fairly simple to the user, this is essentially the core feature of the app and required some advanced data structures knowledge.

The zoo map in this app is represented as a graph of nodes connected by weighted edges. Thus, we used a modified Dijkstra’s algorithm to find the shortest weighted path connecting the user’s desired exhibits (the nodes) using the provided roads (the weighted edges, where distance is the weight), assuming the user starts their route at the entrance gate.

<aside> 💡 The map also is represented in coordinates, which is used for mocking locations, auto-updating directions, and replanning.

</aside>

<aside> 💡 In this example, the order of the generated route happens to be the same as the order that the user selected the exhibits — see a clearer example of the generated list being different from the selected order in the “Preserving exhibit selections” section.

</aside>

Generate optimal (shortest) route plan from list.mp4

Display directions to next exhibit in plan

Press “Directions” to start the route plan; the directions on how to get to your first exhibit will be shown. These directions are based on the user’s current device location. More info on using device location in “Auto-update directions based on user location”.

<aside> 💡 It’s expected that the user is actually at the zoo when they start the route plan, but when testing the app in other places (e.g. a university campus), Step 1 will look very odd, suggesting an absurdly long distance to walk. This is why we mock the user location when testing the app.

You should use Google Maps if you want directions from your university to the zoo entrance gate 😆

</aside>

display directions.mp4

Switch between brief and detailed directions

Hit the “Detailed/Brief” switch in the top right to switch between detailed and brief directions.

The zoo has several long roads with multiple intersections. In this example, the long road is “Treetops Way”.

Detailed directions will display each segment of the long road as a separate step (e.g. steps 2-4 of the detailed directions in the video).

Brief directions will display the road as one step (e.g. step 2 of the brief directions in the video).

brief detailed.mp4