<!-- thumbnail: https://stackgeography.apphb.com/images/stackapps_logo.png -->
<!-- version: 1.0 -->
<!-- tag: website -->

## Screenshot / Code Snippet

[![alt text][8]][8]  
<sub>(source: [apphb.com](https://stackgeography.apphb.com/images/screenshot2.png))</sub>  


## About

Ever wanted to see just what kind of locations are posting to the various Stack Exchange sites at any given time? Even if you haven't, you'll find it with [StackGeography][9].

**NEW!** Now with multiple-site concurrent polling goodness!

This site started with a desire to get a visual sense of the wide-spread use of the various Stack Exchange sites while simultaneously creating a proof-of-concept mapping demo. This met both of those needs, and provided a great chance to poke around various JavaScript libraries.

### License

MIT License

### Download

No download necessary, just visit [stackgeography.apphb.com][10].

NOTE: With AppHarbor phasing out free custom domains at the end of the month, if www.stackgeography.com stops resolving correctly, you should be able to get there with the direct AppHarbor domain: [stackgeography.apphb.com][10].

### Platform

Should work on any modern web browsers with JavaScript enabled. While it works fine on desktop browsers, it has a few UI tweaks to go to be more mobile-browser friendly.

## Contact

[Adam Patridge][11]

Bugs and requests and such can go on the [StackGeography GitHub repository](https://github.com/patridge/StackGeography).

## Code

[Stackgeography.apphb.com][12] was written entirely in JavaScript, HTML, and CSS. The code can be found, and contributions made, at the [StackGeography GitHub repository](https://github.com/patridge/StackGeography).

### APIs Used

* [Stack Exchange API v2.0][1]
* [Google Maps v3][2] (used for geocoding and mapping)

### Projects Used

* [jQuery v1.7.1 (MIT or GPL)][3] (used for just about everything)
* [jQuery UI v1.8.16 (MIT or GPL)][4] (used for the site selection dialog)
* [jsrender v1.0pre (MIT)][5] (used to render out a number of things from JavaScript objects to HTML)
* [LINQ to JavaScript (JSLINQ) v2.10 (Ms-RL)][6] (used for collection manipulations)
* [URI.js (MIT or GPL)][7] (used to simplify URL handling)
* [jquery-jsonp (MIT)][13] (better JSONP error handling, though $.Deferred support isn't built-in)
* [jquery.hotkeys (MIT or GPL)](https://github.com/jeresig/jquery.hotkeys/blob/master/jquery-1.4.2.js) (hit "?" for keyboard shortcut dialog)
* [geoPlugin][14] (geo IP lookup used for map centering)

### UPDATES

#### 2012-02-24

* Ability to poll meta Stack Exchange sites, defaults to omit to keep site list shorter (toggle via saved option).
* Marker placement can be staggered via saved option.
* Clear map markers via <kbd>#</kbd>.

#### 2012-02-23

* **Polling multiple sites concurrently!** The UI still needs work, but if you return to site selection by pressing <kbd>S</kbd>, you can keep adding sites to poll.
* Polling management: hit <kbd>P</kbd> to view pending polls and cancel some/all of them.
* Options management: hit <kbd>O</kbd> to view/set options (more options to come).
* Using localStore for StackGeography options (currently only saving last selected site and maximum map markers).

#### 2012-01-19

* Mark questions with site-specific map markers.
* Options window:
  * Toggle site-based map markers vs. generic stackgeography.com map marker.
  * Change max number of markers shown (default 500).

#### 2012-01-18

* Switched to ASP.NET MVC to make it easier to output-cache common API hits on the server.

#### 2012-01-16

* Added location geocoding in batches (up to 100).

#### 2012-01-13

* Added filters to the Stack Exchange API calls to cut down on JSON coming back from those requests.
* Switched to SQL Server on AppHarbor to avoid locking issues on geocode cache inserts.
* Added keyboard shortcuts (<kbd>?</kbd> brings up hint window).

#### 2009-01-09

* Google Maps 403 issue patched with server-side caching proxy for geocoding API requests.

  [1]: https://api.stackexchange.com/docs/
  [2]: https://developers.google.com/maps/documentation/javascript/basics?csw=1
  [3]: https://jquery.com/
  [4]: https://jqueryui.com/
  [5]: https://github.com/BorisMoore/jsrender
  [6]: https://web.archive.org/web/20180120035546/http://jslinq.codeplex.com:80/
  [7]: https://web.archive.org/web/20130403134601/http://medialize.github.com/URI.js/
 [8]: https://i.sstatic.net/gmloA.png
 [9]: https://web.archive.org/web/20210920181623/http://stackgeography.apphb.com/
 [10]: https://web.archive.org/web/20210920181623/http://stackgeography.apphb.com/
 [11]: https://www.patridgedev.com/
 [12]: https://web.archive.org/web/20210920181623/http://stackgeography.apphb.com/
 [13]: https://web.archive.org/web/20160116051802/https://code.google.com/p/jquery-jsonp/
 [14]: https://www.geoplugin.com/