A mini-app for commuters to track drive times to various locations.
Traffic App sample
A mini-app for commuters to track drive times to various locations. The user adds frequently-visited destinations using app-bar buttons or by tapping and holding on the map. Traffic App then provides a quick view into how long it will take to drive to each place from the user's current location, following the fastest route. The user can also flag a particular destination and a background task will periodically monitor traffic to that location, alerting the user when traffic is adding ten minutes or more to the travel time.
Note - This sample is targeted and tested for Windows 10, version 2004 (10.0; Build 19041), and Visual Studio 2019. If you prefer, you can use project properties to retarget the project(s) to Windows 10, version 1903 (10.0; Build 18362).
This sample runs on the Universal Windows Platform (UWP).
For a description of the goals and challenges of this project, see the project overview.
Note: This branch of the repo contains the original version of the sample, which uses a traditional "code-behind" architecture. For the Model-View-ViewModel (MVVM) version, see the MVVM branch.
Traffic App highlights the following APIs:
- MapControl and MapItemsControl (Windows.UI.Xaml.Controls.Maps)
- Geolocator (Windows.Devices.Geolocation)
- MapLocationFinder and MapRouteFinder (Windows.Services.Maps)
- Background tasks (Windows.ApplicationModel.Background)
- Toast notifications (Windows.UI.Notifications)
- Local storage and serialization (Windows.Storage)
Universal Windows Platform development
- Windows 10. Minimum: Windows 10, version 1809 (10.0; Build 17763), also known as the Windows 10 October 2018 Update.
- Windows 10 SDK. Minimum: Windows SDK version 10.0.17763.0 (Windows 10, version 1809).
- Visual Studio 2019 (or Visual Studio 2017). You can use the free Visual Studio Community Edition to build and run Windows Universal Platform (UWP) apps.
To get the latest updates to Windows and the development tools, and to help shape their development, join the Windows Insider Program.
Running the sample
Traffic App needs a Bing Maps key to run with full functionality. For security reasons, we can't provide a key as part of the sample - you'll need to get your own at https://www.bingmapsportal.com. Once you have a key, insert it into code in the LocationHelper class constructor and in the MapControl element in MainPage.xaml (you can find these easily by searching the solution for "ServiceToken").
Note: The platform target currently defaults to ARM, so be sure to change that to x64 or x86 if you want to test on a non-ARM device.
The default project is TrafficApp and you can Start Debugging (F5) or Start Without Debugging (Ctrl+F5) to try it out. The app will run in the emulator or on physical devices. If you run in the emulator, be sure to set your location in the location area of the emulator - otherwise, the app won't work correctly.
By default, the app generates four sample locations at random positions around your current location. You can switch to "live mode" instead by changing the commented lines in MainPage.OnNavigatedTo so that locations are loaded from roaming storage.
Code at a glance
If you're just interested in code snippets for certain API and don't want to browse or run the full sample, check out the following files for examples of some highlighted features:
- Getting the user's current location using the Geolocator class.
- Getting the route, travel time, and distance to a location using the MapRouteFinder class.
- Getting the address for a particular position using the MapLocationFinder class.
- Displaying a toast notification.
- MainPage.xaml and MainPage.xaml.cs:
- Using MapControl and MapItemsControl, handling user gestures on the map.
- Displaying locations in the map and list controls using item templates and data binding (including x:Bind).
- Using a Flyout for location editing, handling the editing experience and edit cancellation.
- Displaying commands in a CommandBar.
- Running background tasks on a specified interval.
- Generating sample locations at random positions.
- Serializing data and reading/writing it to roaming storage.