-
Initial Map before trimming
-
Minimum number of edges it takes to connect node pairs
-
Minimum spanning tree that connects all nodes
-
Combination of minTree and minPairs (red is an added edge from minPairs)
-
Combination of minTree and minPairs (heatmap represents distance)
-
Final Walking Path
-
The Final Walking Path Projected on Google Maps
Inspiration
When I walk on campus, especially early in the morning, I always have to take a long route to get from Point A to B because the fields are wet and muddy from rain and dew. This ends up eating away from the time I get to get ready, eat breakfast, or study. Recently, when MIT and NYU launched Tile2Net, a program that aims to identify sidewalks in urban environments, I realized how little we know about sidewalks.
What it does
This project takes in a standard .kml file from Google Maps that holds Points of Interest (POI's). These POI's are then used to create edges between them, with the cost being distance between the points. Using graph algorithms like Dijkstra's, an efficient graph is created that touches all nodes, but still optimizes travel times. The final graph is then exported back into a .kml file to be displayed on Google.
How we built it
Using Jupyter Notebooks and packages like networkx, pandas, and matplotlib, the data was processed, transformed and mapped.
Challenges we ran into
- One challenge was time complexity, as there were so many nodes and edges to keep track of
- Another challenge was exporting the data back as kml, because of file requirements
- Another challenge involved determining adequate walking paths, to save distance but decrease travel time
Accomplishments that we're proud of
- Finishing the project and the kml files actually being displayed on Google Maps
What we learned
From this experience I have learned about
- Packages such as Pandas, NetworkX, Beautiful Soup, and argparse
- Tools such as GitHub and Jupyter Notebooks (and Google Maps)
- Applications of Graphs and Dijkstra’s Algorithm
- How much I can get done in 1 weekend!
What's next for Sidewalk Optimizer
- Incorporate elevation into the distance weight and make a 2-costed path to account for traveling uphill vs. downhill
- Use Tile2Net to access current sidewalk place and evaluate how much sidewalk aligns with the optimized graph
- Obstacle avoidance, such as buildings and cliffs that should not be traversed
- Use polygons instead of points for POI's to increase accuracy
- Use ML to find the right balance between total length and travel times between any 2 nodes
- Factor in foot traffic at different times of the day and popular spots to be
Built With
- beautiful-soup
- github
- google-maps
- matplotlib
- networkx
- pandas
- python
- xml
Log in or sign up for Devpost to join the conversation.