Google gears will allow off-line data view, but to create a stand-alone desktop application you'll need AIR or something similiar (you can combine Gears with ie. GWT and run in with AIR, or use Flex).
I am currently in Tokyo, and I used to be in Switzerland. Yet, my location until some days ago was not pinpinted exactly, except in the broad Tokyo area. Today I tried, and I appear to be in Switzerland. How?
Well the secret is that I am now connected through wireless, and my wireless router has been identified (thanks to association to other wifis around me at that time) in a very accurate area in Switzerland. Now, my wifi moved to Tokyo, but the queried system still thinks the wifi router is in Switzerland, because either it has no information about the additional wifis surrounding me right now, or it cannot sort out the conflicting info (namely, the specific info about my wifi router against my ip geolocation, which pinpoints me in the far east).
So, to answer your question, google, or someone for him, did "wardriving" around, mapping the wifi presence. Every time a query is performed to the system (probably in compliance with the W3C draft for the geolocation API) your computer sends the wifi identifiers it sees, and the system does two things:
- queries its database if geolocation exists for some of the wifis you passed, and returns the "wardrived" position if found, eventually with triangulation if intensities are present. The more wifi networks around, the higher is the accuracy of the positioning.
- adds additional networks you see that are currently not in the database to their database, so they can be reused later.
As you see, the system builds up by itself. The only thing you need is good seeding. After that, it extends in "50 meters chunks" (the range of a newly found wifi connection).
Of course, if you really want the system go banana, you can start exchanging wifi routers around the globe with fellow revolutionaries of the no-global-positioning movement.
Best Solution
I've been asking this question for nearly a decade. In my business we build and sell both Windows and Web apps that do roughly the same thing. Four years ago I would have told you that we'd be 80-20 in favor of web apps by now. However, in terms of the numbers shipped, we are still about 60-40 in favor of the Windows apps.
While I once thought that the real barrier to the acceptance of software as a service was simply a desire for a better, richer user interface (which Silverlight, Air, etc. would solve), I'm now inclined to think that there are a lot of people who simply prefer a one-time purchase and local control over a web connected subscription model. Because this preference is rooted in personal perceptions of value for the money, I don't think that technology will change anything as quickly as we technologists think it will. Thus, I'd wager that Windows apps are with us for longer than we developers will ever expect; another 10 years at least.