Session 300 - Getting Around Using Map Kit

  • Published on
    03-Jan-2016

  • View
    127

  • Download
    0

Embed Size (px)

DESCRIPTION

Session 300 - Getting Around Using Map Kit

Transcript

  • These are confidential sessionsplease refrain from streaming, blogging, or taking pictures

    Session 300 and 310

    Getting Around with Map Kit

    Brady LawSoftware Engineer - Maps Client Team

  • Agenda

  • Agenda

    The new look of Map Kit

  • Agenda

    The new look of Map Kit Launching Maps with MKMapItem

  • Agenda

    The new look of Map Kit Launching Maps with MKMapItem Developing routing apps

  • Powered by Apple MapsThe New Look of Map Kit

  • What does it take to get Apple Maps in my app?

  • Absolutely nothing.New Maps. Same API.

  • StandardMap Modes

  • SatelliteMap Modes

  • HybridMap Modes

  • Annotations

  • Overlays

  • With a Static MapPinch to Zoom

  • With a Static MapPinch to Zoom

  • With a Dynamic MapPinch to Zoom

  • With a Dynamic MapPinch to Zoom

  • Setting the Map Region

  • Setting the Map Region

    In iOS 5, region changes were adjusted to improve map display

  • Setting the Map Region

    In iOS 5, region changes were adjusted to improve map display-setRegion:

  • Setting the Map Region

    In iOS 5, region changes were adjusted to improve map display-setRegion:-setVisibleMapRect:

  • Setting the Map Region

    In iOS 5, region changes were adjusted to improve map display-setRegion:-setVisibleMapRect:

    No longer necessary in iOS 6

  • Heading Mode

  • Heading Mode

    Static Map (iOS 5)

  • Heading Mode

    Static Map (iOS 5)

  • Heading Mode

    Static Map (iOS 5) Dynamic Map (iOS 6)

  • Heading Mode

    Static Map (iOS 5) Dynamic Map (iOS 6)

  • The New Look of Map Kit

  • The New Look of Map Kit

    Map display APIs are the same

  • The New Look of Map Kit

    Map display APIs are the same Improved map rendering

  • The New Look of Map Kit

    Map display APIs are the same Improved map rendering Re-link with iOS 6 to change regions with precision

  • The New Look of Map Kit

    Map display APIs are the same Improved map rendering Re-link with iOS 6 to change regions with precision Test your apps!

  • A new API in iOS 6Launching Maps with MKMapItem

  • Why Launch Maps?Getting directions

  • Why Launch Maps?

    Contacts/Bookmarks ExploreDrop a Pin

  • Introducing MKMapItem

  • Introducing MKMapItem

    Objective-C API

  • Introducing MKMapItem

    Objective-C API Open Maps with one or more pins

  • Introducing MKMapItem

    Objective-C API Open Maps with one or more pins Jump directly into directions

  • Introducing MKMapItem

    Objective-C API Open Maps with one or more pins Jump directly into directions Customize the map display

  • Opening an Item in Maps

  • Opening an Item in Maps

  • Opening an Item in Maps

    MKPlacemark

  • Opening an Item in Maps

    MKPlacemark

    Location

  • Opening an Item in Maps

    MKPlacemark

    LocationAddress Dictionary

  • Opening an Item in Maps

    MKMapItem

    MKPlacemark

  • -openInMapsWithLaunchOptions:

    Opening an Item in Maps

    MKMapItem

    MKPlacemark

  • -openInMapsWithLaunchOptions:

    Opening an Item in Maps

    MKMapItem

    MKPlacemark

  • Opening an Item in Maps

    MKMapItem *sfStore = [[MKMapItem alloc] initWithPlacemark:placemark];

  • Opening an Item in Maps

    MKMapItem *sfStore = [[MKMapItem alloc] initWithPlacemark:placemark];

    [sfStore openInMapsWithLaunchOptions:nil];

  • Opening an Item in Maps

  • Opening an Item in Maps

  • Adding Item Details

  • Adding Item Details

  • Adding Item Details

    MKPlacemark

  • Adding Item Details

    MKMapItem

    +name+phone+url

    MKPlacemark

  • -openInMapsWithLaunchOptions:

    Adding Item Details

    MKMapItem

    +name+phone+url

    MKPlacemark

  • -openInMapsWithLaunchOptions:

    Adding Item Details

    MKMapItem

    +name+phone+url

    MKPlacemark

  • MKMapItem *sfStore = [[MKMapItem alloc] initWithPlacemark:placemark];

    sfStore.name = @"Apple Store - San Francisco";sfStore.phoneNumber = @"+14153920202";sfStore.url = [NSURL URLWithString:@"http://www.apple.com/retail/"];

    [sfStore openInMapsWithLaunchOptions:nil];

    Adding Item Details

  • Opening Multiple Map Items

  • Opening Multiple Map Items

  • Opening Multiple Items in Maps

  • Opening Multiple Items in Maps

    MKMapItem

    MKMapItem

    MKMapItem

  • NSArray

    Opening Multiple Items in Maps

    MKMapItem

    MKMapItem

    MKMapItem

  • +openMapsWithItems:launchOptions:

    NSArray

    Opening Multiple Items in Maps

    MKMapItem

    MKMapItem

    MKMapItem

  • +openMapsWithItems:launchOptions:

    NSArray

    Opening Multiple Items in Maps

    MKMapItem

    MKMapItem

    MKMapItem

  • NSArray *storeItems = @[ sfStore, chestnutStore, bayStreetStore ];

    Opening Multiple Map Items

  • NSArray *storeItems = @[ sfStore, chestnutStore, bayStreetStore ];

    [MKMapItem openMapsWithItems:storeItems launchOptions:nil];

    Opening Multiple Map Items

  • +openMapsWithItems:launchOptions: +openMapsWithItems:launchOptions: +openMapsWithItems:launchOptions:

    -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Launch Options

  • +openMapsWithItems:launchOptions: +openMapsWithItems:launchOptions:

    -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Launch Options

  • +openMapsWithItems:launchOptions: +openMapsWithItems:launchOptions:

    -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Launch Options

    Map type

  • +openMapsWithItems:launchOptions: +openMapsWithItems:launchOptions:

    -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Launch Options

    Map type

    Coordinate region

  • +openMapsWithItems:launchOptions: +openMapsWithItems:launchOptions:

    -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Launch Options

    Map type

    Coordinate region

    Traffic

  • Map typeLaunch Options

    NSDictionary *options = @{

    };

  • Map typeLaunch Options

    NSDictionary *options = @{ MKLaunchOptionsMapTypeKey :

    [NSNumber numberWithInteger:MKMapTypeSatellite],

    };

  • Coordinate regionLaunch Options

    NSDictionary *options = @{ MKLaunchOptionsMapTypeKey :

    [NSNumber numberWithInteger:MKMapTypeSatellite],

    };

  • Coordinate regionLaunch Options

    NSDictionary *options = @{ MKLaunchOptionsMapTypeKey :

    [NSNumber numberWithInteger:MKMapTypeSatellite],

    MKLaunchOptionsMapCenterKey : [NSValue valueWithMKCoordinate:regionCenter],

    MKLaunchOptionsMapSpanKey : [NSValue valueWithMKCoordinateSpan:regionSpan]

    };

  • Coordinate regionLaunch Options

    NSDictionary *options = @{ MKLaunchOptionsMapTypeKey :

    [NSNumber numberWithInteger:MKMapTypeSatellite],

    MKLaunchOptionsMapCenterKey : [NSValue valueWithMKCoordinate:regionCenter],

    MKLaunchOptionsMapSpanKey : [NSValue valueWithMKCoordinateSpan:regionSpan]

    };

  • Coordinate regionLaunch Options

    NSDictionary *options = @{ MKLaunchOptionsMapTypeKey :

    [NSNumber numberWithInteger:MKMapTypeSatellite],

    MKLaunchOptionsMapCenterKey : [NSValue valueWithMKCoordinate:regionCenter],

    MKLaunchOptionsMapSpanKey : [NSValue valueWithMKCoordinateSpan:regionSpan]

    };

  • TrafficLaunch Options

    NSDictionary *options = @{

    };

  • TrafficLaunch Options

    NSDictionary *options = @{

    MKLaunchOptionsShowsTrafficKey :@YES,

    };

  • Getting Directions

  • -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    mosconeItem

    Getting Directions

  • -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    mosconeItem

    Getting Directions

    DirectionsModeKey

  • -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Current Location

    mosconeItem

    Getting Directions

    DirectionsModeKey

  • -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions: -openInMapsWithLaunchOptions:

    Current Location

    mosconeItem

    Getting Directions

    DirectionsModeKey

  • MKMapItem *mosconeItem = ...

    NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey : MKLaunchOptionsDirectionsModeDriving,};

    [mosconeItem openInMapsWithLaunchOptions:options];

    Getting DirectionsFrom your current location

  • mosconeItem

    airportItem

    Directions from a Custom Origin

    DirectionsModeKey

  • NSArray

    mosconeItem

    airportItem

    Directions from a Custom Origin

    DirectionsModeKey

  • +openMapsWithItems:launchOptions:

    NSArray

    mosconeItem

    airportItem

    Directions from a Custom Origin

    DirectionsModeKey

  • +openMapsWithItems:launchOptions:

    mosconeItem

    airportItem

    Directions from a Custom Origin

    DirectionsModeKey

  • +openMapsWithItems:launchOptions:

    mosconeItem

    airportItem

    Directions from a Custom Origin

    DirectionsModeKey

  • NSArray *directionsItems = @[airportItem,mosconeWestItem];

    Directions from a Custom Origin

  • NSArray *directionsItems = @[airportItem,mosconeWestItem];

    Directions from a Custom Origin

  • NSArray *directionsItems = @[airportItem,mosconeWestItem];

    NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey :

    MKLaunchOptionsDirectionsModeDriving,};

    Directions from a Custom Origin

  • NSArray *directionsItems = @[airportItem,mosconeWestItem];

    NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey :

    MKLaunchOptionsDirectionsModeDriving,};

    [MKMapItem openMapsWithItems:directionsItems launchOptions:options];

    Directions from a Custom Origin

  • Representing Current Location

  • Representing Current Location

    MKMapItem *item = [MKMapItem mapItemForCurrentLocation];

  • Representing Current Location

    MKMapItem *item = [MKMapItem mapItemForCurrentLocation];

    Current location item will NOT have a placemark

  • Representing Current Location

    MKMapItem *item = [MKMapItem mapItemForCurrentLocation];

    Current location item will NOT have a placemarkmapItem.isCurrentLocation == YES

  • NSArray *directionsItems = @[mosconeWestItem,[MKMapItem mapItemForCurrentLocation]];

    NSDictionary *options = @{ MKLaunchOptionsDirectionsModeKey :

    MKLaunchOptionsDirectionsModeDriving,};

    [MKMapItem openMapsWithItems:directionsItems launchOptions:options];

    Directions from a Custom Origin

  • Launching Maps with MKMapItem

  • Open Maps with minimal code

    Launching Maps with MKMapItem

  • Open Maps with minimal code Offer quick access to navigation, bookmarks, and more

    Launching Maps with MKMapItem

  • Open Maps with minimal code Offer quick access to navigation, bookmarks, and more

    Keep your app focused

    Launching Maps with MKMapItem

  • Integrated routing powered by the app storeDeveloping Routing Apps

  • Transportation modesThe Many Faces of Routing

  • Transportation modesThe Many Faces of Routing

  • Transportation modesThe Many Faces of Routing

  • Transportation modesThe Many Faces of Routing

  • +

  • +

  • There is a black mask behind me! Make sure I stay here so animations look nice.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

    Red Circle instead of text

  • There is a black mask behind me! Make sure I stay here so animations look nice.

    Red Circle instead of text

  • There is a black mask behind me! Make sure I stay here so animations look nice.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

  • Add graphic to show these are relevant apps based on the origin and destination.

  • Add graphic to show these are relevant apps based on the origin and destination.

    Installed Routing AppsRecommended apps for your start and endpoint.

  • Add graphic to show these are relevant apps based on the origin and destination.

    App Store SuggestionsPurchase from inside of Maps.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

    Red circle

  • There is a black mask behind me! Make sure I stay here so animations look nice.

    Add a slide to make it more clear that we are getting directions from Moscone to Apple, Inc.

  • There is a black mask behind me! Make sure I stay here so animations look nice.

    Add a slide to make it more clear that we are getting directions from Moscone to Apple, Inc.

  • Routing App Requirements

  • Routing App Requirements

    1. Declare your app as a routing app

  • Routing App Requirements

    1. Declare your app as a routing app2. Specify where your app is relevant geographically

  • Routing App Requirements

    1. Declare your app as a routing app2. Specify where your app is relevant geographically3. Handle launches from Maps

  • Declare Your App as a Routing App

  • Declare Your App as a Routing App

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageWhere can your app provide routes?

  • Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson)

    Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson) Provide one MultiPolygon

    Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson) Provide one MultiPolygon Keep it simple

    Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson) Provide one MultiPolygon Keep it simple

    Up to 20 polygons, 20 points per polygon

    Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson) Provide one MultiPolygon Keep it simple

    Up to 20 polygons, 20 points per polygon

    Coverage file is NOT part of the app bundle

    Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson) Provide one MultiPolygon Keep it simple

    Up to 20 polygons, 20 points per polygon

    Coverage file is NOT part of the app bundle Uploaded using iTunes Connect

    Specifying Geographic CoverageRequirements

  • GeoJSON file format (.geojson) Provide one MultiPolygon Keep it simple

    Up to 20 polygons, 20 points per polygon

    Coverage file is NOT part of the app bundle Uploaded using iTunes Connect Automatically updated

    Specifying Geographic CoverageRequirements

  • Testing Your Routing App

  • Testing Your Routing App

    Maps is now in the simulator

  • Testing Your Routing App

    Maps is now in the simulator Verify your app appears when relevant

  • Testing Your Routing App

    Maps is now in the simulator Verify your app appears when relevant

    Check the logs

  • Testing Your Routing App

    Maps is now in the simulator Verify your app appears when relevant

    Check the logs Simulatoruse Console

  • Testing Your Routing App

    Maps is now in the simulator Verify your app appears when relevant

    Check the logs Simulatoruse Console Deviceuse Xcode Organizer

  • DemoDeclaring your app as a routing app

  • Routing App Requirements

    1. Declare your app as a routing app2. Specify where your app is relevant geographically3. Handle launches from Maps

  • Handling Launches from Maps

    MKMapItem

    MKMapItem

  • Handling Launches from Maps

    MKMapItem

    Current Location

  • Handling Launches from Maps

    MKDirectionsRequest

    MKMapItem

    Current Location

  • Handling Launches from Maps

    MKDirectionsRequest

    MKMapItem

    Current Location

    NSURL

  • Handling Launches from Maps

    NSURL

  • NSURL

    Handling Launches from Maps

  • MKDirectionsRequest

    NSURL

    Handling Launches from Maps

    Is it a MKDirectionsRequest URL?

  • MKDirectionsRequest

    NSURL

    Handling Launches from Maps

    Is it a MKDirectionsRequest URL? If yes, instantiate the request using the URL

  • MKDirectionsRequest

    Current Location

    NSURL

    Handling Launches from Maps

    Is it a MKDirectionsRequest URL? If yes, instantiate the request using the URL@property MKMapItem *source;

  • MKDirectionsRequest

    MKMapItem

    Current Location

    NSURL

    Handling Launches from Maps

    Is it a MKDirectionsReq...

Recommended

View more >