Windows 7 & Location Awareness
Location became ubiquitous!
It’s almost two years now since people have heard about new revolution in building context-aware applications – Windows 7 & it’s context-aware APIs.
As you know, in Windows 7 Microsoft shipped a platform known as “Windows 7 Sensor Platform” and set of APIs for location awareness. Together the platform is known as “Windows 7 Sensor & Location Platform”. You can read more about the platform, progress of work on it in team’s blog here: https://blogs.msdn.com/b/sensorslocation/
Location remains one of the most critical assets of context-aware computing area for next decades. The biggest problem of location is that until it’ll become ubiquitous and cheap it can’t be a game changer and bring context-aware computing vision to live.
To make location awareness ubiquitous, we need to have a variety of mechanisms to get location data for different situations:
- GPS (for outdoors)
- WiFi triangulation (when you are inside)
- Cell Towers (when you are on a mobile phone device or use Mobile Broadband)
- IP location detection (it’s usually about 25 km error)
Unfortunately until Windows 7 appeared getting GPS data wasn’t cheap and ubiquitous itself because:
- everyone had to implement NMEA compliant drivers;
- drivers work via COM with GPS device;
- only one app can talk to GPS at time;
- no unified API to work with GPS devices manufactured by different companies.
This problem was solved in Windows 7 by:
- building one common mechanism to deal with any NMEA-compliant GPS device (eliminating need to support each device separately) – Sensor Platform with support of location sensors
- building one common mechanism for any app to deal with location data – “Location Platform API”
- making these APIs to be accessible by any amount of apps
- making these APIs available in COM format / .NET 3.5 (via open source library) / .NET 4 (System.Devices.Location)
Let’s suppose we build a new machine that we want to be context-aware (which means it will know something about physical environment as well). Let’s suppose we’ll start with location as one of main parameters of physical environment. What we will need?
- GPS device
- Drivers, compatible with Windows 7 Location Platform: GPS | WiFi | IP
GPS Driver
In my case, I’ve used Gobi 2000 card (known as HP Mobile Broadband module if you get it for your HP laptop) as GPS source. Unfortunately, Qualcomm (who is building these Gobi 2000 cards) doesn’t provide GPS drivers for Windows 7 Location Platform. In case you have any of u-blox GPS devices, you can download a separate driver package that will turn your laptop into location-aware device.
But what if you don’t have u-blox GPS device, but a generic one (like Gobi 2000-based in my case)? In order to resolve this issue, you can use this awesome generic GPS driver:
Turbo GPSDirect NMEA Sensor Driver for Windows 7
It has both x86 and x64 implementations, and a tool that will enable you to configure your sensor driver for your GPS based on it’s COM port and speed.
WiFi & IP Location Driver
Unfortunately, there is no generic WiFi location driver. The reason is simple – location detection works by mapping lat/long coordinates to WiFi networks SSIDs in a centralized fashion. This is what Skyhook Wireless was doing to enable location APIs in first generation of iPhone. There are several providers of such service, including Google.
Also Skyhook has program to enable 3rd party developers to build location-aware apps using Skyhook’s data, this program doesn’t support Windows 7 Location Platform. Google doesn’t support Windows 7 Location Platform, either.
But there is a “Geosense for Windows” which uses Google’s services to provide you the information about your location using WiFi & IP only.
Geosense for Windows - Sensor Driver for Windows 7
It has both x86 and x64 implementations, as well.
Finally, to test your location-aware laptop, you need some apps to work with, right?
There are at least two such apps:
- Bing Maps 3D-based “Windows 7 Navigation App” (written by me about year and half ago)
- Location-enabled Google Maps-based client (written by team behind Geosense for Windows)
There is also a simple example of location-aware service-based gadget, “Weather Gadget” that is part of Windows 7 and shows weather in your location:
Of course, there are lots of apps using location data on phones today, but now that we have laptops with GPS inside, Geosense for Windows, and know how to use Location data in our apps (via Windows 7 Location Platform), it’s a new and important step in life of context-aware computing apps developers:
Location, previously used mostly in vertical solutions, is now ready to make your computer location-aware.
Let’s go ahead and develop some location-aware applications!