Final Project
         
            
         
To complete the final project you must implement a working personal
navigation system (building on the programming assignments that you
have worked on during the semester).
            
               Never use a computer while driving. Only test
      your code in a moving vehicle when you are a passenger.
            
         
  
         
            1 Design of the Existing Components
  The design of the existing components is summarized in the
  following 
.vpp and 
.svg files:
  
          
         
            
2 Teams/Groups
  You may work on the final project alone or in a group (of your choosing).
  
         
            3 Requirements of all Teams/Groups
  Whether you work on the project alone or in a group, your product must
  all of the features from PA4, PA5, and PA6, as well as the following:
  
               - Map-Matching (i.e., the vehicle must be located on a street)
    
 
    
               - Route Recalculation (i.e., the system must calculate a new
    route when the vehicle deviates from the current route)
    
 
            
            
  You must determine the algorithms and the engineering design.
  
          
  
         
            4 Teams/Groups of More than Two
  If your team/group consists of more than two people, your team
  final must complete one additional task (which must be approved)
  
for each person over two. In other words, if your team/group
  consists of five people then you must complete three additional tasks.
  There are different kinds of tasks that you can complete including
  additional features, data processing tasks, and algorithmic analysis tasks.
  
  The following features are pre-approved:
  
            
               - An improved user interface that includes: the ability to
      choose from favorite destinations, the ability to select a
      destination by clicking on the map, typing completion, and a
      textual display of directions.
    
 
    
               - The ability to find a path that goes through a particular
      intermediate address and the ability to find a path that goes through
      an area around a particular intermediate address.
    
 
               - The use of a hierarchical network when routing.
    
 
    
               - Rendering street names on the map (at appropriate scales).
    
 
    
               - A digitizer that provides the ability to edit 
.geo
      and .str files.
     
    
               - The ability to display satellite or other imagery "under" the
      street network.
    
 
    
               - The ability to choose the shortest path algorithm/data
    structure to use (from a list of at least four).
    
 
               - The ability to display the map either "North up" or "direction of
      travel up", with the vehicle rendered as a properly oriented
      arrowhead.
    
 
               - The ability to display a real-time next turn arrow (that
      varies with the angle of the next turn) along with a mileage
      countdown and the name of the street to turn onto.
    
 
            
  
            
  The following data processing tasks are pre-approved:
  
            
    
               - The ability to use ZipCode or town/city boundaries when geocoding
      by pre-processing the data files and adding a field to the
      
.str file.
     
               - The creation of a more recent set of data files (e.g., from the
      most recent TIGER files or OpenStreetMaps).
    
 
               - Inferring missing street names in the 
.str files
      based on connectivity information.
     
            
  
            
  The following algorithm analysis tasks are pre-approved:
  
            
               - An empirical comparison of different path finding algorithms
      (and associated data structures).
    
 
            
  
          
         
            5 Final Deliverable
  One member of each team/group must submit your source code
  using 
Gradescope.
  
  
  Your source code (other than test suites) must conform to the
  course style guide and must not contain any style defects at any
  time. In other words, source code in the repository must not
  contain style defects.
  
            
  Your JUnit tests must be in a package named testing
  and each test class must include the word "Test" in its name.
  
          
  
         
            6 Final Presentation
    Your final presentation must take 10 minutes or less. It must
    include:
    
               - A demonstration of your working product (which can
        either be a video of the product in use or a demonstration
        that uses a the 
GPSSimulator and a captured set
        of sentences). 
               - A discussion of the algorithms you used and your engineering
	design.