Overview
Tracks play a prominent role in a variety of emerging mobile applications from trip planning to online games to fitness monitoring. Consider a ride sharing application, for example. By recording and comparing the tracks of commuters driving to and from work, this application suggests co-workers that can potentially drive together, thereby reducing pollution, gas consumption, and traffic congestion. Similarly, tracks left by others might help someone new to an area discover interesting biking trails, determine safe places to walk, or indirectly share experiences with friends and family.
StarTrack is a system that enables extensive operations on tracks. A track is a discrete and sampled representation of a continuous route. Mobile devices collect tracks and opportunistically upload them to a central server. StarTrack includes facilities for storing, comparing, clustering, indexing and retrieving tracks. It serves as the foundation for building large-scale track-based services.
StarTrack Architecture
The StarTrack system is based on a client-server architecture. The figure below depicts a system with a cell phone, desktop PC, and the StarTrack server(s). In practice, a system will contain many mobile devices and any number of stationary PCs interacting with a (logically) centralized server. This figure also shows the software components that run on both mobile and fixed devices as well as on the server.
The StarTrack server infrastructure is implemented on top of SQL Server. Tracks are stored, indexed, and queried using SQL Server 2008's support for spatial data. To provide a scalable infrastructure, the track data can be replicated and distributed across multiple servers based on geographic regions, users, or applications.
Sample Application - Ride-sharing:
To illustrate the applicability of the StarTrack API, the high-level code for a ride sharing application built using StarTrack is presented below. This code can run on any device that has a network connection to the StarTrack server.
// get a representative track for my own commute
myCommuteTrack = GetRepresentativeTrack("me", "7:00 am", "9:00 am");// find tracks of others with similar commutes
similarTracks = QueryTracksByTrack(myCommuteTrack);
for each track in similarTracks do
person = GetTrackOwner(track);
commuteTrack = GetRepresentativeTrack(person, "7:00 am", "9:00 am");
if SimilarTracks(myCommuteTrack, commuteTrack)
report person as a potential ride sharing partner
end loop;
Publications
Ganesh Ananthanarayanan, Maya Haridasan, Iqbal Mohomed, Doug Terry, and Chandramohan A. Thekkath. StarTrack: A Framework for Enabling Track-Based Applications. To Appear in MobiSys 2009.
Interns
- Ganesh Ananthanarayanan, UC Berkeley, Summer 2008
- Erich Stuntebeck, Georgia Tech, Summer 2009
Collaborations
Documents
StarTrack paper - (MobiSys 2009)
StarTrack API
The operations in StarTrack's API fall into five categories: recording, manipulating, comparing, clustering, and querying tracks. The table below presents a simplified set of key operations in our API.
|
Recording Tracks |
|
trk = StartTrack(); |
|
EndTrack(trk); |
|
SaveTrackEntryMetadata(trk, metadata); |
|
RemoveTrack(trk); |
| Manipulating Tracks |
|
trk = ClipTrack(trk, region); |
|
trk = SpliceTracks(trk1, trk2); |
|
entries = ExtractTrack(trk); |
|
entry = GenerateTrackEntry(coords, time, metadata); |
|
trk = GenerateTrack(entries, metadata); |
| Comparing Tracks |
|
similarity = CompareTracks(trk1, trk2, constraints); |
|
bool = SimilarTrack(trk1, trk2, constraints); |
| Clustering Tracks |
|
trks = ClusterTracks(trks) |
|
trk = RepresentativeTrack(trks); |
| Querying Tracks |
|
trks = QueryTracksByRegion(region); |
|
trks = QueryTracksByOwner(owner); |
|
trks = QueryTracksByMetadata(metadata); |
|
trks = QueryTracksByTime(start, end); |
|
trks = QueryTracksByTrack(query-trk); |



