SlideShare a Scribd company logo
iPhone Application Development II
            Janet Huang
             2011/11/30
Today’s topic
• Model View Control
• Protocol, Delegation, Target/Action
• Location in iPhone
 • CoreLocation
 • MapKit
• Location-based iPhone Application
MVC
                          should
                                   did
                       will                 target

                       controller
                                          outlet
                      count
Notification




                                          de
                         data




                                   da
 & KVO




                                             le
                                     ta

                                             ga
                                                        action




                                               te
                                         so
                                           urc
                                           es
              model                                  view
IBOutlet & IBAction
                     target                  action



        controller                                    view
                   outlet




#import <UIKit/UIKit.h>

@interface HelloViewController : UIViewController
{
    IBOutlet UILabel* display;
}

- (IBAction)pressButton:(id)sender;
@end
                                                             Interface Builder
                            ViewController
Delegation pattern


                    delegate        delegate
delegator                        (helper object)
class RealPrinter { // the "delegate"
    void print() {
      System.out.print("something");
    }
}

class Printer { // the "delegator"
    RealPrinter p = new RealPrinter(); // create the delegate
    void print() {
      p.print(); // delegation
    }
}

public class Main {
    // to the outside world it looks like Printer actually prints.
    public static void main(String[] args) {
        Printer printer = new Printer();
        printer.print();
    }
}




                                             java simple example
interface I {
    void f();
    void g();
}

class A implements I {
    public void f() { System.out.println("A: doing f()"); }
    public void g() { System.out.println("A: doing g()"); }
}

class B implements I {
    public void f() { System.out.println("B: doing f()"); }
    public void g() { System.out.println("B: doing g()"); }
}

class C implements I {
    // delegation
    I i = new A();

    public void f() { i.f(); }
    public void g() { i.g(); }

    // normal attributes
    public void toA() { i = new A(); }
    public void toB() { i = new B(); }
}

public class Main {
    public static void main(String[] args) {
        C c = new C();
        c.f();      // output: A: doing f()
        c.g();      // output: A: doing g()
        c.toB();
        c.f();      // output: B: doing f()
        c.g();      // output: B: doing g()
    }
}
                                           java complex example
@protocol I <NSObject>
-(void) f;
-(void) g;
@end

@interface A : NSObject <I> { }             // constructor
@end                                        -(id)init {
@implementation A                               if (self = [super init]) { i = [[A alloc] init]; }
-(void) f { NSLog(@"A: doing f"); }             return self;
-(void) g { NSLog(@"A: doing g"); }         }
@end
                                            // destructor
@interface B : NSObject <I> { }             -(void)dealloc { [i release]; [super dealloc]; }
@end                                        @end
@implementation B
-(void) f { NSLog(@"B: doing f"); }         int main (int argc, const char    * argv[]) {
-(void) g { NSLog(@"B: doing g"); }             NSAutoreleasePool * pool =    [[NSAutoreleasePool alloc]
@end                                        init];
                                                C *c = [[C alloc] init];
@interface C : NSObject <I> {                   [c f];                   //   output: A: doing f
     id<I> i; // delegation                     [c g];                   //   output: A: doing g
}                                               [c toB];
-(void) toA;                                    [c f];                   //   output: B: doing f
-(void) toB;                                    [c g];                   //   output: B: doing g
@end                                            [c release];
                                                [pool drain];
@implementation C                               return 0;
-(void) f { [i f]; }                        }
-(void) g { [i g]; }

-(void) toA { [i release]; i = [[A alloc]
init]; }
-(void) toB { [i release]; i = [[B alloc]
init]; }
Delegation
     •    Delegate: a helper object can execute a task for the delegator

     •    Delegator: delegate a task to the delegate



                                    delegate
   CLLocationManagerDelegate                       MyCoreLocationController


           the delegator                                   the delegate
         (declare methods)                             (implement methods)



@interface MyCoreLocationController : NSObject <CLLocationManagerDelegate>

                                                                    protocol
Iphone course 2
Iphone course 2
Iphone course 2
Iphone course 2
Iphone course 2
Location in iPhone
• Core Location
 • framework for specifying location on the
    planet
• MapKit
 • graphical toolkit for displaying locations
    on the planet
CoreLocation
• A frameworks to manage location and
  heading
 •   CLLocation (basic object)

 •   CLLocationManager

 •   CLHeading

• No UI
• How to get CLLocation?
 •   use CLLocationManager
CoreLocation
•   Where is the location? (approximately)

    @property (readonly) CLLocationCoordinate2D coordinate;
    typedef {
       CLLocationDegrees latitude;
       CLLocationDegrees longitude;
    } CLLocationCoordinate2D;

    //meters A negative value means “below sea level.”
    @property(readonly)CLLocationDistancealtitude;
CoreLocation
• How does it know the location?
 • GPS
 • Wifi
 • Cell network
• The more accurate the technology, the
  more power it costs
CLLocationManager
• General approach
 •   Check to see if the hardware you are on/user
     supports the kind of location updating you want.

 •    Create a CLLocationManager instance and set a
     delegate to receive updates.

 •   Configure the manager according to what kind
     of location updating you want.

 •   Start the manager monitoring for location
     changes.
CoreLocation
•   Accuracy-based continuous location monitoring
        @propertyCLLocationAccuracydesiredAccuracy;
        @property CLLocationDistance distanceFilter;
•   Start the monitoring
        - (void)startUpdatingLocation;
        - (void)stopUpdatingLocation;

•   Get notified via the CLLocationManager’s
    delegate
      - (void)locationManager:(CLLocationManager *)manager
         didUpdateToLocation:(CLLocation *)newLocation
               fromLocation:(CLLocation *)oldLocation;
MapKit

•   Display a map

•   Show user location

•   Add annotations on a map
MKMapView

• 2 ways to create a map
 • create with alloc/init
 • drag from Library in Interface builder
• MKAnnotation
MKMapView
 •    Controlling the region the map is displaying
       @property MKCoordinateRegion region;
       typedef struct {
           CLLocationCoordinate2D center;
           MKCoordinateSpan span;
       } MKCoordinateRegion;
       typedef struct {
           CLLocationDegrees latitudeDelta;
           CLLocationDegrees longitudeDelta;
       }
       // animated version
       - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated;

 •    Can also set the center point only
@property CLLocationCoordinate2D centerCoordinate;
- (void)setCenterCoordinate:(CLLocationCoordinate2D)center animated:(BOOL)animated;
MKAnnotation
How to add an annotation on a map?
  - implement a customized annotation using MKAnnotation protocol
        @protocol MKAnnotation <NSObject>
        @property (readonly) CLLocationCoordinate2D coordinate;
        @optional
        @property (readonly) NSString *title;
        @property (readonly) NSString *subtitle;
        @end
        typedef {
           CLLocationDegrees latitude;
           CLLocationDegrees longitude;
        } CLLocationCoordinate2D;

 - add annotation to MKMapView
        [mapView addAnnotation:myannotation];
#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MyAnnotation : NSObject <MKAnnotation>
{
    CLLocationCoordinate2D coordinate;
    NSString * title;
    NSString * subtitle;
}
@property (nonatomic, assign) CLLocationCoordinate2D coordinate;
@property (nonatomic, copy) NSString * title;
@property (nonatomic, copy) NSString * subtitle;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coord;

@end                                                       MyAnnotation.h


#import "MyAnnotation.h"

@implementation MyAnnotation

@synthesize coordinate;
@synthesize title;
@synthesize subtitle;

- (id)initWithCoordinate:(CLLocationCoordinate2D)coord {
    self = [super init];
    if (self) {
        coordinate = coord;
    }
    return self;
}

- (void) dealloc
{
     [title release];
! [subtitle release];
     [super dealloc];
}
@end                                                       MyAnnotation.m
Google Map API
A geolocation api request:
  http://maps.googleapis.com/maps/api/geocode/output?parameters

  https://maps.googleapis.com/maps/api/geocode/output?parameters



URL parameters:
    - address (required)
    - latlng (required)
    - sensor (required)
    - bounds
    - region
    - language
                             http://code.google.com/apis/maps/documentation/geocoding/
http://maps.googleapis.com/maps/api/geocode/json?address=台北
101&sensor=true
      {
          "results" : [
             {
                "address_components" : [
                   {
                      "long_name" : "101縣道",
                      "short_name" : "101縣道",
                      "types" : [ "route" ]
                   },
                   {
                      "long_name" : "New Taipei City",
                      "short_name" : "New Taipei City",
                      "types" : [ "administrative_area_level_2", "political" ]
                   },
                   {
                      "long_name" : "Taiwan",
                      "short_name" : "TW",
                      "types" : [ "country", "political" ]
                   }
                ],
                "formatted_address" : "Taiwan, New Taipei City, 101縣道",
                "geometry" : {
                   "bounds" : {
                      "northeast" : {
                         "lat" : 25.26163510,
                         "lng" : 121.51636480
                      },
                      "southwest" : {
                         "lat" : 25.17235040,
                         "lng" : 121.44038660
http://maps.googleapis.com/maps/api/geocode/xml?address=
台北101&sensor=true

     <?xml version="1.0" encoding="UTF-8"?>
     <GeocodeResponse>
      <status>OK</status>
      <result>
       <type>route</type>
       <formatted_address>Taiwan, New Taipei City, 101縣道</formatted_address>
       <address_component>
        <long_name>101縣道</long_name>
        <short_name>101縣道</short_name>
        <type>route</type>
       </address_component>
       <address_component>
        <long_name>New Taipei City</long_name>
        <short_name>New Taipei City</short_name>
        <type>administrative_area_level_2</type>
        <type>political</type>
       </address_component>
       <address_component>
        <long_name>Taiwan</long_name>
        <short_name>TW</short_name>
        <type>country</type>
        <type>political</type>
       </address_component>
       <geometry>
        <location>
         <lat>25.2012026</lat>
http://maps.google.com/maps/geo?q=台北101

   {
       "name": "台北101",
       "Status": {
          "code": 200,
          "request": "geocode"
       },
       "Placemark": [ {
          "id": "p1",
          "address": "Taiwan, New Taipei City, 101縣道",
          "AddressDetails": {
        "Accuracy" : 6,
        "Country" : {
            "AdministrativeArea" : {
               "AdministrativeAreaName" : "新北市",
               "Thoroughfare" : {
                  "ThoroughfareName" : "101縣道"
               }




http://maps.google.com/maps/geo?q=台北101&output=csv

   200,6,25.2012026,121.4937590
Location-based iPhone Implementation
Hello Location




                 - get user current location
                 - show a map
                 - show current location
                 - show location information
Hello Map




            - add an annotation on a map
            - add title and subtitle on this
            annotation
Hello Address




                - query an address using google
                geolocation api
                - show the result on the map

More Related Content

PDF
Keeping Track of Moving Things: MapKit and CoreLocation in Depth
PDF
Swift Map
KEY
Introduction to MapKit
PDF
Getting Oriented with MapKit: Everything you need to get started with the new...
PDF
SwiftGirl20170904 - Apple Map
PDF
Games 3 dl4-example
PPT
Java3 d 1
PDF
CoreLocation (iOS) in details
Keeping Track of Moving Things: MapKit and CoreLocation in Depth
Swift Map
Introduction to MapKit
Getting Oriented with MapKit: Everything you need to get started with the new...
SwiftGirl20170904 - Apple Map
Games 3 dl4-example
Java3 d 1
CoreLocation (iOS) in details

Similar to Iphone course 2 (20)

PDF
Pioc
KEY
Objective-Cひとめぐり
ZIP
PDF
Best Practices for Effectively Running dbt in Airflow
PDF
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
PDF
Webエンジニアから見たiOS5
PDF
Gephi Toolkit Tutorial
PDF
Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
ODP
Qt Workshop
PPTX
AngularJS Internal
PPTX
AngularJS Architecture
PDF
angular fundamentals.pdf
PDF
303 TANSTAAFL: Using Open Source iPhone UI Code
PPT
Building a p2 update site using Buckminster
PDF
Maximilian Michels – Google Cloud Dataflow on Top of Apache Flink
PDF
The 2016 Android Developer Toolbox [NANTES]
PDF
Map kit light
PPTX
Fact, Fiction, and FP
PDF
Spring boot
Pioc
Objective-Cひとめぐり
Best Practices for Effectively Running dbt in Airflow
Hızlı Cocoa Geliştirme (Develop your next cocoa app faster!)
Webエンジニアから見たiOS5
Gephi Toolkit Tutorial
Core Location and Map Kit: Bringing Your Own Maps [Voices That Matter: iPhone...
Qt Workshop
AngularJS Internal
AngularJS Architecture
angular fundamentals.pdf
303 TANSTAAFL: Using Open Source iPhone UI Code
Building a p2 update site using Buckminster
Maximilian Michels – Google Cloud Dataflow on Top of Apache Flink
The 2016 Android Developer Toolbox [NANTES]
Map kit light
Fact, Fiction, and FP
Spring boot
Ad

More from Janet Huang (13)

PDF
Transferring Sensing to a Mixed Virtual and Physical Experience
PDF
Collecting a Image Label from Crowds Using Amazon Mechanical Turk
PDF
Art in the Crowd
PDF
How to Program SmartThings
PDF
Designing physical and digital experience in social web
PDF
Of class3
PDF
Of class2
PDF
Of class1
PDF
Iphone course 3
PDF
Iphone course 1
PDF
The power of example
PDF
Responsive web design
PDF
Openframworks x Mobile
Transferring Sensing to a Mixed Virtual and Physical Experience
Collecting a Image Label from Crowds Using Amazon Mechanical Turk
Art in the Crowd
How to Program SmartThings
Designing physical and digital experience in social web
Of class3
Of class2
Of class1
Iphone course 3
Iphone course 1
The power of example
Responsive web design
Openframworks x Mobile
Ad

Recently uploaded (20)

PDF
August Patch Tuesday
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
Approach and Philosophy of On baking technology
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
TLE Review Electricity (Electricity).pptx
PPTX
1. Introduction to Computer Programming.pptx
PPTX
Tartificialntelligence_presentation.pptx
PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PPTX
A Presentation on Touch Screen Technology
PDF
1 - Historical Antecedents, Social Consideration.pdf
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PPTX
A Presentation on Artificial Intelligence
PPTX
Chapter 5: Probability Theory and Statistics
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
project resource management chapter-09.pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
August Patch Tuesday
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Group 1 Presentation -Planning and Decision Making .pptx
Approach and Philosophy of On baking technology
Univ-Connecticut-ChatGPT-Presentaion.pdf
TLE Review Electricity (Electricity).pptx
1. Introduction to Computer Programming.pptx
Tartificialntelligence_presentation.pptx
A comparative study of natural language inference in Swahili using monolingua...
Assigned Numbers - 2025 - Bluetooth® Document
A Presentation on Touch Screen Technology
1 - Historical Antecedents, Social Consideration.pdf
cloud_computing_Infrastucture_as_cloud_p
A comparative analysis of optical character recognition models for extracting...
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
A Presentation on Artificial Intelligence
Chapter 5: Probability Theory and Statistics
Encapsulation_ Review paper, used for researhc scholars
project resource management chapter-09.pdf
NewMind AI Weekly Chronicles - August'25-Week II

Iphone course 2

  • 1. iPhone Application Development II Janet Huang 2011/11/30
  • 2. Today’s topic • Model View Control • Protocol, Delegation, Target/Action • Location in iPhone • CoreLocation • MapKit • Location-based iPhone Application
  • 3. MVC should did will target controller outlet count Notification de data da & KVO le ta ga action te so urc es model view
  • 4. IBOutlet & IBAction target action controller view outlet #import <UIKit/UIKit.h> @interface HelloViewController : UIViewController { IBOutlet UILabel* display; } - (IBAction)pressButton:(id)sender; @end Interface Builder ViewController
  • 5. Delegation pattern delegate delegate delegator (helper object)
  • 6. class RealPrinter { // the "delegate" void print() { System.out.print("something"); } } class Printer { // the "delegator" RealPrinter p = new RealPrinter(); // create the delegate void print() { p.print(); // delegation } } public class Main { // to the outside world it looks like Printer actually prints. public static void main(String[] args) { Printer printer = new Printer(); printer.print(); } } java simple example
  • 7. interface I { void f(); void g(); } class A implements I { public void f() { System.out.println("A: doing f()"); } public void g() { System.out.println("A: doing g()"); } } class B implements I { public void f() { System.out.println("B: doing f()"); } public void g() { System.out.println("B: doing g()"); } } class C implements I { // delegation I i = new A(); public void f() { i.f(); } public void g() { i.g(); } // normal attributes public void toA() { i = new A(); } public void toB() { i = new B(); } } public class Main { public static void main(String[] args) { C c = new C(); c.f(); // output: A: doing f() c.g(); // output: A: doing g() c.toB(); c.f(); // output: B: doing f() c.g(); // output: B: doing g() } } java complex example
  • 8. @protocol I <NSObject> -(void) f; -(void) g; @end @interface A : NSObject <I> { } // constructor @end -(id)init { @implementation A if (self = [super init]) { i = [[A alloc] init]; } -(void) f { NSLog(@"A: doing f"); } return self; -(void) g { NSLog(@"A: doing g"); } } @end // destructor @interface B : NSObject <I> { } -(void)dealloc { [i release]; [super dealloc]; } @end @end @implementation B -(void) f { NSLog(@"B: doing f"); } int main (int argc, const char * argv[]) { -(void) g { NSLog(@"B: doing g"); } NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] @end init]; C *c = [[C alloc] init]; @interface C : NSObject <I> { [c f]; // output: A: doing f id<I> i; // delegation [c g]; // output: A: doing g } [c toB]; -(void) toA; [c f]; // output: B: doing f -(void) toB; [c g]; // output: B: doing g @end [c release]; [pool drain]; @implementation C return 0; -(void) f { [i f]; } } -(void) g { [i g]; } -(void) toA { [i release]; i = [[A alloc] init]; } -(void) toB { [i release]; i = [[B alloc] init]; }
  • 9. Delegation • Delegate: a helper object can execute a task for the delegator • Delegator: delegate a task to the delegate delegate CLLocationManagerDelegate MyCoreLocationController the delegator the delegate (declare methods) (implement methods) @interface MyCoreLocationController : NSObject <CLLocationManagerDelegate> protocol
  • 15. Location in iPhone • Core Location • framework for specifying location on the planet • MapKit • graphical toolkit for displaying locations on the planet
  • 16. CoreLocation • A frameworks to manage location and heading • CLLocation (basic object) • CLLocationManager • CLHeading • No UI • How to get CLLocation? • use CLLocationManager
  • 17. CoreLocation • Where is the location? (approximately) @property (readonly) CLLocationCoordinate2D coordinate; typedef { CLLocationDegrees latitude; CLLocationDegrees longitude; } CLLocationCoordinate2D; //meters A negative value means “below sea level.” @property(readonly)CLLocationDistancealtitude;
  • 18. CoreLocation • How does it know the location? • GPS • Wifi • Cell network • The more accurate the technology, the more power it costs
  • 19. CLLocationManager • General approach • Check to see if the hardware you are on/user supports the kind of location updating you want. • Create a CLLocationManager instance and set a delegate to receive updates. • Configure the manager according to what kind of location updating you want. • Start the manager monitoring for location changes.
  • 20. CoreLocation • Accuracy-based continuous location monitoring @propertyCLLocationAccuracydesiredAccuracy; @property CLLocationDistance distanceFilter; • Start the monitoring - (void)startUpdatingLocation; - (void)stopUpdatingLocation; • Get notified via the CLLocationManager’s delegate - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;
  • 21. MapKit • Display a map • Show user location • Add annotations on a map
  • 22. MKMapView • 2 ways to create a map • create with alloc/init • drag from Library in Interface builder • MKAnnotation
  • 23. MKMapView • Controlling the region the map is displaying @property MKCoordinateRegion region; typedef struct { CLLocationCoordinate2D center; MKCoordinateSpan span; } MKCoordinateRegion; typedef struct { CLLocationDegrees latitudeDelta; CLLocationDegrees longitudeDelta; } // animated version - (void)setRegion:(MKCoordinateRegion)region animated:(BOOL)animated; • Can also set the center point only @property CLLocationCoordinate2D centerCoordinate; - (void)setCenterCoordinate:(CLLocationCoordinate2D)center animated:(BOOL)animated;
  • 24. MKAnnotation How to add an annotation on a map? - implement a customized annotation using MKAnnotation protocol @protocol MKAnnotation <NSObject> @property (readonly) CLLocationCoordinate2D coordinate; @optional @property (readonly) NSString *title; @property (readonly) NSString *subtitle; @end typedef { CLLocationDegrees latitude; CLLocationDegrees longitude; } CLLocationCoordinate2D; - add annotation to MKMapView [mapView addAnnotation:myannotation];
  • 25. #import <Foundation/Foundation.h> #import <MapKit/MapKit.h> @interface MyAnnotation : NSObject <MKAnnotation> { CLLocationCoordinate2D coordinate; NSString * title; NSString * subtitle; } @property (nonatomic, assign) CLLocationCoordinate2D coordinate; @property (nonatomic, copy) NSString * title; @property (nonatomic, copy) NSString * subtitle; - (id)initWithCoordinate:(CLLocationCoordinate2D)coord; @end MyAnnotation.h #import "MyAnnotation.h" @implementation MyAnnotation @synthesize coordinate; @synthesize title; @synthesize subtitle; - (id)initWithCoordinate:(CLLocationCoordinate2D)coord { self = [super init]; if (self) { coordinate = coord; } return self; } - (void) dealloc { [title release]; ! [subtitle release]; [super dealloc]; } @end MyAnnotation.m
  • 26. Google Map API A geolocation api request: http://maps.googleapis.com/maps/api/geocode/output?parameters https://maps.googleapis.com/maps/api/geocode/output?parameters URL parameters: - address (required) - latlng (required) - sensor (required) - bounds - region - language http://code.google.com/apis/maps/documentation/geocoding/
  • 27. http://maps.googleapis.com/maps/api/geocode/json?address=台北 101&sensor=true { "results" : [ { "address_components" : [ { "long_name" : "101縣道", "short_name" : "101縣道", "types" : [ "route" ] }, { "long_name" : "New Taipei City", "short_name" : "New Taipei City", "types" : [ "administrative_area_level_2", "political" ] }, { "long_name" : "Taiwan", "short_name" : "TW", "types" : [ "country", "political" ] } ], "formatted_address" : "Taiwan, New Taipei City, 101縣道", "geometry" : { "bounds" : { "northeast" : { "lat" : 25.26163510, "lng" : 121.51636480 }, "southwest" : { "lat" : 25.17235040, "lng" : 121.44038660
  • 28. http://maps.googleapis.com/maps/api/geocode/xml?address= 台北101&sensor=true <?xml version="1.0" encoding="UTF-8"?> <GeocodeResponse> <status>OK</status> <result> <type>route</type> <formatted_address>Taiwan, New Taipei City, 101縣道</formatted_address> <address_component> <long_name>101縣道</long_name> <short_name>101縣道</short_name> <type>route</type> </address_component> <address_component> <long_name>New Taipei City</long_name> <short_name>New Taipei City</short_name> <type>administrative_area_level_2</type> <type>political</type> </address_component> <address_component> <long_name>Taiwan</long_name> <short_name>TW</short_name> <type>country</type> <type>political</type> </address_component> <geometry> <location> <lat>25.2012026</lat>
  • 29. http://maps.google.com/maps/geo?q=台北101 { "name": "台北101", "Status": { "code": 200, "request": "geocode" }, "Placemark": [ { "id": "p1", "address": "Taiwan, New Taipei City, 101縣道", "AddressDetails": { "Accuracy" : 6, "Country" : { "AdministrativeArea" : { "AdministrativeAreaName" : "新北市", "Thoroughfare" : { "ThoroughfareName" : "101縣道" } http://maps.google.com/maps/geo?q=台北101&output=csv 200,6,25.2012026,121.4937590
  • 31. Hello Location - get user current location - show a map - show current location - show location information
  • 32. Hello Map - add an annotation on a map - add title and subtitle on this annotation
  • 33. Hello Address - query an address using google geolocation api - show the result on the map