Indoor location tagging engine
Java

README.rst

Tagin - Indoor Location Tagging Engine for Android

tagin! is an open source, location tagging engine that may be used to create indoor, location-based services and applications. Developers can use the tagin! engine to manage points of interest (POI) and digital signs making them available to their applications on WiFi-capable devices.

The Engine

The tagin! engine characterizes the distinct patterns of radio-frequency activity (i.e., the fingerprint) in a particular place and assigns a unique identifier or URN to each one. Thus, the tagin! URN may be used as an identifier of a specific physical location. Developers may therefore use tagin! URNs to create location-based content making it available through their own services, devices and applications.

Working principle

When a URN request is received by a client device or application, the tagin! engine should perform the following steps:

  1. The radio chip in the client device is instructed to perform one or more scans in order to obtain a new fingerprint
  2. The new fingerprint is compared to nearby, previously recorded fingerprints that have already been assigned a URN
  3. If the fingerprint is sufficiently similar to one that already has a URN, the two fingerprints are merged under the existing URN
  4. If the fingerprint is NOT sufficiently close to one that already has a URN, the fingerprint will be saved with a new URN
  5. The URN (either already existing or newly created) will be returned by the engine

Speed / Accuracy Trade-Off

There is a trade-off between how fast the tagin! engine can respond and how accurate it can be. Longer fingerprinting, characterized by multiple averaged scans has a better chance of getting accurate results but may take too long to resolve for a particular application. The tagin! engine should allow developers to control for this trade-off.

Local vs. Global URNs

The tagin! engine should be entirely contained within a handset and also run offline. Thus, individual handsets will be initially responsible for generating the URNs. This will cause different handsets to create different URNs for the same location, thus, URNs generated by the handset will only be valid in the context of the handset itself. We call these local URNs because they can only be used to provide services relevant to the specific user and handset (e.g., location-based preferences).

In order to provide consistent identifiers across handsets, the engine will be able to synchronize data with a server which will turn the local fingerprint data submitted into global URNs. Global URNs will enable more powerful services across handsets and applications (e.g., indoor mapping and/or wayfinding). In its simplest form, the server will act as an additional device running the tagin! engine, except it will receive/provide data from/to all tagin!-enabled devices instead of just one.

Features

Some of the most significant features of the proposed tagin! engine are detailed below.

Adaptability / Self-Learning

The tagin! engine will use each and every request to update its fingerprint-URN relationship. While URNs will be unique, and will not change after being created, the underlying pattern represented by the associated fingerprint will be updated to reflect the latest measurements. This will allow the tagin! engine to quickly respond to changes in the radio-frequency patterns of specific locations while still providing a unique resource identifier that developers can reliably use to refer to a particular location.