To boldly go
where no man
  has gone
   before:
Exploring Geo
 in iPhone &
   Android

 Apr 1, 2010 Thu
 2:50 PM San Jose
To boldly go where no man
     has gone before:
Exploring Geo in iPhone & Android




   Stardate: -312751.7313546423
Three Years Ago
         Jan 2007
Stardate: -315974.3150684931
Widescreen iPod with touch controls
    Stardate: -315974.3150684931
Revolutionary mobile phone
Stardate: -315974.3150684931
Breakthrough internet communicator
    Stardate: -315974.3150684931
iPod       Phone       Internet



Stardate: -315974.3150684931
iPhone

Stardate: -315974.3150684931
Chief Science Officer




   Stardate: -314000
Data
              Data Communication
Portable
Sensing      Analysis   s

           Stardate: -314000
Tricorder

  Stardate: -314000
iPhone

Stardate: -315974.3150684931
Tricorder

  Stardate: -314000
Tricorder             iPhone
      Stardate: -314000
Locator Scanner Compass



Recorder Sensor Search



 Text    Data      Voice
    Stardate: -314000
Phone          Camera
                         (Audio)      (Photo / Video)
         GPS
        (Geo)
    Magentometer
  ...
Phone         Camera
                         (Audio)     (Photo / Video)
         GPS
        (Geo)
    Magentometer
    ...
iPhone SDK




Xcode           Interface Builder




        Data Analysis
Phone          Camera
                         (Audio)      (Photo / Video)
         GPS
        (Geo)
    Magentometer
  ...
Stardate: -315974.3150684931
MapKit      Core
           Location



iPhone SDK Frameworks
iPhone SDK Frameworks


        Cocoa Touch Layer

           Media Layer

        Core Services Layer

          Core OS ...
iPhone SDK Frameworks


        Cocoa Touch Layer
              Map Kit



           Media Layer

        Core Services L...
CLLocation Manager
        CLLocation
        CLHeading

Core Location Framework: Class
UIViewController Interface
                   CLLocationManager




#import <CoreLocation/CoreLocation.h>
@interface GetLo...
ViewController Method
                    CLLocationManager




// Create the manager object
self.locationManager = [[[CLL...
CLLocation Class
                Constants
              CLLocationDegrees

           CLLocationCoordinate2D

           ...
Accuracy Constants
                                 CLLocation Class


                    locationManager.desiredAccuracy...
CLLocation Class
                        Constants
                      CLLocationDegrees

Delivers a latitude or longitu...
CLLocation Class
                       Constants
                     CLLocationDirection

Delivers a direction that is m...
Clockwise




CCLocationDirection
CLLocation Class
                 Properties
                    altitude

                  coordinate

                 ...
Read-Only
                    altitude

                  coordinate

                    course

              horizontal...
Measurement Units
                altitude (meters)

                  coordinate

                course (degrees)

     ...
CLLocation Manager
        CLLocation
        CLHeading

Core Location Framework: Class
CLLocationManager
                       Core Location



        Create a CLLocationManager object to
               get ...
CLLocationManager
                  Class
                   Properties

               headingAvailable

                ...
CLLocationManager
                               Core Location



if (locationManager.headingAvailable == NO) {
      self...
CLLocation Manager
        CLLocation
        CLHeading

Core Location Framework: Class
CLHeading
                                 Core Location




- (void)locationManager:(CLLocationManager *)manager
didUpdat...
MapKit      Core
           Location



iPhone SDK Frameworks
MKAnnotationView      MKPlacemark
MKMapView             MKReverseGeocoder
MKPinAnnotationView   MKUserLocation



       M...
MKReverseGeocoder

         MKReverseGeocoder offers services to
          convert a map coordinate (latitude &
        Lo...
MKReverseGeocoder
           Each app is limited to amount
           of reverse geocoding
           Send one reverse-geo...
MKAnnotationView      MKPlacemark
MKMapView             MKReverseGeocoder
MKPinAnnotationView   MKUserLocation



       M...
MKMapView Class
               Properties
     annotations            scrollEnabled

annotationsVisibleRect   selectedAnno...
MKMapView Class
                        MKMapType




    It delivers the type of map to display.



  MKMapTypeStandard
 ...
MKAnnotationView      MKPlacemark
MKMapView             MKReverseGeocoder
MKPinAnnotationView   MKUserLocation



       M...
MKAnnotationView Class
         Properties


  annotation               image

 calloutOffset    leftCalloutAccessoryView
...
MKAnnotationView      MKPlacemark
MKMapView             MKReverseGeocoder
MKPinAnnotationView   MKUserLocation



       M...
MKAnnotationView Class
            Properties
                         Properties

                      animatesDrop

   ...
iPhone VS Android
Google    Location
  Maps     Services
External
Library



    Android SDK
Classes



  Address              GpsStatus

  Criteria             Location

 Geocoder          LocationManager

GpsSatel...
Location Class Methods


getAccuracy()

getAltitude()         getLongitude()

getBearing()           getProvider()

 getEx...
Google    Location
  Maps     Services
External
Library



    Android SDK
Google Maps
        External Library


Use Google APIs add-on
Download Maps external library
Must register with Google Map...
AndroidManifest.xml
 Declare Maps Library
 Request internet permission
 Hide title bar

<uses-library
android:name=”com.go...
res/layout/main.xml


<?xml version=”1.0” encoding=”utf-8”?>
<com.google.android.maps.MapView
    xmlns:android=”http://sc...
+      HelloMaps.java
public class HelloMaps extends MapActivity

@Override protected boolean isRouteDisplayed() {
return ...
PhoneGap       Titanium
                     Mobile

3rd Party SDK: HTML / CSS / JavaScript
function run() {
             var win = function(position) {                // Grab
coordinates object from the Position o...
PhoneGap       Titanium
                     Mobile

3rd Party SDK: HTML / CSS / JavaScript
JavaScript Library
                                geolocation.js
                            Corresponding to iphone SDK:...
JavaScript Library
                     geolocation.js

                Corresponding to iphone SDK:
             Core Loc...
JavaScript Library
                      map_view.js

        Corresponding to iphone SDK: MapKit Framework




var mapvie...
Chief Science Officer




   Stardate: -314000
01.12.201 Earthdate




 Stardate: -312969.2922374429
Haiti 2010 Earthquake

   Stardate: -314000
01.27.201 Earthdate




 Stardate: -312927.6255707762
Medical Tricorder
STANFORD UNIVERSITY
       School of Engineering (EE46)


 Engineering For Good
Save The World
     Have Fun Doing It
STANFORD UNIVERSITY
         School of Engineering



  Engineering For Good
Save The World and Have Fun Doing It
        ...
Save The World

     Malaria
     TB
     HIV
Augmented Reality (AR)
   Camera
(Photo / Video)

                     Bar Code



                                   Opti...
Detect Diseases




      Scanner: Life forms
Identify Patients




  Scanner: Life forms
Medical Tricorder
Medical Tricorder
Medical Tricorder
The Future Begins




Malaria
TB
HIV
The Future Begins
         Jan 12, 2010
    Haiti Earthquake 7.0M
         Feb 26, 2010
    Japan Earthquake 7.3M
        ...
Stanford                      Global Health
        EE46                     Research Foundation




http://zwazosms.agili...
Medical Tricorder
http://www.slideshare.net/bess.ho




   Q&A
Upcoming SlideShare
Loading in...5
×

Boldly Go Where No Man Has Gone Before. Explore Geo on iPhone & Android

3,264

Published on

A Star Trek fan developer will tell her story how she learn Objective-C, Cocoa-Touch Framework, MVC model, CoreLocation Framework to build her first two Tricorder apps “Sound Tricorder” and “Doctor Tricorder” in Apple App Store. She will explain mapping options in iphone SDK. She will explain how to use 3rd party SDK framework to detect geographic coordinates in both iPhone and Android app. Surely this will be a fun entertaining way to learn Geo in mobile.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,264
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide










































































































































































  • Transcript of "Boldly Go Where No Man Has Gone Before. Explore Geo on iPhone & Android"

    1. 1. To boldly go where no man has gone before: Exploring Geo in iPhone & Android Apr 1, 2010 Thu 2:50 PM San Jose
    2. 2. To boldly go where no man has gone before: Exploring Geo in iPhone & Android Stardate: -312751.7313546423
    3. 3. Three Years Ago Jan 2007 Stardate: -315974.3150684931
    4. 4. Widescreen iPod with touch controls Stardate: -315974.3150684931
    5. 5. Revolutionary mobile phone Stardate: -315974.3150684931
    6. 6. Breakthrough internet communicator Stardate: -315974.3150684931
    7. 7. iPod Phone Internet Stardate: -315974.3150684931
    8. 8. iPhone Stardate: -315974.3150684931
    9. 9. Chief Science Officer Stardate: -314000
    10. 10. Data Data Communication Portable Sensing Analysis s Stardate: -314000
    11. 11. Tricorder Stardate: -314000
    12. 12. iPhone Stardate: -315974.3150684931
    13. 13. Tricorder Stardate: -314000
    14. 14. Tricorder iPhone Stardate: -314000
    15. 15. Locator Scanner Compass Recorder Sensor Search Text Data Voice Stardate: -314000
    16. 16. Phone Camera (Audio) (Photo / Video) GPS (Geo) Magentometer (Compass) Accelerometer (XZY) Touch (Device Orientation) Wireless Bluetooth Data Plan / WiFi (File) (Web / Email) External Accessory Microphone SMS (Data) (Audio) (Data) iPhone’s Anatomy
    17. 17. Phone Camera (Audio) (Photo / Video) GPS (Geo) Magentometer (Compass) Accelerometer (XZY) Touch (Device Orientation) Wireless Bluetooth Data Plan / WiFi (File) (Web / Email) External Accessory Microphone SMS (Data) (Audio) (Data) Portable Sensors
    18. 18. iPhone SDK Xcode Interface Builder Data Analysis
    19. 19. Phone Camera (Audio) (Photo / Video) GPS (Geo) Magentometer (Compass) Accelerometer (XZY) Touch (Device Orientation) Wireless Bluetooth Data Plan / WiFi (File) (Web / Email) External Accessory Microphone SMS (Data) (Audio) (Data) Data Communications
    20. 20. Stardate: -315974.3150684931
    21. 21. MapKit Core Location iPhone SDK Frameworks
    22. 22. iPhone SDK Frameworks Cocoa Touch Layer Media Layer Core Services Layer Core OS Layer iPhone SDK Frameworks
    23. 23. iPhone SDK Frameworks Cocoa Touch Layer Map Kit Media Layer Core Services Layer Core Location Core OS Layer iPhone SDK Frameworks
    24. 24. CLLocation Manager CLLocation CLHeading Core Location Framework: Class
    25. 25. UIViewController Interface CLLocationManager #import <CoreLocation/CoreLocation.h> @interface GetLocationViewController : UIViewController <CLLocationManagerDelegate> { CLLocationManager *locationManager; CLLocation *bestEffortAtLocation; } @property (nonatomic, retain) CLLocationManager *locationManager; @property (nonatomic, retain) CLLocation *bestEffortAtLocation; Core Services Layer: Core Location
    26. 26. ViewController Method CLLocationManager // Create the manager object self.locationManager = [[[CLLocationManager alloc] init] autorelease]; locationManager.delegate = self; locationManager.desiredAccuracy = [[setupInfo objectForKey:kSetupInfoKeyAccuracy] doubleValue]; [locationManager startUpdatingLocation]; Core Services Layer: Core Location
    27. 27. CLLocation Class Constants CLLocationDegrees CLLocationCoordinate2D CCLocationAccuracy Accuracy Constants CLLocationSpeed CLLocationDirection Core Services Layer: Core Location
    28. 28. Accuracy Constants CLLocation Class locationManager.desiredAccuracy is the most important property of Location Manager. It determines the amount of power it consumed. Constant values are to specify the accuracy of a location. kCLLocationAccuracyBest Best kCLLocationAccuracyNearestTenMete 10 Meters rs 100 Meters kCLLocationAccuracyHundredMeters 1000 Meters kCLLocationAccuracyKilometer 3000 Meters kCLLocationAccuracyThreeKilometers Core Services Layer: Core Location
    29. 29. CLLocation Class Constants CLLocationDegrees Delivers a latitude or longitude value specified in degrees. Data type is double. CLLocationSpeed Delivers the speed at which the device is moving in meters per second. Data type is double. Core Services Layer: Core Location
    30. 30. CLLocation Class Constants CLLocationDirection Delivers a direction that is measured in degrees and relative to true north. Data type is double. North is 0 degrees East is 90 degrees South is 180 degrees Any “-” value indicates an invalid direction Core Services Layer: Core Location
    31. 31. Clockwise CCLocationDirection
    32. 32. CLLocation Class Properties altitude coordinate course horizontalAccuracy speed timestamp verticalAccuracy Core Services Layer: Core Location
    33. 33. Read-Only altitude coordinate course horizontalAccuracy speed timestamp verticalAccuracy Core Services Layer: Core Location
    34. 34. Measurement Units altitude (meters) coordinate course (degrees) horizontalAccuracy (meters) speed (meters per sec) timestamp (NSDate) verticalAccuracy (meters) Core Services Layer: Core Location
    35. 35. CLLocation Manager CLLocation CLHeading Core Location Framework: Class
    36. 36. CLLocationManager Core Location Create a CLLocationManager object to get heading by invoking [CLLocationManager startUpdatingHeading]. iPhone 3GS contains a magnetometer - a magnetic field detector. It displays the raw x, y, and z magnetometer values. Magnitude of the magnetic field is computed in strength. Core Services Layer: Core Location
    37. 37. CLLocationManager Class Properties headingAvailable headingFilter Instance Methods startUpdatingHeading stopUpdatingHeading Constants Heading Filter Value Core Services Layer: Core Location
    38. 38. CLLocationManager Core Location if (locationManager.headingAvailable == NO) { self.locationManager = nil; // No compass is available } else { // heading service configuration locationManager.headingFilter = kCLHeadingFilterNone; // setup delegate callbacks locationManager.delegate = self; // start the compass [locationManager startUpdatingHeading]; } } Core Services Layer: Core Location
    39. 39. CLLocation Manager CLLocation CLHeading Core Location Framework: Class
    40. 40. CLHeading Core Location - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)heading { // Update the labels with the raw x, y, and z values. [xLabel setText:[NSString stringWithFormat:@"%.1f", heading.x]]; [yLabel setText:[NSString stringWithFormat:@"%.1f", heading.y]]; [zLabel setText:[NSString stringWithFormat:@"%.1f", heading.z]]; } MapKit Framework: Class
    41. 41. MapKit Core Location iPhone SDK Frameworks
    42. 42. MKAnnotationView MKPlacemark MKMapView MKReverseGeocoder MKPinAnnotationView MKUserLocation MapKit Framework: Class
    43. 43. MKReverseGeocoder MKReverseGeocoder offers services to convert a map coordinate (latitude & Longitude) to info such as country, city, or street. It works with a network-based map service to look up placemark information for a specified coordinate value. Cocoa Touch Layer: MapKit Framework
    44. 44. MKReverseGeocoder Each app is limited to amount of reverse geocoding Send one reverse-geocoding request for any one user action Reuse the results from initial request Suggest not to send one reverse-geocode request per minute Cocoa Touch Layer: MapKit Framework
    45. 45. MKAnnotationView MKPlacemark MKMapView MKReverseGeocoder MKPinAnnotationView MKUserLocation MapKit Framework: Class
    46. 46. MKMapView Class Properties annotations scrollEnabled annotationsVisibleRect selectedAnnotations centerCoordinate showsUserLocation delegate userLocation mapType userLocationVisible region zoomEnabled Cocoa Touch Layer: MapKit Framework
    47. 47. MKMapView Class MKMapType It delivers the type of map to display. MKMapTypeStandard MKMapTypeSatellite MKMapTypeHybrid Cocoa Touch Layer: MapKit Framework
    48. 48. MKAnnotationView MKPlacemark MKMapView MKReverseGeocoder MKPinAnnotationView MKUserLocation MapKit Framework: Class
    49. 49. MKAnnotationView Class Properties annotation image calloutOffset leftCalloutAccessoryView canShowCallout reuseIdentifier centerOffset rightCalloutAccessoryView enabled selected Cocoa Touch Layer: MapKit Framework
    50. 50. MKAnnotationView MKPlacemark MKMapView MKReverseGeocoder MKPinAnnotationView MKUserLocation MapKit Framework: Class
    51. 51. MKAnnotationView Class Properties Properties animatesDrop pinColor Constants MKPinAnnotationColor MKPinAnnotationColorRed (Destination Points) MKPinAnnotationColorGreen (Starting Points) MKPinAnnotationColorPurple (User-specified Points) Cocoa Touch Layer: MapKit Framework
    52. 52. iPhone VS Android
    53. 53. Google Location Maps Services External Library Android SDK
    54. 54. Classes Address GpsStatus Criteria Location Geocoder LocationManager GpsSatellite LocationProvider package: android.location
    55. 55. Location Class Methods getAccuracy() getAltitude() getLongitude() getBearing() getProvider() getExtras() getSpeed() getLatitude() getTime() package: android.location
    56. 56. Google Location Maps Services External Library Android SDK
    57. 57. Google Maps External Library Use Google APIs add-on Download Maps external library Must register with Google Maps service Obtain a Maps API Key Android SDK
    58. 58. AndroidManifest.xml Declare Maps Library Request internet permission Hide title bar <uses-library android:name=”com.google.android.maps” /> <uses-permission android:name=”android.permission.INTERNET” /> <activity android:name=”.HelloMaps” android:label=”@string/app_name” android:theme=”@android:style/Theme.NoTitleBar”> Android SDK
    59. 59. res/layout/main.xml <?xml version=”1.0” encoding=”utf-8”?> <com.google.android.maps.MapView xmlns:android=”http://schmas.android.com/ apk/res/android” android:id=@+id/mapview” android:layout_width=”fill_parent” android:layout_height=”fill_parent” android:clickable=”true” android:apiKey=”Map API Key” /> Android SDK
    60. 60. + HelloMaps.java public class HelloMaps extends MapActivity @Override protected boolean isRouteDisplayed() { return false; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } MapView mapView = (MapView) findViewById(R.id.mapview); mapView.setBuiltInZoomControls(true); Android SDK
    61. 61. PhoneGap Titanium Mobile 3rd Party SDK: HTML / CSS / JavaScript
    62. 62. function run() { var win = function(position) { // Grab coordinates object from the Position object passed into success callback. var coords = position.coords; // Call for static google maps data - make sure you use your own Google Maps API key! var url = "http://maps.google.com/maps/api/ staticmap?center=" + coords.latitude + "," + coords.longitude + "&zoom=13&size=320x480&maptype=roadmap&key=MyGoogleMa psAPIKey&sensor=true"; document.getElementById('map').setAttribute('src',url); }; var fail = function(e) { alert('Can't retrieve position.nError: ' + e); }; navigator.geolocation.getCurrentPosition(win, fail); } 3rd Party SDK: PhoneGap
    63. 63. PhoneGap Titanium Mobile 3rd Party SDK: HTML / CSS / JavaScript
    64. 64. JavaScript Library geolocation.js Corresponding to iphone SDK: Core Location Framework: CLLocationManager & CLLocation var longitude = e.coords.longitude; var latitude = e.coords.latitude; var altitude = e.coords.altitude; var heading = e.coords.heading; var accuracy = e.coords.accuracy; var speed = e.coords.speed; var timestamp = e.coords.timestamp; var altitudeAccuracy = e.coords.altitudeAccuracy; 3rd Party SDK: Titanium
    65. 65. JavaScript Library geolocation.js Corresponding to iphone SDK: Core Location Framework: CLHeading var x = e.heading.x; var y = e.heading.y; var z = e.heading.z; var magneticHeading = e.heading.magneticHeading; var accuracy = e.heading.accuracy; var trueHeading = e.heading.trueHeading; var timestamp = e.heading.timestamp; 3rd Party SDK: Titanium
    66. 66. JavaScript Library map_view.js Corresponding to iphone SDK: MapKit Framework var mapview = Titanium.Map.createView({ mapType: Titanium.Map.STANDARD_TYPE, region: {latitude:33.74511, longitude:-84.38993, latitudeDelta:0.01, longitudeDelta:0.01}, animate:true, regionFit:true, userLocation:true, annotations:[apple, atlanta] }); 3rd Party SDK: Titanium
    67. 67. Chief Science Officer Stardate: -314000
    68. 68. 01.12.201 Earthdate Stardate: -312969.2922374429
    69. 69. Haiti 2010 Earthquake Stardate: -314000
    70. 70. 01.27.201 Earthdate Stardate: -312927.6255707762
    71. 71. Medical Tricorder
    72. 72. STANFORD UNIVERSITY School of Engineering (EE46) Engineering For Good Save The World Have Fun Doing It
    73. 73. STANFORD UNIVERSITY School of Engineering Engineering For Good Save The World and Have Fun Doing It (EE 46)
    74. 74. Save The World Malaria TB HIV
    75. 75. Augmented Reality (AR) Camera (Photo / Video) Bar Code Optical Character Recognition QR Code (OCR) Scanner: 2D Objects
    76. 76. Detect Diseases Scanner: Life forms
    77. 77. Identify Patients Scanner: Life forms
    78. 78. Medical Tricorder
    79. 79. Medical Tricorder
    80. 80. Medical Tricorder
    81. 81. The Future Begins Malaria TB HIV
    82. 82. The Future Begins Jan 12, 2010 Haiti Earthquake 7.0M Feb 26, 2010 Japan Earthquake 7.3M Feb 27, 2010 Chile Earthquake 8.8M Mar 4, 2010 Taiwan Earthquake 6.4M Mar 15, 2010 Japan Earthquake 6.6M
    83. 83. Stanford Global Health EE46 Research Foundation http://zwazosms.agilityhoster.com/iphone/ http://www.ghrf.org Medical Tricorder
    84. 84. Medical Tricorder
    85. 85. http://www.slideshare.net/bess.ho Q&A

    ×