MOBILE LOCATION-BASED APPS Lecture in University of Tartu Jaak Laineste, 13.10.2011 Part 1 LOCATION-BASED SERVICE OVERVIEW Background

• GIS/LBS experience 15 years in GIS/mapping, 10 years in LBS Mobile operator LBS in all over the world Nutiteq est. 2006 • Nutiteq and mobile development Part of Mobi Solutions group since 2009 J2ME, Android, BlackBerry, iPhone teams Major customer projects Location-Based Services

• Location-based: 80% of data • Service (or mobile application) • Mobile technologies (phones, networks) • Mobile positioning

• LBS is a technology, not application type Can be aspect of any application type Two meanings of LBS

• Old meaning (200x): Mobile Positioning – MPS User Interface: SMS, web, WAP, USSD, IVR

• Today’s LBS : (201x) smartphones with GPS, tablets mobile apps, web services, HTML5

Operator-based LBS

• Mobile Positioning Find location using mobile network Works with any mobile, no requirements Accuracy without GPS: 300m ... 30 km (~1 km avg) Can also use in-phone GPS / A-GPS Only operator can do • Typical services FriendFinder, Games Find Nearest Fleet Management • Recent trends Operators open APIs, including location There are aggregators: e.g. LocationLabs, Loc-Aid Popular LBS apps in smartphones

• Navigation Tomtom, Navigon, , Nokia etc. Also waze • Business around you reviews, events, classifieds etc Yelp, Loopt, Qype, Zvents, Eventful, Opentable etc • Transit and traffic info where available • Trapster • Social: Facebook checkins • Games: Foursquare

Un-successful applications

• friend tracking • track my location • location-based advertising • location-based alerts • augmented reality Hard problems

• GPS takes too much battery • GPS coverage and accuracy is bad No indoors • Maps are limited No indoors No walking level • Real needs are hard to estimate Successful apps

• Local is local • Content is important, and expensive • Understand topic pymwymi • There is no killer app but you can create killer service if you do the execution • Location is just a technology Aspect of an application, often not the core Part 2 GIS INTRODUCTION • Geographic With geographical dimension • Information • System Software, servers, computers • Wikipedia: a system designed to capture, store, manipulate, analyze, manage, and present all types of geographically referenced data. In the simplest terms, GIS is the merging of cartography, statistical analysis, and database technology GIS term „Classic“ GIS

• Started in early 1970’ies • Key companies, drivers ESRI, Intergraph, MapInfo, AutoDesk, Oracle Universities: • Key focus Desktop-GIS – special GIS tools Servers, client-server model • Expensive, specialized, heavy • Recent developments (from late 90ies) OGC standards: WMS, WFS, GML etc Neo-geo

• Web/Internet-based Cloud services • Free commercial tools Google: Maps, Earth, SketchUp, FusionTables etc Yahoo, Microsoft Bing, MapQuest • Open source software OSGeo.org: server, desktop, web • Open sourced data OpenStreetMap

Mobile LBS future

• Augmented Reality Issue: mobile sensors Needs powerful image processing • 3D 3D earth (2.5D) Buildings, textures etc • 360-degree view Issue: bandwidth • Walking/local/indoor maps Issue: content update is expensive • Your ideas ! GIS TECHNOLOGY AND DEVELOPMENT Why special approach

• Data is quite complex Two-dimensional Can be even 3D Complex relations Nice visualization is processing-hungry • Base maps Big datasets, different features • Specific data Dynamic, can be big etc

"It's a small world, but I wouldn't want to paint it.„

- Steven Wright Data in a single screen

Type – 4 bytes

Name – 100 bytes

Point on map – 16 bytes

Base map – 32+ (500+)KB 27 relations 205 ways (lines) 1920 points (x 16 b)

Checkins – 4 bytes

People – 4 bytes Geo basics

• Data models vector raster other • Coordinates Projections, coordinate systems

Data models

• Raster PNG for maps, lossless JPG for aerials GeoTIFF, coverages Key parameter: resolution, size • Vector Base primitives: points, lines, polygons Compounds: multi-point, multi-line, multi-polygon Attributes - text/boolean/numeric/binary etc Texts on map - labels from attributes Layer – same as „table“ in DB, „class“ in OOP Special vector: topological models, graphs

Other data models

• Elevation models DEM – Digital Elevation Model TIN - triangulated irregular network • 3D worlds Collada, X3D Google Earth Warehouse • Point clouds Lidar – laser measurements Hillshade from DEM TIN Point cloud GIS Layers GIS layers simplified

• One base layer Background map: Google, OpenStreetMap etc Raster-based • Overlay layer(s) Points of Interest, markers GPS location – dynamic info Lines, Polygons Clustered points Demo

• Quantum GIS with vector in action • Open vector data layers • Styling map

QGIS with OSM data

Typical vector data operations

• Mapping Request data for bounding box (BBOX) Reprojection (if needed) Show set of layers Style data – colors, symbols etc Different map zooms have different data • Geocoding – address to coordinates • Reverse-geocoding • Find nearest neighbour(s) • Find objects in radius (buffer) • Calculate distance between objects • Find Point in polygon • Routing – find optimal path in graph • Clustering - show big datasets on map Common GIS Data formats

• Shapefile (ESRI) – most common 4-5 files per layer: .shp, .dbf etc One geometry type per layer allowed No style information, pure geometry Optional projection file .prj • KML (Google, open standard) Vector data, includes styles Special data types: 3D data (Collada), linked data, visual coverages Can have only WGS84 coordinates Can be KMZ – zipped file • Other formats SpatiaLite: vector and raster data. Any projection, no styles. Text files with coordinates or addresses Every commercial GIS has own format(s) Free converter: http://www.gdal.org/ogr/ogr_formats.html Spatial SQL database basics

• Special column data types(s): Geometry, Point, Polygon ... • Geographical indexing Usually R-Tree, based on object bounds (bbox) • Geographical functions: Manipulations, relations, queries etc etc • Metadata table: Defines coordinate system, data type for every Geometry column Geometry primitives in WKT (2D) Multipart geometries in WKT (2D) PROJECTIONS Coordinate systems

• Geographical – spherical Units: Latitude and Longitude Based on an ellipsoid, e.g. WGS-84 Datums, also WGS84 for GPS DMS for display, decimal degrees for programming • Projected - cartesian Units: usually meters (can be km, miles) Hundreds of named projections, mostly for local regions Reduce distortions: keep angles, distances, areas equal

Geographical coordinate space Cartesian (projected) coordinate space Different projections

• The Globe Applet http://www.jhlabs.com/java/maps/proj/ • Check out some Oblique Mercator, Cassini, Rectangular Polyconic • Common in real life Plate Carre, Mercator, Spherical Mercator, UTM, Lambert Conformal Conic (in L-EST)

Short and long projection description

EPSG codes: PROJCS["Estonian Coordinate System of 1997", GEOGCS["EST97", DATUM["Estonia_1997", • EPSG:4326 – WGS84 SPHEROID["GRS 1980",6378137,298.257222101, AUTHORITY["EPSG","7019"]], • EPSG:3301 – Estonian system TOWGS84[0,0,0,0,0,0,0], • EPSG:3587 – „Google web“ AUTHORITY["EPSG","6180"]], PRIMEM["Greenwich",0, Was also EPSG:900913 AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4180"]], UNIT["metre",1, AUTHORITY["EPSG","9001"]], PROJECTION["Lambert_Conformal_Conic_2SP"], PARAMETER["standard_parallel_1",59.33333333333334], PARAMETER["standard_parallel_2",58], PARAMETER["latitude_of_origin",57.51755393055556], PARAMETER["central_meridian",24], PARAMETER["false_easting",500000], PARAMETER["false_northing",6375000], AUTHORITY["EPSG","3301"], AXIS["Y",EAST], AXIS["X",NORTH]]

Coordinates as QR-Code

• http://zxing.appspot.com/generator/ „GEO:26.7144,58.3784“ MAP DATA SOURCES Web maps

Javascript, Flash, Static APIs, Earth 3D Geocoding and Directions (routing) services Mobile APIs: Android, iPhone • Web, Mobile API (WP7, iPhone) • Nokia Ovi Maps Web, Mobile (Qt, J2ME) Web map restrictions

• Technical restrictions Cannot be restyled, no visual customization Limited to provided API-s, feature limits Can’t get map data, or even images Some mobile platforms not served at all • Commercial limits Some services (e.g. Navigation) require special license Advertising is added Commercial map data

• Global vendors Vector: (Nokia), TeleAtlas (TomTom), AND Aerial/Satellite: DigitalGlobe, Blom ASA ... • Local vendors Regio, Maa-amet In almost every country, more detailed to globals • Specifics Technically quite flexible Usually quite expensive OpenStreetMap (OSM)

• Free and open data Vector data in 2D Streets, roads, buildings, amenities etc • A lot of services Map images (tiles), geocoders, routers etc Special views: opencyclemap, openpistemap etc • Everyone can improve the map www..org www.maakaart.ee – in Estonian

Potlatch2 – web-based OSM editor

JOSM – OSM main editor

OSM advantages

• Free and open to use No advertising, restrictions • Vector data access Custom styles for mapping Own filters of data on map (layers) Interactive data overlays (POI layers) Advanced services: routing, search, analysis • Fast and easy updates Find error – go fix it yourself! Note: follow community guidelines GIS TOOLS Main OGC standards

• WMS – Service Send coordinates in URL, get map image • WFS – Send coordinates in URL, get vector data as GML WFS-T – enables writing to server • GML – Geography Markup Language XML-based Specific schemas depending on application • TMS – Tiled Map Service Get 256x256-pixel map images for x, y, zoom • Others GeoRSS – RSS with geotags Geo EXIF – GPS tags for digital photos OCG Free GIS tools

• Desktop tools – mapping, analysis, processing Quantum GIS (QGIS) uDig, OpenJUMP, gvSIG GRASS – analysis Google Earth - view/create KML Google SketchUp – create 3D models • Databases Data sharing/storage Analytical queries, eg. count points in regions PostGIS – Postgres add-on. Pgrouting PostGIS Raster (in next version) • Processing GDAL/OGR – raster and vector library, command-line converters

Free GIS tools for developers

• JTS Java Topology Suite, ports in C etc Lot of complex algorithms, geometries, graphs, geographical indexes • Proj.4 C-based, has few ports Hundreds of predefined projections • SpatiaLite SQLite extension, for files Also some raster features • PostGIS Postgres SQL server extension for vector Raster features in next version

Free GIS Servers

• Web Mapping GeoServer: WMS, WFS, WCS, caching MapServer: WMS, TMS, WFS MapGuide OS : TMS, OSM TileMill: good for on-line styling • Web Processing Services Degree etc • Developer toolkits OpenLayers – Javascript GeoMajas – Java-based MapFish – Python-based • Cooperation project: www.osgeo.org Free GeoWebServices

• Google Fusion Tables General data table API service Very basic geo-features • GeoCommons.com Nice maps and analyses, a lot of content shared No editing, content for US mostly • GISCloud.com Also server-based editing is possible Not very mature • OpenStreetMap Only for community-created data Content requirements: verifyable objects etc • CartoDB.com – closed beta now Hosted GIS servers

Build your own geodatabase

• When you need own server: Requirements are very different Cannot customize readymade servers Specific use cases: user permissions etc • Using OSGeo tools Database: PostGIS Web maps: eg MapServer Client tools: Geomajas, OpenLayers • Using OSM toolkit Web maps: PostGIS + Mapnik API/data management: Rails_port (ruby), Postgres Client-side modification: JOSM, Potlatch2 etc WEB MAPPING DEVELOPENT IN SHORT General model

• Server-side Google, Bing, OpenStreetMap etc etc Map content is „already there for free“ Tile-, WMS or vector based API • Client-side JavaScript, Flash, Silverlight, plug-in or HTML API Bundled with server: Google, Bing etc OpenSource: OpenLayers Tiled map server – Bing sample Web mapping client API - OpenLayers

OpenLayers – add marker

... var lonLat = new OpenLayers.LonLat(-0.1279688 ,51.5077286 ) .transform( new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984 map.getProjectionObject() // to Spherical Mercator Projection );

var markers = new OpenLayers.Layer.Markers( "Markers" ); map.addLayer(markers);

markers.addMarker(new OpenLayers.Marker(lonLat)); Web mapping server APIs

• WMS – view-based • TMS – tile-based http://kaart.maaamet.ee/wm http://tile.openstreetmap.org s/alus-geo ?SERVICE=WMS /13/4702/2451.png &VERSION=1.1.1 /13/4703/2451.png &REQUEST=GetMap /13/4704/2451.png &LAYERS=HALDUSPIIRID,BAAS /13/4702/2452.png KAART /13/4703/2452.png &STYLES=default /13/4704/2452.png &SRS=EPSG:4326 &BBOX=26.7,58.3,26.8,58.4 ... &WIDTH=600 &HEIGHT=600 &FORMAT=image/png& WMS image response

26.8E,58.4N

600px

26.7E,58.3N 600px OSM Tile-based map: zoom 13

X 4703 4704 4705

Y

2450

2451 Tiles or WMS ?

• Tile advantages Can be cached in client Can be pre-rendered in server Can be preloaded to client Faster, suitable for high-traffic services • WMS advantages Supports selection of projection, layers, styles Smaller number of requests Suitable for high flexibility services (GIS apps) MOBILE LBS APP DESIGN TIPS Bad UX design

• Long alphabetical listings, no search Example: RMK Android app • Ignore geographical dimension Mobile apps are used „out in a wild“ • Too many points on map Clusters – group points Filters – show minimal number • Assume user GPS location User is maybe planning to go there • Assume always network connectivity • Unoptimized user experience LBS must be more robust than average mobile app (eg game) It is probably not used just to kill some tome Common technical mistakes

• Geographical data handled as non-geographical Using place names / addresses to find nearest Use just two float fields for geographical objects Cannot be indexed, can’t use existing geotools • Ignore GPS specifics Location fix takes long time: 20 sec to 20 min Fix is not always available: indoors etc GPS kills the battery! • Coordinate system errors mix degrees/meters, projections swap x/y

ANDROID APPS WITH LOCATION Location determination

• Plain GPS Free satellite signal – requires 4 satellites min. Accuracy: ~5 meters Time to first fix (TFF) – up to 20 minutes • AGPS Assisted by network – TFF ~20-30 sec Claimed to have also better sensibility • Network-based locations Immediate but less accurate Mobile network cell (Cell-ID) – ~1 km error average, can be 10 km Wifi location: ~100 m accuracy Cell/Wifi databases: user-collected. Google, Skyhook, Apple, Nokia, OpenCellID etc • Hybrid method First give quick inaccurate network location, then try GPS Used in Android, iPhone Location API in Android

• Location Method Selected automatically based on set requirements: Cell-,WiFI or GPS • Features Listen for updates – most common Last known location (cached) – not suggested Proximity alerts – not guaranteed • Best strategy depends on app http://developer.android.com/guide/topics/location/obtaining-user- location.html

Mobile mapping – main platforms

• Smartphone platforms Most have GPS and good screen • iPhone Bundled Apple MapKit, Google Maps. Opensource: Route-me • Android Bundled Google MapView, Google Maps OpenSource tools: Osmand, Nutiteq etc • Windows Phone 7 Bing maps SDK, Nokia Maps SDK OpenStreetMap – coming ?

Mobile mapping – other platforms

• GPS : not guaranteed • BlackBerry BB Maps, Nutiteq SDK • Nokia Symbian and Meego Nokia Maps, Qt-based • Nokia S40 Nokia Maps SDK (beta), Nutiteq • Samsung Bada deCarta SDK

Mapping SDKs on Android

• Raster-based Google Maps API – no offline, routing, license limits Nutiteq SDK – offline, multi-platform. GPL+commercial OSMDroid – LGPL, Android-specific

• Vector-based Mapsforge – GPL, only offline , nice rendering Droyd SDK – also navigation, only offline Ericsson Maps – online data, ugly rendering

• 3D Earth solutions Glob3 Mobile – in development, BSD license

• HTML5 OpenLayers Mobile OpenWebGlobe – WebGL based 3D earth Other useful free tools for mobile

• Spatialite = SQLite + GEO Big datasets (8M objects DB) Spatial operators, e.g. distance, nearest ... Requires NDK/JNI. Prebuilt binary in bitbucket.org/nutiteq/android-map-samples/ ... • JTS – Java Topology Suite Java-level spatial graphs, operators, geometries • Free GIS tools – processing/preview data See above Nutiteq SDK features

• Mapping Number of pre-defined APIs (OSM, CloudMade,NAVTEQ, Microsoft,WMS, TMS etc) Custom map sources, you can define own tile API On-line and off-line mapping (prepackaged, stored, cached) • Other features Points of Interest (POI) on map (KML, individual places) Polygons and lines on map Raster map overlays Search place-names (geocoding) Routing (CloudMade, YourNavigation) Dynamic location (GPS, cell-ID) • Platforms Android, BlackBerry (both CLDC and MIDP) Java ME / J2ME (CLDC 1.1, MIDP 2.0) Footprint: minimum ~100 KB, depending on used features Do your first Android LBS app

• Speed camera alerts on Android Shows map, gets GPS location, reads data, plays alerts • Tools Android SDK – developer.android.com Eclipse IDE (Java) Nutiteq Mapping SDK – www.nutiteq.com • Content POIPlaza KML file OSM maps, alarm audio mp3 file • Instructions http://www.scribd.com/doc/68530221 Thank you!

Jaak Laineste

CEO, Nutiteq www.nutiteq.com [email protected]