and Firefox OS is powerful project with a rich data set that can be used to drive development of location-based services for mobile devices without a GPS (or without the power to run a GPS all the time).

In a nutshell, it’s an open database of georeferenced mobile telephone network cell cites, built from a network of apps that send it data.

Mobile telephones are known as “cell phones” because they connect to a network of “cells” – radio transceivers – distributed around populated areas. As you move about, your phone hops from cell to cell seamlessly. Here’s a map of Charlottetown cell sites derived from the Industry Canada Spectrum Direct database:

Charlottetown Cell Towers

Attached to each tower or structure on this map are one or more “cells” and each cell had a unique identifiier made up of four parts:

  • MCC: mobile country code; the code for Canada is 302
  • MNC: mobile network code; every mobile operator has one: Bell is 610, Rogers is 720, for example.
  • LAC: location area code; identifies the geographic region; in PEI our LAC is 48000
  • Cell ID: a unique ID for each cell within an LAC.

Right now my phone is connected to Cell ID 250014558 in LAC 48000 in MNC 610 in MCC 302. I know this because I wrote a little Firefox OS application to display this information for me:

Get Cell ID app for Firefox OS

The “glue” that’s missing between information about cell transceiver sites (what you see on the map above, and is freely available from Industry Canada) and what I can detect on my mobile device (using the app above) is the Industry Canada data doesn’t include the “Cell ID” in its data, so there’s no way to know, from public data sources, where the cell I’m currently connected to is.

That’s where comes in: using the site’s API I can query the database for the location of a given Cell ID, like this (where I substitute my API key, available for free by registering, for “KEY”):

What gets returned is:

<rsp stat="ok">
     <cell lac="48000" 

The location that returns is its best guess, from available reports, of my current location. As it turns out, it’s not a bad guess at all:

The pink X is my current location; the red marker is the location returned. The site build that guess using 12 reports (reports, as it happens, that I contributed using my device):

<rsp stat="ok">
    <measure lat="46.2341142" lon="-63.12629745"></measure>
    <measure lat="46.23423571" lon="-63.1264044"></measure>
    <measure lat="46.2342632" lon="-63.12641408"></measure>
    <measure lat="46.2342976" lon="-63.12642024"></measure>
    <measure lat="46.23397183" lon="-63.12654337"></measure>
    <measure lat="46.23369234" lon="-63.12707633"></measure>
    <measure lat="46.23305379" lon="-63.12726862"></measure>
    <measure lat="46.23359937" lon="-63.12701882"></measure>
    <measure lat="46.23346142" lon="-63.1267446"></measure>
    <measure lat="46.23268702" lon="-63.12559536"></measure>
    <measure lat="46.23210112" lon="-63.12496772"></measure>
    <measure lat="46.23226499" lon="-63.12453019"></measure>

When you look at the locations of those 12 measures, it’s easy to see why returned the location it did: measures

Obviously with more reports the accuracy of the “guess” will increase. I’m running my app (you can grab it for Firefox OS) when I’m walking around and about downtown Charlottetown, so this should happen on its own, as my app gets GPS location from the device and reports this to every 30 seconds.


Joshua Biggley's picture
Joshua Biggley on June 17, 2013 - 18:19 Permalink

Peter, I believe you are the new Waldo! It would be interesting to track you in real-time — as well as being just a tad creepy.