https://github.com/meeshic/bruinnav
A* optimized navigation system
https://github.com/meeshic/bruinnav
a-star-search java map-navigation open-street-map
Last synced: 8 months ago
JSON representation
A* optimized navigation system
- Host: GitHub
- URL: https://github.com/meeshic/bruinnav
- Owner: meeshic
- Created: 2018-02-26T08:53:37.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-07T00:22:24.000Z (over 7 years ago)
- Last Synced: 2025-01-14T16:36:10.525Z (9 months ago)
- Topics: a-star-search, java, map-navigation, open-street-map
- Language: Java
- Homepage:
- Size: 315 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# BruinNav
Note: Project reformatted C++ -> Java
Geospatial data from Open Street Maps (OSM): https://www.openstreetmap.org
Simple navigation system that loads and indexes OSM data to build a turn-by-turn navigation system.
Important classes:
1. MyMap: implement a map-like structure using a binary search tree.
2. MapLoaderImpl: load and parse OSM data into StreetSegments
3. AttractionMapperImpl: input(attraction name) -> output(attraction location)
4. SegmentMapperImpl: input(location:lat,long) -> output(list)
5. NavImpl: input(start attraction, end attraction) -> output(list)
> A* search algorithm used to find optimal path from start to end attraction. The Euclidean distance
was used as the heuristic.
Observations:
- Upon basic testing with Google Maps, BruinNav gives a path that is ~ <= 0.3km similar to the one
given by Google Maps.
Future potential work:
- BruinNav only takes distance into consideration when computing the cost function. For more realistic
use, the cost function could take into consideration other important parameters (i.e. traffic, speed
limit, local road, freeway, etc).
- The binary search tree (BST) used as the base for the map-like structure is not balanced. If decreased
computation time is desired, BST can be made to be balanced.
- There is a NavSegment (direction) for each GeoSegment. To give a more concise path, adjacent NavSegments
on the same street may be merged (i.e. x->y->z becomes x->z, where street(x)=street(y)=street(z)).