39
MAP APPLICATIONS

MAP APPLICATIONS. Location Service Two main LBS elements Location Manager: Provides hooks to the location-based services Location Providers: Each

Embed Size (px)

Citation preview

Page 1: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

MAP APPLICATIONS

Page 2: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Location Service

Two main LBS elements Location Manager: Provides hooks to the location-based

services Location Providers: Each of these represents a different

location-finding technology used to determine the device’s current location

Location Manager Obtain current location Track movement Set proximity alerts for areas Find available Location Providers

Location Providers Various location-finding technologies (GPS, Cellular network)

Page 3: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Android Software Stack

Page 4: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Global Positioning System (GPS)

Page 5: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Cell Tower Triangulation

An alternative method to determine the location of a cell phone is to estimate its distance to three nearby cell towers.

Distance of the phone to each antenna could be estimated based upon the lag time between the moment the tower sends a ping to the phone and receives the answering ping back.

Quite similar to the 2D-Trilateration Method.

Page 6: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Latitude & Longitude

Latitude in GPS-Decimal notation: +90.00000 (North) to -90.000000 (South) • Longitude GPS-Decimal notation: +180.000000 (East) to -180.000000 (West)

Page 7: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Latitude & Longitude

Page 8: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Android Location Classes

The Android API provides Location data based on a variety of methods including: Cell Tower Triangulation, and most commonly GPS chip readings.

GPS is the most common location provider on the Android based phones.

It offers the most accuracy.

Picture: Epson Infineon GPS (2.8 x2.9mm)

Page 9: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Android Location Classes

Page 10: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Location Class

A class representing a geographic location sensed at a particular time.

A location consists of a latitude and longitude, a UTC timestamp and optionally information on altitude, speed, and bearing.

Information specific to a particular provider or class of providers may be communicated to the application using getExtras, which returns a Bundle of key/value pairs.

Each provider will only provide those entries for which information is available.

Page 11: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Location Values Format

The three common formats:

There are sixty seconds in a minute (60" = 1') andThere are sixty minutes in a degree (60' = 1°).

DDD° MM' SS.S” 32° 18' 23.1" N 122° 36' 52.5" W

DDD° MM.MMM’ 32° 18.385' N 122° 36.875' W

DDD.DDDDD° 32.30642° N or +32.30642

122.61458° Wor -122.61458

Page 12: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Location Manager

This class provides access to the system location services.

These services allow applications1. To obtain periodic updates of the device's

geographical location,2. or to fire an application-specified Intent

when the device enters the proximity of a given geographical location.

String service_name = Context.LOCATION_SERVICE;LocationManager locationManager = (LocationManager) getSystemService(service_name)

Page 13: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

LocationProvider Class

An abstract superclass for location providers. A location provider supplies periodic reports on the

geographical location of the device. Each provider has a set of criteria under which it may be

used; for example, some providers require GPS hardware and visibility to a number

of satellites; others require the use of the cellular radio, or access to a specific carrier's network, or access to the internet.

They may also have different battery consumption characteristics or monetary costs to the user.

The Criteria class allows providers to be selected based on userspecified criteria.

Page 14: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

LocationProvider Class

Provider ReferenceString providerName = LocationManager.GPS_PROVIDER;

LocationProvider gpsProvider;

gpsProvider = locationManager.getProvider(providerName);

Common Location Providers: LocationManager.GPS_PROVIDER LocationManager.NETWORK_PROVIDER

Getting list of all providersboolean enabledOnly = true;

List<String> providers = locationManager.getProviders(enabledOnly);

Page 15: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Finding Location Providers Using Criteria

Provider with specific requirementsCriteria criteria = new Criteria();criteria.setAccuracy(Criteria.ACCURACY_COARSE);criteria.setPowerRequirement(Criteria.POWER_LOW);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setSpeedRequired(false);criteria.setCostAllowed(true);String bestProvider =

locationManager.getBestProvider(criteria, true);

To get all matching ProvidersList<String> matchingProviders =

locationManager.getProviders(criteria, false);

Page 16: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

LocationListener Class

Used for receiving notifications from the LocationManager when the location has changed.

These methods are called if the LocationListener has been registered with the location manager service using the method:

requestLocationUpdates (Provider, minTime, minDistance, LocationListener)

Page 17: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

LocationListener

String provider = LocationManager.GPS_PROVIDER;

int t = 5000; // milliseconds

int distance = 5; // meters

LocationListener myLocationListener = new LocationListener() {public void onLocationChanged(Location location) { // Update application based on

new location. }

public void onProviderDisabled(String provider) { // Update application if provider disabled. }

public void onProviderEnabled(String provider) { // Update application if provider enabled.}

public void onStatusChanged(String provider, int status, Bundle extras) {// Update application if provider hardware status changed.}

};

locationManager.requestLocationUpdates(provider, t, distance, myLocationListener);

Page 18: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

FINDING YOUR LOCATION

Reference Location ManagerString service_name = Context.LOCATION_SERVICE;

LocationManager locationManager = (LocationManager) getSystemService(service_name)

Permissions in Manifest<uses-permission

android:name="android.permission.ACCESS_FINE_LOCATION"/>

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

Last location “fix”String provider = LocationManager.GPS_PROVIDER;Location location =

locationManager.getLastKnownLocation(provider);

Page 19: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Example – Obtain Location from GPS

In this example we request GPS services and display latitude and longitude values on the UI.

Notes1) Observe the GPS chip is not a synchronous device that will

immediately respond to a “give me a GPS reading” call.2) In order to engineer a good solution that takes into

account the potential delays in obtaining location data: we place the UI in the main activity and the request for location call in a background service.

3) Remember the service runs in the same process space as the main activity, therefore for the sake of responsiveness:

we must place the logic for location data request in a separate parallel thread.

Page 20: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Example – Obtain Location from GPS

Page 21: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Geocoding

Geocoding lets you translate between street addresses and longitude/latitude map coordinates.

The geocoding lookups are done on the server, so your applications will require you to include an Internet uses-permission in your manifest, as shown here:

<uses-permission android:name="android.permission.INTERNET"/>

The Geocoder class provides access to two geocoding functions: Forward geocoding Finds the latitude and longitude of an

address Reverse geocoding Finds the street address for a given

latitude and longitude

Page 22: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Reverse Geocoding

location = locationManager.getLastKnownLocation (LocationManager.GPS_PROVIDER);

double latitude = location.getLatitude();double longitude = location.getLongitude();List<Address> addresses = null;Geocoder gc = new Geocoder(this,

Locale.getDefault());try {

addresses = gc.getFromLocation(latitude, longitude, 10);

} catch (IOException e) {}

Page 23: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Forward Geocoding

Geocoder fwdGeocoder = new Geocoder(this, Locale.US);

String streetAddress = "160 Riverside Drive, New York, New York";

List<Address> locations = null;

try {

locations = fwdGeocoder.getFromLocationName(streetAddress, 10);

} catch (IOException e) {}

Page 24: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Emulating GPS Location

Use DDMS > Emulator Control

Page 25: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Google Maps External Library Android uses the Google Maps External

Library to add mapping capabilities to your applications.

Google Maps External Library includes the com.google.android.maps package. The classes of this package offer built-in downloading, rendering, and caching of Maps tiles, as well as a variety of display options and controls.

The key class in the Maps package is com.google.android.maps.MapView, a subclass of ViewGroup.

The MapView provides an ideal user interface option for presenting geographical data.

Road View

Page 26: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

MapViews

MapViews support annotation using Overlays and by pinning Views to geographical locations.

The Maps external library is not part of the standard Android library, so it may not be present on some compliant Android-powered devices.

By default the Android SDK includes the Google APIs add-on, which in turn includes the Maps external library.

MapViews offer full programmatic control of the map display, letting you control the zoom, location, and display modes — including the option to display satellite, street, and traffic views.

Aerial View

Page 27: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Google Map Classes

MapView is the Map View control. MapActivity is the base class you extend to create a new

Activity that can include a Map View. MapActivity handles the application life cycle and background

service management required for displaying maps. Map Views are used only within MapActivity-derived Activities.

MapController is used to control the map, enabling you to set the center location and zoom levels.

Overlay is the class used to annotate your maps. MyLocationOverlay is a special Overlay that can be used to

display the current position and orientation of the device. ItemizedOverlays and OverlayItems are used together to

let you create a layer of map markers, displayed using Drawables and associated text.

Page 28: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Creating a Map-Based Activity Manifest XML

<uses-library android:name="com.google.android.maps"/><uses-permission android:name="android.permission.INTERNET"/>

Layout

<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent">

<com.google.android.maps.MapViewandroid:id="@+id/map_view"android:layout_width="fill_parent"android:layout_height="fill_parent"android:enabled="true"android:clickable="true"android:apiKey="mymapapikey"/>

</LinearLayout>

Page 29: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

MapActivity

Page 30: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Configuring and Using Map Views

Specifying how the map is displayed. mapView.setSatellite(true); mapView.setStreetView(true); mapView.setTraffic(true);

Querying the Map View. int maxZoom = mapView.getMaxZoomLevel(); GeoPoint center = mapView.getMapCenter(); int latSpan = mapView.getLatitudeSpan(); int longSpan = mapView.getLongitudeSpan();

• Optionally display the standard map zoom controls mapView.setBuiltInZoomControls(true);

Page 31: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Using the Map Controller

Use the Map Controller to pan and zoom a MapView. getController get a reference to a MapView’s controller.

MapController mapController = mapView.getController(); Map locations are represented by GeoPoint objects.

Double lat = 37.422006*1E6; Double lng = -122.084095*1E6; GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());

Re-center and zoom the Map. mapController.setCenter(point); mapController.setZoom(1); // 1=widest (or most distant),

21=tightest (nearest) view ‘‘jump’’ to a new location

mapController.animateTo(point);

Page 32: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Creating and Using Overlays Overlays enable you to add annotations and

click handling to MapViews. Each Overlay lets you draw 2D primitives,

including text, lines, images, etc. All the Overlays assigned to a Map View are

added as layers, with newer layers potentially obscuring older ones.

User clicks are passed through the stack until they are either handled by an Overlay or registered as clicks on the Map View itself.

Page 33: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Creating New Overlays

To add a new Overlay create a new class that extends Overlay. Override the draw method to draw the annotations you want to add,

and override onTap to react to user clicks

Page 34: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

The Projection class lets you translate between latitude/longitude coordinates (stored as GeoPoints) and x/y screen pixel coordinates (stored as Points).

A map’s Projection may change between subsequent calls to draw, so it’s good practice to get a new instance each time.

Projection projection = mapView.getProjection(); Use the fromPixel and toPixel methods to translate

from GeoPoints to Points and vice versa.Point myPoint = new Point();// To screen coordinatesprojection.toPixels(geoPoint, myPoint);// To GeoPoint location coordinatesprojection.fromPixels(myPoint.x, myPoint.y);

Page 35: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Drawing on the Overlay Canvas

Page 36: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Handling Map Tap Events

The onTap handler receives two parameters: A GeoPoint that contains the latitude/longitude of

the map location tapped The MapView that was tapped to trigger this event

@Overridepublic boolean onTap(GeoPoint point, MapView mapView) {

// Perform hit test to see if this overlay is handling the clickif ([ . . . perform hit test . . . ]) {

//[ . . . execute on tap functionality . . . ]return true;

}// If not handled return falsereturn false;

}

Page 37: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Adding and Removing Overlays Each MapView contains a list of Overlays

currently displayed. List<Overlay> overlays = mapView.getOverlays();

To add an Overlay onto a Map View, create a new instance of the Overlay and add it to the list

Good practice to call postInvalidate after you modify the list to update the changes on the map display

List<Overlay> overlays = mapView.getOverlays(); MyOverlay myOverlay = new MyOverlay(); overlays.add(myOverlay); mapView.postInvalidate(); projection.fromPixels(myPoint.x, myPoint.y);

Page 38: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

My Location Overlay

Special Overlay designed to show your current location and orientation on a MapView.

List<Overlay> overlays = mapView.getOverlays();

MyLocationOverlay myLocationOverlay = new MyLocationOverlay(this, mapView);

overlays.add(myLocationOverlay); Can display both your current location

(represented as a flashing blue marker) and your current orientation (shown as a compass on the map display).

myLocationOverlay.enableCompass(); myLocationOverlay.enableMyLocation();

Stopping the service myLocationOverlay.disableCompass(); myLocationOverlay.disableMyLocation();

Page 39: MAP APPLICATIONS. Location Service  Two main LBS elements  Location Manager: Provides hooks to the location-based services  Location Providers: Each

Google API Key

To use the Google Map service an API key is needed. The API key can obtained as follows for development/debugging application:1) Get debug.keystore file. You can find the location to the

file under “Default debug keystore” from: Windows ➪ Preferences ➪ Android ➪ build.

2) Use keytool tool to generate Certificate fingerprint (MD5). Use following command on command prompt

keytool -list -alias androiddebugkey -keystore <keystore_location>.keystore -storepass android -keypass android

3) Go to ‘Sign Up for the Android Maps API‘ page. 4) Put your Certificate fingerprint (MD5) 5) And get your API key for android GMap application.6) Replace “mymapapikey” in MapView layout item with your

API key.