Finding Your Way Around Map Kit

  • 2,565 views
Uploaded on

The basics of Core Location and Map Kit. …

The basics of Core Location and Map Kit.

As presented to the MN Cocoa Heads Group for the April 2012 Meeting.

Code Available Here:
https://github.com/mobiledatasolutions/MDSMapKitDemo

Licensed Under Attribution-NonCommercial-NoDerivs 3.0
http://creativecommons.org/licenses/by-nc-nd/3.0/us/

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,565
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
26
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. FINDING YOUR WAY AROUND MAPKIT by Ryan
  • 2.   Johnson @_RyanJohnson_ MOBILE DATA SOLUTIONSMonday, April 16, 12
  • 3. WHAT WE’LL COVER Core Location The Basics Simulating Location Geocoding Map Kit The Basics Annotations Overlays Advanced Drawing & AnimationMonday, April 16, 12
  • 4. CORE LOCATION THE
  • 5.    B ACKENDMonday, April 16, 12
  • 6. GETTING THE USER’S LOCATION CLLocationManagerMonday, April 16, 12
  • 7. GETTING THE USER’S LOCATION CLLocationManager 1. Instantiate a CLLocationManager object: manager = [[CLLocationManager alloc] init];Monday, April 16, 12
  • 8. GETTING THE USER’S LOCATION CLLocationManager 1. Instantiate a CLLocationManager object: manager = [[CLLocationManager alloc] init]; 2. Set a delegate: manager.delegate = (id<CLLocationManagerDelegate>)self;Monday, April 16, 12
  • 9. GETTING THE USER’S LOCATION CLLocationManager 1. Instantiate a CLLocationManager object: manager = [[CLLocationManager alloc] init]; 2. Set a delegate: manager.delegate = (id<CLLocationManagerDelegate>)self; 3. Set your desired accuracy & start monitoring: manager.desiredAccuracy = kCLLocationAccuracyBest; [manager startUpdatingLocation];Monday, April 16, 12
  • 10. GETTING THE USER’S LOCATION CLLocationManager 1. Instantiate a CLLocationManager object: manager = [[CLLocationManager alloc] init]; 2. Set a delegate: manager.delegate = (id<CLLocationManagerDelegate>)self; 3. Set your desired accuracy & start monitoring: manager.desiredAccuracy = kCLLocationAccuracyBest; [manager startUpdatingLocation]; 4. Location updates are sent to the delegate method: - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;Monday, April 16, 12
  • 11. GETTING THE USER’S LOCATION CLLocationManager 1. Instantiate a CLLocationManager object: manager = [[CLLocationManager alloc] init]; 2. Set a delegate: manager.delegate = (id<CLLocationManagerDelegate>)self; 3. Set your desired accuracy & start monitoring: manager.desiredAccuracy = kCLLocationAccuracyBest; [manager startUpdatingLocation]; 4. Location updates are sent to the delegate method: - (void) locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation; PROTiP:
  • 12.   GPS
  • 13.   hates
  • 14.   batteries.
  • 15.   You
  • 16.   can
  • 17.   help
  • 18.   save
  • 19.   the
  • 20.   user’s
  • 21.    battery
  • 22.   by
  • 23.   setting
  • 24.   the
  • 25.   desired
  • 26.   accuracy
  • 27.   to
  • 28.   what
  • 29.   you
  • 30.   actually
  • 31.    need.
  • 32.   Less
  • 33.   accurate
  • 34.   =
  • 35.   more
  • 36.   battery
  • 37.   life
  • 38.   =
  • 39.   better
  • 40.   UX. manager.desiredAccuracy = kCLLocationAccuracyThreeKilometersMonday, April 16, 12
  • 41. Geography
  • 42.   Lesson
  • 43.   #1: The
  • 44.   World
  • 45.   Is
  • 46.   Round. Latitude
  • 47.   =
  • 48.   the
  • 49.   east/west Longitude
  • 50.   =
  • 51.   the
  • 52.   north/south The
  • 53.   distance
  • 54.   or
  • 55.   direction
  • 56.   between
  • 57.   two
  • 58.   points
  • 59.   is
  • 60.   calculated
  • 61.    over
  • 62.   the
  • 63.   sphere
  • 64.   of
  • 65.   the
  • 66.   earth
  • 67.   not
  • 68.   a
  • 69.   straight
  • 70.   line.Monday, April 16, 12
  • 71. THE LOCATION MODEL CLLocation ➡ location.coordinate - the CLLocationCoordinate2D struct with the latitude and longitude ➡ location.horizontalAccuracy - the accuracy of the coordinate in meters ➡ location.speed - the user’s speed in meters per second ➡ location.course - the direction the user is headed in degrees Y U NO WORK!? Invalid
  • 72.   Coordinates
  • 73.   can
  • 74.   cause
  • 75.   tough
  • 76.   to
  • 77.   debug
  • 78.   issues.
  • 79.    You
  • 80.   can
  • 81.   validate
  • 82.   your
  • 83.   coordinates
  • 84.   with CLLocationCoordinate2DIsValid(CLLocationCoordinate2D coord)Monday, April 16, 12
  • 85. REGION MONITORING CLRegion ➡ Easy to use geofencing - lets you know when a user enters or exits a defined circular geographic region. ➡ Can continue to run in the background, relaunching your app when a user enters/exits a region. ➡ Shared system resource (limit, identifiers) ➡ Create a CLRegion to be monitored: CLLocationCoordinate2D regionCenter = {42.443904, -71.122044}; CLRegion * region = [[CLRegion alloc] initCircularRegionWithCenter:regionCenter radius:1000 identifier:@"A Monitored Region"]; ➡ Send the CLRegion to a CLLocationManager to be monitored [_locationManager startMonitoringForRegion:region desiredAccuracy:50]; ➡ Region events are passed to the CLLocationManager delegate’s methods: - (void) locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region; - (void) locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region;Monday, April 16, 12
  • 86. SIMULATING YOUR LOCATION ➡ Can simulate a pin point location or travel a long a series of points ➡ If you do nothing, the simulator’s default location is in San Francisco. ➡ Three Ways to Simulate Your Location ➡ Default locations in Xcode ➡ A GPX File ➡ UIAutomation - UIATarget setLocation(coordinateDictionary) PROTIP:
  • 87.   Only
  • 88.   simulate
  • 89.   your
  • 90.   location
  • 91.   on
  • 92.   devices
  • 93.    dedicated
  • 94.   to
  • 95.   development.
  • 96.   Your
  • 97.   simulated
  • 98.   location
  • 99.    is
  • 100.   reported
  • 101.   to
  • 102.   all
  • 103.   apps.
  • 104.   So,
  • 105.   Maps
  • 106.   or
  • 107.   Path
  • 108.   will
  • 109.   think
  • 110.    you’re
  • 111.   in
  • 112.   Pyongyang
  • 113.   when
  • 114.   you’re
  • 115.   really
  • 116.   in
  • 117.   Eagan.Monday, April 16, 12
  • 118. CODE DEMO BASICS
  • 119.    A ND
  • 120.    LOCATION
  • 121.    S IMULATIONMonday, April 16, 12
  • 122. GEOCODING CLGeocoder Reverse geocoding introduced in iOS 3 with MKReverseGeocoder (now depreciated) iOS 5 now allows for forward and reverse geocoding in the new CLGeocoder class. Forward Geocoding - turns an address into a coordinate Reverse Geocoding - turns a coordinate into an addressMonday, April 16, 12
  • 123. CODE DEMO GEOCODINGMonday, April 16, 12
  • 124. RUNNING IN THE BACKGROUND Location services are a permitted background task Enabled in the Info.plist: <key>UIBackgroundModes</key> <array> <string>location</string> </array> Region Monitoring does not require the background task permission. Your app will be relaunched in the background to allow for processing the region event.Monday, April 16, 12
  • 125. MAP KIT THE
  • 126.    F RONT
  • 127.    E NDMonday, April 16, 12
  • 128. Geography
  • 129.   Lesson
  • 130.   #2: Maps
  • 131.   are
  • 132.   flat.
  • 133.   this
  • 134.   is
  • 135.   a
  • 136.   problem. There
  • 137.   are
  • 138.   a
  • 139.   lot
  • 140.   of
  • 141.   ways
  • 142.   to
  • 143.   make
  • 144.   a
  • 145.    circle
  • 146.   flat.
  • 147.   Monday, April 16, 12
  • 148. Geography
  • 149.   Lesson
  • 150.   #2: Maps
  • 151.   are
  • 152.   flat.
  • 153.   this
  • 154.   is
  • 155.   a
  • 156.   problem. There
  • 157.   are
  • 158.   a
  • 159.   lot
  • 160.   of
  • 161.   ways
  • 162.   to
  • 163.   make
  • 164.   a
  • 165.    circle
  • 166.   flat.
  • 167.   Monday, April 16, 12
  • 168. Geography
  • 169.   Lesson
  • 170.   #2: Maps
  • 171.   are
  • 172.   flat.
  • 173.   this
  • 174.   is
  • 175.   a
  • 176.   problem. There
  • 177.   are
  • 178.   a
  • 179.   lot
  • 180.   of
  • 181.   ways
  • 182.   to
  • 183.   make
  • 184.   a
  • 185.    circle
  • 186.   flat.
  • 187.    MKMapView
  • 188.   uses
  • 189.   a
  • 190.   web
  • 191.   mercator
  • 192.    projection.Monday, April 16, 12
  • 193. Geography
  • 194.   Lesson
  • 195.   #2: Maps
  • 196.   are
  • 197.   flat.
  • 198.   this
  • 199.   is
  • 200.   a
  • 201.   problem. There
  • 202.   are
  • 203.   a
  • 204.   lot
  • 205.   of
  • 206.   ways
  • 207.   to
  • 208.   make
  • 209.   a
  • 210.    circle
  • 211.   flat.
  • 212.    MKMapView
  • 213.   uses
  • 214.   a
  • 215.   web
  • 216.   mercator
  • 217.    projection.Monday, April 16, 12
  • 218. Geography
  • 219.   Lesson
  • 220.   #2: Maps
  • 221.   are
  • 222.   flat.
  • 223.   this
  • 224.   is
  • 225.   a
  • 226.   problem. There
  • 227.   are
  • 228.   a
  • 229.   lot
  • 230.   of
  • 231.   ways
  • 232.   to
  • 233.   make
  • 234.   a
  • 235.    circle
  • 236.   flat.
  • 237.    MKMapView
  • 238.   uses
  • 239.   a
  • 240.   web
  • 241.   mercator
  • 242.    projection.Monday, April 16, 12
  • 243. Geography
  • 244.   Lesson
  • 245.   #2: Maps
  • 246.   are
  • 247.   flat.
  • 248.   this
  • 249.   is
  • 250.   a
  • 251.   problem. There
  • 252.   are
  • 253.   a
  • 254.   lot
  • 255.   of
  • 256.   ways
  • 257.   to
  • 258.   make
  • 259.   a
  • 260.    circle
  • 261.   flat.
  • 262.    MKMapView
  • 263.   uses
  • 264.   a
  • 265.   web
  • 266.   mercator
  • 267.    projection.Monday, April 16, 12
  • 268. Geography
  • 269.   Lesson
  • 270.   #2: Maps
  • 271.   are
  • 272.   flat.
  • 273.   this
  • 274.   is
  • 275.   a
  • 276.   problem. There
  • 277.   are
  • 278.   a
  • 279.   lot
  • 280.   of
  • 281.   ways
  • 282.   to
  • 283.   make
  • 284.   a
  • 285.    circle
  • 286.   flat.
  • 287.    MKMapView
  • 288.   uses
  • 289.   a
  • 290.   web
  • 291.   mercator
  • 292.    projection.Monday, April 16, 12
  • 293. Geography
  • 294.   Lesson
  • 295.   #2: Maps
  • 296.   are
  • 297.   flat.
  • 298.   this
  • 299.   is
  • 300.   a
  • 301.   problem. There
  • 302.   are
  • 303.   a
  • 304.   lot
  • 305.   of
  • 306.   ways
  • 307.   to
  • 308.   make
  • 309.   a
  • 310.    circle
  • 311.   flat.
  • 312.    MKMapView
  • 313.   uses
  • 314.   a
  • 315.   web
  • 316.   mercator
  • 317.    projection. Mapkit
  • 318.   uses
  • 319.   its
  • 320.   own
  • 321.   structures
  • 322.    (MKMapPoint,
  • 323.   MKMapRect)
  • 324.   to
  • 325.    handle
  • 326.   this
  • 327.   conversionMonday, April 16, 12
  • 328. MAPS MKMapView The basic way of showing geographic data Can show the user’s location with out the need for Core Location mapview.showsUserLocation = YES; [mapView setUserTrackingMode:MKUserTrackingModeFollow animated:YES];Monday, April 16, 12
  • 329. ANNOTATIONS MKAnnotation + MKAnnotationView The basic way of presenting point data on a map Comes with a disclosure pop-out for additional detail MKAnnotation is the basic model (really a protocol) and MKAnnotationView is the view. You add the MKAnnotation to the map, and the map is provided a view by the map’s delegate.Monday, April 16, 12
  • 330. OVERLAYS MKOverlay + MKOverlayView Allows you to place paths or custom drawing over a map. Provided basic path types: MKCircle, MKPolyline, MKPolygon Can create your own view classes to easily draw over a map. Custom drawing must be done by overriding: - (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context;Monday, April 16, 12
  • 331. CODE DEMO ANNOTATIONS
  • 332.    + 
  • 333.    O VERLAYSMonday, April 16, 12
  • 334. GDAL Geospatial Data Abstraction Library www.gdal.com or brew install gdal A command line tool to create your own tile images and to convert the projection of images Essential if you’re going to put your own images on a mapMonday, April 16, 12
  • 335. CODE DEMO TILED
  • 336.    I MAGESMonday, April 16, 12
  • 337. ADDITIONAL RESOURCES WWDC Videos & Sample Code - 2010 Session - Customizing Maps With Overlays KML https://developer.apple.com/library/ios/samplecode/KMLViewer/ Introduction/Intro.html#//apple_ref/doc/uid/DTS40010046 Tiled Images (in the Code Bundle) http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/wa/ getSoftware? wosid=aY5boO0HQiIJ3STghf12IbXXhCt&fileID=26713&code=y&source=x 2011 Session - Visualizing Information Graphically With MapKit Open Source Code - VPPMap (Annotation Clustering)- https://github.com/vicpenap/VPPMap Core Location Utils - https://github.com/100grams/CoreLocationUtilsMonday, April 16, 12