Skip to end of metadata
Go to start of metadata

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.

 

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.


Introduction

PWMapKit is a comprehensive indoor mapping and wayfinding SDK that allows easy integration with Phunware's indoor maps and location-based services. The primary use of the components of PWMapKit revolve around creating a map view, displaying points of interest, showing the user's location and indoor routing.

Visit http://maas.phunware.com/ for more details and to sign up.

This document provides the prerequisites and start up instructions for integrating any of Phunware's module SDKS and use cases with sample code in:

  • Swift
  • Objective C

This guide provides the most common location-based services use cases important to SDK developers. It is NOT an exhaustive list of the use cases that can be developed using the Phunware Mapping and Location SDKs.

 

What Do the Phunware LBS SDKs Do? 

SDK stands for Software Development Kit, a tool which provides code, APIs, and libraries to enable specific functionality in an application.

Phunware's Location Based Services (LBS) module is driven by the Mapping and Location SDKs, providing application developers with a set of tools to enable the display of indoor venue maps, points of interest, and wayfinding throughout these venues.

Developers can utilize these LBS SDKs to offer app users either

  • Static wayfinding, where users can interact with a map with highlighted routes and step by step directions, but do not see their actual position or movements reflected on the map
  • Dynamic wayfinding, where users can interact with a map with highlighted routes and step by step directions, including a blue dot that mirrors users' their actual position and movements.

This guide provides the most common Location Based Services use cases important to SDK developers. It is NOT an exhaustive list of the use cases that can be developed using the Phunware Mapping and Location SDKs.

The APIs and data libraries provided offer a framework and expose the necessary data to offer mapping/wayfinding experiences. In addition, a sample including basic user interface code is provided, which can be used as a starting point by developers. This basic UI can be used as is or customized and enhanced to support specific app use cases and branding needs. For example, additional use cases (not included in this document) that a developer might add to an app include saving a custom POI or sharing a user's location. These types of customized behaviors are driven by the application code using the data libraries and APIs available through the SDK.

How Do I Use this Document and SDKs in General

Imagine that an app is a space ship made from legos. You could just build the whole ship out of individual pieces, but it would take a long time. Now imagine that someone else already built a similar space ship and they can give you a warp drive, engine room, a weapons array and medical bay. Suddenly your space ship got a whole lot easier to build. The spaceship you create will not be exactly like the example you received, because you might choose not to add the weapons array and want to create your own custom medical bay. You can simply choose which building blocks to use as is, which to modify to meet your own needs, and what to create from scratch. You get the idea.

The SDK use cases and snippets in this document offers you the building blocks for adding mapping functionality to your app, but you have the flexibility to use these building blocks (or not) in the ways that make sense for your application and your business needs.

 

Privacy

Use of this SDK means that you understand and consent to Phunware’s Privacy Policy located at www.phunware.com/privacy. If your use of Phunware’s software requires a Privacy Policy of your own, you also agree to include the terms of Phunware’s Privacy Policy in your Privacy Policy to your end users.


Terms of Use

Use of this software requires review and acceptance of our terms and conditions for developer use located at http://www.phunware.com/terms/.


Attribution

PWCore

PWCore uses the following third-party components. All components are prefixed so you won't have to worry about namespace collisions.

ComponentDescriptionLicense
AFNetworkingA delightful iOS and OS X networking framework.MIT
TMCacheFast parallel object cache for iOS and OS X.Apache 2.0
SSZipArchiveZipping and unzipping files for iOS and OS X.MIT

PWMapkit

PWMapKit uses the following third-party components. All components are prefixed with PW to avoid namespace collisions should your application also use an included component.

ComponentDescriptionLicense
SVPulsingAnnotationViewA customizable MKUserLocationView replica for your iOS app.MIT

PWLocation

<??>

 

 

Document Title/LinkDescription
LBS MaaS Portal Configuration GuideA guide to configuring Mapping and Location Providers in MaaS Portal. For detailed guides on integrating specific Location Provider Hardware contact Phunware Support support@phunware.com.
LBS MaaS Portal Training VideosA series of training videos that walk you through basic Mapping and Location Provider configuration in MaaS Portal. These videos work as a companion to the Configuration guides.
iOS Mapping SDK GitHub RepoGitHub repo for PWMapKit SDK Code
iOS Location SDK GitHub RepoGitHub repo for PWLocation SDK Code
iOS Core ReferenceClass reference guide for the Phunware PWCore SDK
iOS Mapping ReferenceClass reference guide for the Phunware PWMapKit SDK
iOS Location ReferenceClass reference guide for the Phunware PWLocation SDK


Prerequisites

Requirements

  • PWLocation 3.1.7 or greater (Automatically included when pod install PWMapKit)
  • PWCore 3.1.1 or greater (Automatically included when pod install PWMapKit)
  • iOS 9.0 or greater
  • Xcode 8 or greater

Security Protocols

  • SSL used for all transmission
  • Building Bundles are encrypted with AES-256

PWCore SDK - Integration

Phunware’s Core SDK is required and integrated into all Phunware modules. Included in Phunware’s Core SDK are:

  • Security-Login

  • Org Management

  • User and Role Management

  • Application Management

  • Content Management Module

  • Analytics Module

Application Setup

STEP 1: Install CocoaPods and import PWMapKit

Phunware recommends using CocoaPods to integrate the framework.

Import of PWMapKit includes:

  • PWCore
  • PWMapping
  • PWLocation

Add to your podfile:

pod PWMapKit

 

Add Navigation icons to your project:

 

STEP 2: Add App Keys to .plist

Obtain your App keys from MaaS aortal and add the following key/values to your application's Info.plist file:

  • MaaSAppId : The application ID matching the server choice.

  • MaaSAccessKey : The accesskey for your application.
  • MaaSSignatureKey : The signature key for your application.

To add your app to Mass Portal and obtain keys:

  1. Login to MaaS Portal with your Org credentials
  2. Click Apps in the left nav
  3. Click New at the top right
  4. Enter your App Name 
  5. Select the App Platform
  6. Select the App Category (for app store)
  7. Click Save
  8. In the App list find you app and click the ellipsis.
  9. Select Show Keys in the action menu
  10. The keys are exposed that you need to enter in the Manifest.

In Phunware's MaaS portal to find your App ID, Access Key, and  Signature Key.

 

Your App UUID is also found here. You will need this if you are using App Builder to create your apps.

 

 

 

 

SDK Integration NOTE <Remove later>

Routing

PWRoute initRouteFrom:<#startPoint#> to:<#endPoint#> accessibility:<#accessibility#> completion:^(PWRoute *route, NSError *error) {
	// Plot the route on the map
	[mapView navigateWithRoute:route];            
}];

Register Location Provider

The PWMapView can display a user location on the map if a location provider is registered with the PWMapView. The location providers are in the PWLocation framework, and each different provider requires different steps to set up (see readme here https://github.com/phunware/maas-location-ios-sdk to view setup examples of all different provider options). Once the location provider is initialized, the following call may be used to register the provider with the PWMapView:

NOTE: If using a virtual beacon provider such as Mist or Beacon Point, the "Uses Bluetooth LE accessories" background mode must be enabled in the "Capabilities" tab of your project's settings.

[mapView registerLocationManager:<managerObject>];

Adding Map View

// Load a building.
[PWBuilding buildingWithIdentifier:<#buildingID#> completion:^(PWBuilding *building, NSError *error) {
	// Get the buliding object here
	<#building#>					
}];

...

// Show the building on the map
PWMapView *map = [[PWMapView alloc] initWithFrame:<#frame#>];
map.delegate = self;
[self.view addSubview:map];

[mapView setBuilding:<#building#>];

Location Updates

Location updates are returned via the delegate. Update events are very similar to CLLocationManagerDelegate events.

 
- (void)locationManager:(id<PWLocationManager>)manager didUpdateToLocation:(id<PWLocation>)location {
    // Handle update.
}

- (void)locationManager:(id<PWLocationManager>)manager failedWithError:(NSError *)error {
    // Handle failure.
}

PWManagedLocationManager

The PWManagedLocationManager class take a location update from one of the other providers and uses an algorithm to improve the accuracy of that location before returning it to the consumer.

This manager relies on a building bundle that is created by the MaaS server. The building is configured in the MaaS portal, and the building identifier will be found in those portal configuration pages.

 

NOTE: If using a virtual beacon provider such as Mist or Beacon Point with PWManagedLocationManager, the "Uses Bluetooth LE accessories" background mode must be enabled in the "Capabilities" tab of your project's settings.

  1. To create a PWManagedLocationManager, call its initWithBuildingId: function and pass it the desired building identifier.
  2. Finally, call startUpdatingLocation on the PWManagedLocationManager object.
  3. The manager will fetch and parse the required server bundles and begin giving location updates as soon as possible.
// Initialize the manager:
PWManagedLocationManager *manager = [[PWManagedLocationManager alloc] initWithBuildingId:<YOUR_BUILDING_IDENTIFIER>];
manager.delegate = self;

// Start fetching location updates:
[manager startUpdatingLocation];

 

 

 

Mapping/Location SDK Use Cases

Static Wayfinding Use Cases

Display a Building on a Map (and POIs)

Full Sample Code

import UIKit
import PWMapKit
class ViewController: UIViewController, PWMapViewDelegate {
	let mapView = PWMapView()

	override func viewDidLoad() {
		super.viewDidLoad()
		mapView.delegate = self
		view.addSubview(mapView)
		configureMapViewConstraints()
		PWBuilding.building(withIdentifier: <#buildingID#>) {[weak self] (building, error) in
			self?.mapView.setBuilding(building, animated: true, onCompletion: nil)
		}
	}

	func configureMapViewConstraints() {
		mapView.translatesAutoresizingMaskIntoConstraints = false

		view.addConstraint(NSLayoutConstraint.init(item: mapView, attribute: .top, relatedBy: .equal, toItem: view, attribute: .top, multiplier: 1.0, constant: 0))

		view.addConstraint(NSLayoutConstraint.init(item: mapView, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1.0, constant: 0))

		view.addConstraint(NSLayoutConstraint.init(item: mapView, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 0))

		view.addConstraint(NSLayoutConstraint.init(item: mapView, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1.0, constant: 0))

	}

}
 
 

 

 

 

 

 

 

 

 

 

 

 

Dynamic Wayfinding (Blue Dot) Use Cases

 

 

Share Locations

 



 

 

 

 

Blue Dot Navigation Modes

 



 

 

 

 

 

ADA

Introduction

 

Functionality

 

 

 

 

 

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.

Mapping SDK 3.0 (iOS)

 

Overview

This SDK is intended to provide both high-level easy-to-use functionality for SDK Developers, as well as lower level component access for SDK Developers desiring more control over their interface.

Class Documentation

Can be found here

 

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.

Version 3.1.1 and newer

 

Mapping SDK 3.0 Integration Guide (iOS)

 

Mapping Setup and Prerequisites

iOS Managed Provider Setup

  • Phunware recommends using CocoaPods to integrate the framework. Simply add pod 'PWMapKit' to your podfile.
  • Alternatively, all of the following frameworks can be added to the Vendor/Phunware directory of your project:
    • PWMapKit.framework
    • PWCore.framework
    • PWLocation.framework
  1. Initialize Cocoapods if your project does not already use it. If your environment does not already have Cocoapods installed, enter "sudo gem install cocoapods" in Terminal. After Cocoapods is installed, navigate to your project's root directory in the Terminal. Enter "pod init" in Terminal.
  2. In the Podfile file that is generated, modify the text in Xcode or your preferred text editor. Add the line "pod 'PWMapKit'" after the "target" line and before the "end" line. Save the file.
  3. Enter "pod install" in Terminal while in the directory that contains the Podfile.
  4. Use the .xcworkspace file that was generated by the pod install from now on.
  5. In your project's Info.plist file, add a row with key: "Privacy - Location When In Use Usage Description" (Xcode should autocomplete this) and for value, add what you want your users to see when prompted for Location use by the device.

 

Additional Documentation

Attribution

PWMapKit uses the following third-party components. All components are prefixed so you don't have to worry about namespace collisions.

ComponentDescriptionLicense
SVPulsingAnnotationViewA customizable MKUserLocationView replica for your iOS app.MIT

 

Sample Application

The framework comes with a ready-to-use sample application. In order to use this application you will need to update the configuration with your MaaS credentials and location provider information.

  1. Update your MaaS credentials and set up the building identifier in BuildingConfiguration.plist.

 

Usage

The primary use of the components of PWMapKit revolve around creating a map view, displaying points of interest, showing the user's location and indoor routing.

The example shows how to instantiate a PWMapView and load a building from the sample application, where "mapView" is a PWMapView property of calling class.

 

Load Building
self.mapView = [[PWMapView alloc] initWithFrame:CGRectZero];
self.mapView.delegate = self; // self must conform to <PWMapViewDelegate> protocol
 
__weak typeof(self) weakself = self;
[PWBuilding buildingWithIdentifier:<#buildingIdentifier#> completion:^(PWBuilding *building, NSError *error) {
    if (building) {
        [weakself.mapView setBuilding:building];
    }
}];

 

Register Location Provider

The PWMapView can display a user location on the map if a location provider is registered with the PWMapView.

The location providers are in the PWLocation framework, and each different provider requires different steps to set up.

(See Readme at  https://github.com/phunware/maas-location-ios-sdk to view setup examples of all different provider options).

Once the location provider is initialized, the call may be used to register the provider with the PWMapView.

Set Map Location Type
[mapView registerLocationManager:<managerObject>];

 

Indoor Location

The indoor location is provided by the PWLocation framework and can be accessed via the "userLocation" property of PWMapView.

Indoor Location
PWCustomLocation *userLocation = self.mapView.userLocation;

Routing for iOS Mapping

Calculate Route

Simply feed the PWRoute class method two points of interest and whether or not accessibility should be considered when calculating the route.

accessibility:YES will not use access points marked as "inaccessible" in the portal, e.g. stairs between floors.

Calculate then show route.

Calculate then show route
__weak typeof(self) weakSelf = self;
[PWRoute initRouteFrom:<#(PWPointOfInterest *)#> to:<#(PWPointOfInterest *)#> accessibility:<#(BOOL)#> completion:^(PWRoute *route, NSError *error) {
    [weakSelf.mapView navigateWithRoute:route]; // will begin routing in PWMapView
}];

 

Current Route Updates

As a user traverses a route, PWMapKit will post notifications to tell the developer when the next routing instruction is reached.

Routing Updates
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myInstructionUpdatedMethod:) name:PWRouteInstructionChangedNotificationKey object:nil];

 

Managed Provider

Displaying your Map

Step 1

In your AppDelegate.m implementation, add the following line to your "- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions" function, replacing the parameters with your App values, found on the MaaS portal.

Leave "encryptionKey" as an empty string.


[PWCore setApplicationID:@"YOUR_APP_ID" accessKey:@"YOUR_ACCESS_KEY" signatureKey:@"YOUR_SIGNATURE_KEY" encryptionKey:@""];

Step 2: 

In the view controller that you wish to add the map view, add the following the top of the file.


#import <PWMapKit/PWMapKit.h>

Step 3: 

Add a PWMapView as a property of your view controller's "@interface":


@property (nonatomic, strong) PWMapView *mapView;

Step 4:

Add the PWMapViewDelegate protocol to your view controller:

@interface ViewController () <PWMapViewDelegate>

Step 5: 

The PWMapView will stretch to fit the entire superview for this example.

In your view controller's `-(void)viewDidLoad` function, add this code.

self.mapView = [PWMapView new];
self.mapView.delegate = self;
self.mapView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.mapView];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.mapView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.mapView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.mapView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0 constant:0.0]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:self.mapView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:0.0]];

Step 6:

To load your building, add the code snippet, using your building identifier found on the MaaS portal.

 

NOTE: The "dispatch_async" is currently required because of an internal SDK bug that will be fixed in the next release of PWMapKit/PWLocation.
__weak typeof(self) weakSelf = self;
[PWBuilding buildingWithIdentifier:YOUR_BUILDING_IDENTIFIER completion:^(PWBuilding *building, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [weakSelf.mapView setBuilding:building];
    });
}];

 

Showing Current Location on the Map 

This will display your current location on your building map if the MaaS and hardware were also configured properly. If you encounter issues, create the PWManagedLocationManager as a property and assign its delegate to your view controller rather than calling registerLocationManager on the PWMapView. The error may then be captured with the PWLocationManagerDelegate callback function "- (void)locationManager:(id<PWLocationManager>)manager failedWithError:(NSError *)error;"

 

Step 1:

At the top of your view controller add this code.

#import <PWLocation/PWLocation.h>

Step 2:

Modify the building load completion block so that it looks like this.

Insert your building identifier in the denoted locations. 

NOTE: The dispatch_async use is to workaround internal SDK issues which will be fixed in the next release of PWMapKit/PWLocation.
__weak typeof(self) weakSelf = self;
[PWBuilding buildingWithIdentifier:YOUR_BUILDING_IDENTIFIER completion:^(PWBuilding *building, NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        [weakSelf.mapView setBuilding:building];
            
        PWManagedLocationManager *managedLocationManager = [[PWManagedLocationManager alloc] initWithBuildingId:YOUR_BUILDING_IDENTIFIER];
            
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf.mapView registerLocationManager:managedLocationManager];
        });
    });
}];

Step 3: 

Add a property to your view controller.

@property (nonatomic, assign) BOOL isFirstLocationUpdate;

And in "- (void)viewDidLoad", set isFirstLocationUpdate to YES.

self.isFirstLocationUpdate = YES;

Step 4:

Add the delegate callback to your view controller that the PWMapView's delegate is set to.

 

NOTE: This workaround will be unnecessary in the next release of PWMapKit/PWLocation (3.1.2 and newer). Any mechanism you would like to use to only set the tracking mode once is fine.
- (void)mapView:(PWMapView *)mapView locationManager:(id<PWLocationManager>)locationManager didUpdateIndoorUserLocation:(PWIndoorLocation *)userLocation {
    if (self.isFirstLocationUpdate) {
        self.mapView.trackingMode = PWTrackingModeFollow;
        self.isFirstLocationUpdate = NO;
    }
}

 

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.

Routing for iOS Mapping

 

Calculate Route

Simply feed the PWRoute class method two points of interest and whether or not accessibility should be considered when calculating the route. accessibility:YES will not use access points marked as "inaccessible" in the portal, e.g. stairs between floors.

Calculate then show route
__weak typeof(self) weakSelf = self;
[PWRoute initRouteFrom:<#(PWPointOfInterest *)#> to:<#(PWPointOfInterest *)#> accessibility:<#(BOOL)#> completion:^(PWRoute *route, NSError *error) {
    [weakSelf.mapView navigateWithRoute:route]; // will begin routing in PWMapView
}];

Current Route Updates

As a user traverses a route, PWMapKit will post notifications to tell the developer when the next routing instruction was reached.

Routing Updates
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myInstructionUpdatedMethod:) name:PWRouteInstructionChangedNotificationKey object:nil];

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.

Maps-ADA Sample App Developer Overview (iOS)

 

This document gives an architectural overview of some of the most important classes in the Maps-ADA iOS sample application.

PWMapKit Documentation

MapViewController

The main view controller of the application. It holds several ways of searching through points of interest and also provides the routing experience for the user to follow once the route has been selected. Primary use of the PWMapView can be found in this class.

MapViewController+Segments

This category on the MapViewController configures and controls the segmented controls that sit above the map itself. It features two primary states: discovery of points of interest/routes, and routing. Segments for discovery are "Map", "Directory", and "Around Me", whereas the segments for routing are "Map" and "List".

MapViewController+Search

This category on MapViewController configures the search bar that sits above the segmented controls, as well as controlling the results of the search displayed in a table view.

DirectoryController

This NSObject controls the content displayed in the "Directory" segment.

RouteController

This subclass of DirectoryController controls what is displayed and selected in the routing table view, which can be accessed via this  button. That button can be found in the top left of the screen when on the "Map" segment and not currently routing.

AroundMeController

This subclass of DirectoryController controls what is displayed and selected in the "Around Me" segment's table view. Uses the PWMapViewDelegate to display points of interest within a radius around the current user location, ordered by proximity.

PreRoutingViewController

Shows the user a summary of the selected route and all the route steps, accessible from the Point of Interest Details view. Also has a preview of the route on a PWMapView that can't be interacted with by the user.

RoutingDirectionsTableView

Displays the list of instructions for an in-progress route. This view leverages callbacks from RouteAccessibilityManager to give a non-sighted VoiceOver user instructions to traverse the route. These include orientation updates (i.e. "Turn to your 10 o'clock"), current instruction updates, and distance remaining updates.

RouteAccessibilityManager

Uses updates to orientation, location, and current instruction notifications to produce VoiceOver messages that are passed via delegate at the appropriate time. Most accessibility work for traversing a route is done within this class.

This documentation is no longer actively supported and may be out of date. Going forward, please visit and bookmark our new site (https://docs.phunware.com/) for up-to-date documentation.

ADA-Specific Use

 

The app conforms to accessibility guidelines laid out by Apple, and leverages the existing VoiceOver features as close to their original intention as possible. Here are some areas that were specifically tailored to assist non-sighted users.

Around Me

One of the selectable segments in the primary view of the application is "Around Me". This displays the nearest points of interest to the current user location in a table format rather than map view, so that a non-sighted user can easily see what's closest.

Pre-Routing View

When a point of interest is selected from Directory or Around Me, the user is taken to a point of interest details view. If the user then selects "GET DIRECTIONS", they will be taken to the pre-routing view. This gives a summary of the route that might contain useful information for a non-sighted user (number of floors traversed, approximate walking distance).

Route Directions List

When a route is started, the user will have two segments available to select from: Map and List. The List view will show all the routing instructions of the current route, and also keep the accessibility labels updated as the route is traversed. In some cases, it will read out the information on a trigger from the current route progress. For example, if the user is coming up on the next instruction, VoiceOver might tell the user to "Turn to your 3 o'clock".

How would a visually impaired user navigate the app?

  • On first start of the app with VoiceOver enabled, an on-boarding screen is presented that gives an overview of some VoiceOver specific features. There is an option to go to the iOS Settings app where they may disable VoiceOver, or the user may continue to the app
  • When VoiceOver is enabled, the user is brought immediately to the Directory view. This view shows all the points of interest in the selected building, and the user may use the index on the right to jump to a particular letter, where the letter corresponds to the first letter of the point of interest.
  • The Around Me segment may be selected to show which points of interest are closest to the user. The max range can be changed with one of the controls on the bottom, and the list is sorted by distance from the user to the point of interest (closest at top, farthest at bottom)
  • There is a navigation button available where the user may manually select the start and end point of the route. If the user chooses to route through this Navigation button, the route will be started automatically and they will be taken to a "List" view of route instructions if VoiceOver is enabled.
  • Selecting a point of interest from either Directory or Around Me will show the details of the selected point of interest. If the user's location is currently available, there will be a "GET DIRECTIONS" button visible near the bottom of the view that the user may select to be taken to a pre-routing view.
  • The pre-routing view gives a high level overview of the route, and if VoiceOver is enabled, the individual route steps are not listed unless they select the "SHOW ALL STEPS" button. This was done so that if the user wants to start the route right away, the amount of VoiceOver swipes to get to the "START NAVIGATION" quicker than having to swipe through all the individual instructions. When "START NAVIGATION" is selected, the user is taken back to the original view where the "Map" segment is available, but they will start on the "List" segment which shows a list of Route Directions.
  • If VoiceOver is enabled, the Route Directions list will give many helpful updates to the user via VoiceOver such as "Turn to your 10 o'clock".

 

  • No labels