Implementations
Contents
|
Definition
An implementation is a program that takes the method shown in The Algorithm to calculate the geohash location, presenting the user with text coordinates, a map, data for a navigation device, or some other information that facilitates reaching the geohash.
If you're looking to code your own utilities, you will need a source that provides the Dow's opening price for any given day. Details on such services are available at Dow Jones Industrial Average.
Official Implementations
Reference Implementation
| This implementation IS FULLY 30W-compliant. |
A reference perl implementation is available: view download
It cannot automatically apply the 30W rule, as it doesn't take your location into consideration. If you're East of 30W, call it with the -e option and it will yield the correct results.
Any problems or issues should be mentioned to Zigdon either on the wiki or in the [#geohashing channel on irc.foonetic.net], as well as posted at Talk:Implementations.
Interactive Coordinate Calculator
| This implementation IS FULLY 30W-compliant. |
The original interactive coordinate calculator can be found at http://carabiner.peeron.com/xkcd/map. Here are some notes on Using the Coordinate Calculator. The common URL, http://xkcd.com/geohashing, redirects here.
Any problems or issues should be mentioned to Zigdon either on the wiki or in the [#geohashing channel on irc.foonetic.net], as well as posted at Talk:Implementations.
MediaWiki Implementation
| This implementation's 30W-compliance is tied to that of another implementation. See notes. |
MediaWiki half-implementation (for use by template creators).
Online calculators
Interactive Coordinate Calculator
| This implementation IS FULLY 30W-compliant. |
The original interactive coordinate calculator can be found at http://carabiner.peeron.com/xkcd/map. Here are some notes on Using the Coordinate Calculator. The common URL, http://xkcd.com/geohashing, redirects here.
Any problems or issues should be mentioned to Zigdon either on the wiki or in the [#geohashing channel on irc.foonetic.net], as well as posted at Talk:Implementations.
The source code is available here: https://github.com/zigdon/geohashing.
Small Hash Inquiry Tool
| This implementation IS FULLY 30W-compliant. |
Small Hash Inquiry Tool is an online tool Ekorren built to his own needs but later rebuilt to be globally usable.
Compared to the nifty tools like those for the iPhone, this one looks ugly to the end. Which was intended as it should be stripped from all colourful overhead, featuring just basic compressed information, all on one page and from everywhere.
Features:
- lists up to nine nearby hashpoints per day, today and upcoming (no retro)
- may be called from a bookmark without needing further input
- calculates approximate distance and direction
- shows the location on configurable maps on request
- includes the globalhash
- does it all at once, and
- is so basic that it works from virtually every phone which isn't entirely incapable of browsing.
Usage information is available from its own page.
Active Geohasher
| This implementation IS FULLY 30W-compliant. |
Active geohasher is a web application by Sermoa which provides resources for geohashers. The site used to be able to send email, but resource limits have prevented it from doing so for the time being. One can use a browser to view a page containing the address, distance from your home location, and useful links. It also tells you the globalhash.
The site provides graticule integration with twitter, flickr and youtube. A google earth feed is provided per gratiucule. Every geohash has a page showing various google maps, useful links and a PDF poster which you can download and print to take to the geohash.
Active geohasher is open source (written in Ruby on Rails). Please contribute if you have ideas or would like to translate it into a different language. There is also a twitter account that delivers news and direct message geohashing notifications: @activegeohasher
Note: as of May 2013, the website has been down ("Offline for Maintenance") for several months.
Eupeodes's geohashing map
| This implementation IS FULLY 30W-compliant. |
A new implementation using google maps api v3. Gives 3 x 3 hashes, with option to download as GPX. Uses geo.crox as data source. This implementation works very well on iOS devices and on desktop. Blackberry, Android and Windows Phone are not tested yet since I don't have them.
Parameters:
- lat - latitude of the initial graticule
- lon - longitude of the initial graticule
- date - initial date in YYYY-MM-DD format
e.g: http://gh.eupeodes.nl?date=2005-05-26&lat=37&lon=-122
See User:Eupeodes/Geohashing_Map for more information
Geohashing Poster Tool
| This implementation IS FULLY 30W-compliant. |
This tool produces a PDF document that can be printed out, similar to the ones that were available from Active Geohasher.
Posters are available from the following URL:
http://geo.crox.net/poster/[date]_[lat]_[lon]
Minimal globalhash support is also available:
http://geo.crox.net/poster/[date]_global
From an expedition page, you can link to the poster like this:
[http://geo.crox.net/poster/{{FULLPAGENAME}} Poster for this expedition]
For more information, credits and feedback, see User:Crox/Poster.
Feeds / Web Services
DJIA sources
See: Dow Jones Industrial Average for a list of data sources for the DJIA openings.
RSS/Atom
geohash.info
| This implementation IS FULLY 30W-compliant. |
Subscribe to a feed that updates as soon as each day's meetup is calculable for your graticule:
http://www.geohash.info/srv/feed.php?lat=LAT&lon=LON
If you visit the URL with no parameters, you will be prompted for your graticule coordinates.
- Dow data comes from the peeron service
- To view source, drop the parameters and change the extension to .phps -- this currently works for all PHP files in geohash.info/srv/
- Quirks
- The script estimates your timezone based upon your longitude, and uses -04:30 as the timezone of the Dow. Therefore, the update times may be off by as much as an hour or two. Shouldn't be an issue, since they'll be around midnight for most people.
- For non-30W users, the feed will be empty between midnight and 9:30 AM -- this should be acceptable, since most feed readers keep entries that have dropped off the end of the feed. (This behavior may be changed in the future.)
Geo Hashing RSS
| This implementation IS FULLY 30W-compliant. |
Another RSS implementation, coded by Matty K. This one simply provides a graticule's coordinates for a given day, and gives links to both Google maps and the peeron maplet. It is recalculated at every request (so please don't hammer it, or my website will run out of bandwidths).
http://geohashing.kerwin.net.au/rss.php?ll=LAT,LON
For example, the link for San Francisco's feed is: http://geohashing.kerwin.net.au/rss.php?ll=37,-122
Notes:
- If latitude/longitude are not given, it defaults to my home graticule .
-
I don't know if it supports negative zero. If there is a request to add specific support, please let me know.I added specific negative zero support, and tested it with the London area. It appeared to work okay. - 30W-compliance is based on the fact that I live East of 30W, and it gives me the right coordinates each day.
- For any bug reports or other features requests, please email Matty
- Sources can be made available by request. Although Matty might be a little ashamed of the shoddy code.
GeoRSS feed
| This implementation IS NOT 30W-compliant. |
You can subscribe to a feed (in GeoRSS format) that will give you updates on a daily basis[citation needed]. Updates include the "best guess" address of the location as well as the specific latitude/longitude coordinates.
http://atlas.freshlogicstudios.com/Features/Experiments/Xkcd/Xkcd.ashx?Latitude=38&Longitude=-91
For example, here's the GeoRSS geohash for St. Louis.
This GeoRSS feed is used to power the Atlas geohash implementation.
Atom feed
| This implementation IS FULLY 30W-compliant. |
You can subscribe to a feed that will give you updates on a daily basis:
http://staticfree.info/geohash/atom/LAT,LON
For example, here's the Atom Geohash for Boston.
Just put your coordinates in, subscribe and you'll be ready to go!
Source is available from subversion: https://staticfree.info/svn/ghfeed/
- Bugs
- I noticed yesterday that before the stock exchange data becomes available, the atom feed creates a kind of 'intemediary' geohash using todays date and yesterday's data. This might be intentional, but personally I find that undesirable on weekdays. Could it be modified to show yesterday's date and geohash until data is available? Nicktaylor 14:04, 23 May 2008 (UTC)
- It's definitely broken. -- Phyzome 11:37, 28 May 2008 (UTC)
- This implementation was written before the 30W rule. As it turns out, the intermediate hash falls back on the previous Dow while using the current date from 00:00 (local) to 09:30 ET, which happens to be the desired 30W behavior. However, this is not helpful west of 30W. An inverse problem occurs after 09:30 USET east of 30W, until 24:00 local. See detailed discussion at Talk:Implementations#Atom feed 30W-compliance. --Tim P 15:45, 29 May 2008 (UTC)
- It's definitely broken. -- Phyzome 11:37, 28 May 2008 (UTC)
JSON Web Service
| This implementation IS FULLY 30W-compliant. |
A geohashing JSON web service is available at: http://relet.net/geo
Additional data may always be present in the replies. This service may be extended in the future.
- Get geohash for location and date / Get graticule statistics
http://relet.net/geo/[lat]/[lon]/[YYYY-mm-dd] (example)
http://relet.net/geo/[lat]/[lon] (example)
Returns a geohash for the given latitude, longitude and date. If you omit the date, you will only receive the graticule data.
The output will contain the following values in a dictionary:
- error - if an error occurred retrieving the data - example: "DJIA for 2011-12-24 not available yet."
- exception - if an error occurred parsing the input or calculating the output - example: "time data '2011-13-24' does not match format '%Y-%m-%d'"
or:
- djia - DJIA as retrieved from geo.crox
- lat - latitude of the geohash
- lon - longitude of the geohash
- global-lat - latitude of the globalhash
- global-lon - longitude of the globalhash
and some information about the graticule:
- graticule - name of the graticule (may be null)
- attempt - number of geohashes attempted
- success - number of successful geohashes
- last - last successful geohash (may be null)
- 30d - geohashes in the last 30 days
- 300d - geohashes in the last 300 days
- hashers - an estimate on how many hashers have tried to reach geohashes in this graticule
- Get geohash history for a graticule
http://relet.net/geo/list/[lat]/[lon] (example)
Returns a list of past expeditions for this graticule. Each list item contains the values:
- lat - latitude of the geohash
- lon - longitude of the geohash
- djia - relevant DJIA
- reached - whether the coordinates were reached
- title - the title of the expedition page on http://geohashing.org
- Get geohash history for a user
http://relet.net/geo/follow/User (example)
Requires proper capitalization as in wiki user names Returns a list of past expeditions for this users. Each list item contains the values:
- lat - latitude of the geohash
- lon - longitude of the geohash
- djia - relevant DJIA
- title - the title of the expedition page on http://geohashing.org
- reached - whether the coordinates were reached
- Get participants of an expedition
http://relet.net/geo/participants/lat/lon/date (example)
Returns a list of recognized user names who are presumed to have participated in this expedition. (Fuzzy logic, it's an educated guess)
- Get complete list of all graticules
http://relet.net/geo/grats
Returns a dictionary of all named graticules. Please store this locally, the transfer size is considerable. For occasional queries after a graticule name, use one of the other APIs. Updated occasionally.
- Get complete geohashing statistics
http://relet.net/geo/stats
Returns a dictionary with graticule statistics. Updated daily. The data is unlabeled, to save a bit on space. Each dictionary entry is a list with the following entries, in this order.
- total expeditions
- coordinates reached
- 30 day expedition count
- 300 day expedition count
- last expedition date
- number of geohashers having participated in expeditions in this graticule (estimate from parsing reports)
- Join the #geohashing IRC channel with a random geonick
http://relet.net/geo/randomnick
Generates a HTTP 302 Redirect to mibbit. Just a gimmick for the front page.
Automatic Daily Notifications
After registering, it will automatically notify users about all hashpoints as soon as they become available. Graticules are divided into 100 sub-graticules to allow users to only be notified when a hashpoint is near home, or alternatively, for all accessible hashpoints in a graticule. For more information, see the program's page.
Text Messaging (email) service
| This implementation IS FULLY 30W-compliant. |
If your cell phone supports text messaging to an email address, you can get geohash updates on your phone by sending a formatted text to srv@geohash.info
- Formatting
YYYY-MM-DD Lat Lon Example:
2008-02-18 42 -83
Alternatively, it defaults to the current date (EST for now) and you can just enter Latitude and Longitude
42 -83
- Bugs
- The -0 Issue is still very much an issue.
- This used to display the degree symbol after coordinate elements, but due to poor cell phone support of this character, which resulted in messages cutting off after the first Latitude, I have removed it.
- This is also not a terribly robust solution, but a better (stronger, faster) implementation is in the making.
- Not necessarily a bug, but a desirable feature: it would be nice to be able to omit the '-' character when specifying the date (it just happens to require many keystrokes to type - on my phone)
Text Messaging service (SMS)
| This implementation IS FULLY 30W-compliant. |
Text "GH [date]" to +41774378210, eg:
gh 20091110
A few seconds later you should get an sms response similar to the following:
Relevant DJIA for 2009-11-10 is 10223.01(W) / 10020.62(E). Decimal parts are: 0.02335 0.228005(W) / 0.854495 0.149983(E).
Occasionally you may see a result of <n/a> when information is unavailable. For example, if you are looking at a date where coordinates are only available east of w30, you may see something like:
Relevant DJIA for 2009-11-10 is <n/a>(W) / 10020.62(E). Decimal parts are: <n/a>(W) / 0.854495 0.149983(E).
Not case-sensitive, so "Gh", "gh" etc. are all fine. Don't forget the space between "gh" and the date. The script is also flexible on the date format as long as it's in the Y-m-d order.
The service uses the DJIA source that I maintain.
I recommend testing it once before you are away from home and really need it. Also, don't hesitate to tell me if you don't get an sms back or if you feel that something else is not working properly...
See also SMS DJIA service; suggestions, comments and other feedback to User:Crox.
Email autoresponder
| This implementation IS FULLY 30W-compliant. |
Email or text srv@geohash.info with something like 2008-3-25 42 -71 in the body to get geohash coordinates. Send "usage" to get this same info in the field.
- Source code: https://github.com/timmc/hashflash
- Maintainer: Phyzome
Mobile apps and applications
Geohashdroid (Android)
| This implementation IS FULLY 30W-compliant. |
Geohash Droid, a small, (so far) simple little Geohashing app for Android phones, can be found in the Android Marketplace as a free app. So far, it gets the stock and hash values, plots it out, and follows you as you get closer to it. It also has wiki-updating features (not since recaptcha was installed) and can automatically figure out what graticule has the closest point to where you are. Simple, effective. There's more stuff planned, but that's later.
The project itself is hosted on Google Code. The most recent version (as per this writing) is 0.7.10. If you go from the Marketplace (far easier), feel free to leave reviews and such. If you have something specific to say, either file an issue at the Google Code site, hit the group page, or email me.
Geohashing for the iPhone
| This implementation IS FULLY 30W-compliant. |
I leave you my application for iPhone. You can download it for free following this link.
Please take a look and give your thoughts on my talk page.
Features
- Local and Global geohashing calculation
- Integrated map
- Reverse geocoding if available
- Links to the most popular geohashing sites
- Uses Relet Web Service
- Sharing options:
- Message (SMS & iMessage if available)
- Twitter (iOS 5 or superior)
- Offers map the route (local or global if it possible) on iOS Map's application
- Offers map some dinner/food places or parks to visit on iOS Map's application
- Automatic refresh when the day changes
Geohash for the iPhone
| This implementation IS PARTIALLY 30W-compliant. |
Geohash for the iPhone is available here in the app store (for free). The app is partially 30W compliant. It produces the correct coordinates, but doesn't allow you to select tomorrow's date (during the week) or Monday (from Friday afternoon onward). -- Contact: casey@kckd.org
Geohashing for Windows Phone 8
| This implementation IS FULLY 30W-compliant. |
Geohashing for Windows Phone (link) is a free and open source geohashing app. Notable features:
- Pin locations to the start screen to immediately see where and how far away today's geohash is (updates automatically)
- Full support of past and future geohashes, as long as the DJIA is available
- Can show you the nearest geohash instead of the one for your current graticule
- Send geohash location to the Maps app for navigation instructions
Usage: When opening the app, your location is detected and the according geohash loaded. To change the location for which you want to see the geohash, tap and hold anywhere on the map. Everything else should hopefully be clear.
macHasher
| This implementation IS FULLY 30W-compliant. |
Scottkuma worked feverishly to:
- learn Apple OSX Programming and...
- put together a geohash calculator for the Mac.
- Installation
It's a normal mac application - drag it to your Applications folder, OR just run it from inside the DMG. I think I compiled it as a Universal Binary. If you can't run it on a particular system and/or version of OSX, please let me know.
- Usage
Start by entering your graticule's Lat/Long numbers. The given numbers are for Cincinnati, Ohio.
For today's graticule, just click "Generate!" For dates in the past (or the near-future, for Saturday & Sunday graticules), select the date on the calendar, then click "Generate!"
- Known bugs
- Requires a valid network connection; locks pretty good when one doesn't exist.
- does not calculate east of -30 correctly for dates prior to 5/27/2008
- window doesn't lock its size like I thought it would...
- Planned enhancements
- will allow for saving of a known "home" location
- will calculate distance & bearing to a known location
- will calculate same for adjacent graticules to find a closer geohash
Nokia N900
| This implementation IS FULLY 30W-compliant. |
The Tablet of Adventure is a social adventure gaming tool that supports geohashes. It is available for Maemo 5 (Nokia N900) from Maemo Extras.
With TToA you can seek geohashes in your area or create your own collaborative adventures and share them via Qaiku.
Source code is available from GitHub.
Libraries
D
- Local email tool in D, for Linux
| This implementation IS FULLY 30W-compliant. |
Run this program once a day (for instance, per crontab) to get email notification whenever Google Maps indicates the daily target is nearer than a specified range. The first time around, run it from the commandline to configure. Configuration is stored in ~/.geohash/geohash.cfg. Use --help for info about commandline parameters. Source. Linux 32-bit upx compressed binary. - Ported it again to my own language. Source. Linux 32-bit binary
Erlang
| This implementation IS FULLY 30W-compliant. |
Implementations/Libraries/Erlang
Clojure
| This implementation IS FULLY 30W-compliant. |
A geohash and globalhash library in Clojure: https://github.com/timmc/geohash
Maintained by Phyzome, who also runs an email autoresponder that uses this library.
Java
| This implementation IS FULLY 30W-compliant. |
A Java port of the Python implementation can be found from GitHub.
Javascript
- Semi-manual offline calculator
| This implementation IS FULLY 30W-compliant. |
If you're going to be away from internet access, you'll need to compute the hash locally:
- Download and extract this: http://lab.brainonfire.net/drop/geohash-offline.zip
- Working example: http://lab.brainonfire.net/geohash-offline/calc.html
- Notes
- All you need is a Javascript-enabled browser. Tested in Firefox so far.
- You will have to somehow acquire the Dow's opening value for the appropriate date; there may be a service to do this.
- Remember, if you're east of 30W, you should use the previous day's opening price, even if a new one becomes available later in the day.
- The date is filled in automatically using the current timestamp.
- You'll have to combine the computed fractional coordinates with your graticule coordinates yourself.
- I grabbed MD5 and base conversion code from random internet sites.
k4
| This implementation IS NOT 30W-compliant. |
Mathematica
| This implementation IS FULLY 30W-compliant. |
perl
Geo::Hashing on CPAN
| This implementation IS FULLY 30W-compliant. |
Reusable code library that can be used from any perl program:
Alternative implementations
| This implementation IS FULLY 30W-compliant. |
Alternatives to the official implementation can be found at Implementations/Libraries/Perl.
Python
Code snippets
| This implementation IS FULLY 30W-compliant. |
Various code snippets can be found at Implementations/Libraries/Python.
Python package xkcd.geohash
| This implementation IS NOT 30W-compliant. |
There is Python package xkcd.geohash which is independent of the interactive coordinate calculator (but uses Google Finance as well).
Python 3 standard library
In Python 3.1 and above, an implementation of the geohashing algorithm is included in the antigravity module. Unfortunately importing the module will open a web browser.
>>>import antigravity (opens the xkcd comic) >>>antigravity.geohash(34,-118,b'2012-04-09-13057.57') 34.386614 -118.231675
RESTful implementation with Atom feed
| This implementation IS FULLY 30W-compliant. |
The source for the Atom feed is available through anonymous svn here: https://staticfree.info/svn/ghfeed/
This implementation uses web.py to give simple, clean URLs. To contribute to it, please contact xxv and he can set you up with commit access.
Ruby
| This implementation IS FULLY 30W-compliant. |
Implementations/Libraries/Ruby
Shell Script
| This implementation IS FULLY 30W-compliant. |
Implementations/Libraries/Shell
Miscellaneous utilities
Comic Creator
| This implementation IS FULLY 30W-compliant. |
A python class to recreate the original comic, but for any given date with your own coordinates! Below shows the comic for the first North East Netherlands meetup. Although it fetches the Dow itself, you can add &dowjones=12345.67 if it doesn't do so correctly (e.g., peeron.com is down). Created by Hugo.
http://www.astro.rug.nl/~buddel/cgi-bin/geohashingcomic/geohashingcomic.cgi?year=2008&month=5&day=24&lat=55.218512&lon=6.566854
You can download the script as well if you wish.
In the image, Dow values less than 10,000.00 are padded with leading spaces, however in the algorithm it is not so it is compliant with other the algorithms. As Tim P suggested, the comic is akin to all the bank cheques with "19__" printed on them being used in 2000. The "form" has 5+2 "boxes" because that's how Dow prices are now, but that doesn't mean it can't be different.
- Bugs
- The font sizes are not exactly as the original and there can still be some alignment problems.
- The -0 issue is ignored. Only if you enter -0 as an integer you get an incorrect outcome. You are supposed to enter your own location as a float, up to 6 decimals, everything is okay even when you enter -0.0.
- Backup
Original has stopped working. Draradech set up a backup here (same code):
http://draradech.de/cgi-bin/comic.py?year=2008&month=5&day=24&lat=55.218512&lon=6.566854
Automatic GPX File Generator
| This implementation IS NOT 30W-compliant. |
I have modified the sample perl implementation so that it automatically generates a .gpx file which you can upload to your favourite GPS device/software. Download here Before you use the script, you need to modify it and put your own lat/lon values into the corresponding variables at the beginning. -- Wansti
GeohashGenerator for Popfly
| This implementation IS FULLY 30W-compliant. |
I have created a Popfly block to use for creating mashups at http://www.popfly.com/users/rbuckton/GeohashGenerator. Can be integrated with Virtual Earth, etc. --rbuckton
Geohash module for phenny IRC bot (currently offline)
Provides geohashing related lookups and helpful functions for the #geohashing IRC channel. Documentation at: Relet/Shmulik
Hashie (IRC bot)
| This implementation IS FULLY 30W-compliant. |
Because the above bot and relet are not online Eupeodes created a new bot. Over the coming time features will be implemented in an attempt to fill the gap left by shmulik. Documentation can be found on Eupeodes/Hashie
Probability Calculators
These do not calculate the hash, but instead the probability of the hashpoint to land in certain areas.
- Land usage - calculates the probability of certain types of land (forests, water, and the like).
- Public transport probability - calculates the probability of a certain distance from public transport.
HashPlacer
The HashPlacer is a perl script that allows you to define limit boxes on a map, and will notify you via email if the day's geohash point lands in one of these boxes. This is especially useful if you define a limit box surrounding your favorite park, or your neighborhood, or even your couch. Currently the only areas supported are "boxes"... two latitude points and two longitude points define the corners of a graticule-shaped "box".
GeoHistory
GeoHistory is a perl script that outputs a [kml] file containing every historical geohash point in a specific graticule since a specified date. This can be used to get a retroactive Couch Potato Award, apply for a Curse of Unawareness Award, or simply study past geohash points.
geohashing-gpx.heroku.com
| This implementation IS FULLY 30W-compliant. |
Alech built a web service to get the hash point for a given graticule and day (or for all currently known upcoming ones) in GPX format for use with QLandkarte GT and his Garmin eTrex Legend HCX. It also supports surrounding graticules and has a neat little hack to look up neighbouring (bus, tram, train) stops (this has nothing to do with GPX, OTOH). Check out its documentation, Git repository or information how to use it with QLandkarte GT and let me know any feature requests/bug reports. The hash point data comes from relet's JSON web service, BTW. --Alech 15:07, 18 March 2012 (EDT)
Broken Implementations
Note: Implementations/Broken contains a few more implementations which are known not to work any longer.