Geomena.org Open Access Point GeoDatabase

A name has been chosen - Geomena. Based on the Phaenomena or an ancient catalog of stars. Since stars were used for navigation, it makes sense that this catalog of access points or radio beacons or stars has a similar name.

The first step is to implement the W3C geolocation API using server-side javascript in couchdb. The W3C documentation describes the javascript interface to the browser functionality which queries a location provider. The protocol between the browser and provider is not documented as far as I can tell. By using the google geolocation service and firefox/components/NetworkGeolocationProvider.js, I will try and decode the protocol into a specification.

*** WIFI GEO: provider url = https://www.google.com/loc/json

The first bit of information is the provider's URL. this is also available from about:config geo.wifi.uri

*** WIFI GEO: client sending: {"version":"1.1.0","access_token":"2:Av4G03EhCYVk0BSp:ToW-3shUvpFZ70wq","wifi_towers":[{"mac_address":"00-1c-df-66-ca-f6","ssid":"","signal_strength":-30}]}

The next bit obtained from the firefox log is the JSON packet sent to the location provider. There is an access token that I have yet to determine how to acquire. The most interesting part is that the reporting of multiple access points along with signal strength is already supported. Notice the 'wifi_towers' field is an array. Wifi positioning could increase in accuracy by taking into account multiple access points, as well as determine access points with bogus records.

$ curl --data '{"version":"1.1.0","wifi_towers":[{"mac_address":"00-1c-df-66-ca-f6","ssid":"","signal_strength":-31}]}' https://www.google.com/loc/json

{"location": {"latitude":45.5165989,"longitude":-122.6307207,"accuracy":150.0}, "access_token":"2:3PfDbpb1YDCFoGhs:zSUG3BG4LJvUgaHA"}

Apparently the access token is ignored by google as the example curl data does not include an access key. I also tried "bogus" as the access key and still got a valid answer, along with a new token. I'll assume that anytime a token is given, it should be used for all subsequent requests.

tags: