Implementations

From Geohashing
Revision as of 09:35, 10 April 2012 by imported>Relet (Mobile Apps)

Note: Working on a new structure. Old page below the break

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 IRC channel, 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).

Feeds / Web Services

DJIA sources

See: Dow Jones Industrial Average for a list of data sources for the DJIA openings.

RSS/Atom

Phyzome's feed

This implementation IS FULLY 30W-compliant.

Subscribe to a feed that updates as soon as each day's meetup is calculable for your graticule:

https://lab.brainonfire.net/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.

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.

Mobile apps and applications

Geohash Droid (Android)

This implementation IS FULLY 30W-compliant.
Scan to find the app in the Market

Geohash Droid, a simple Geohashing app for Android phones, can be found here in the Google Play Store as a free app. 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 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 GitHub. The most recent version (as per this writing) is 0.9.5.5. If you go from the Play Store (far easier), feel free to leave reviews and such. If you have something specific to say, please file an issue at the GitHub site or email CaptainSpam.

gHash for the iPhone (under development)

This implementation IS FULLY 30W-compliant.
gHash for iPhone (work in progress)

This is not yet finished, but if you’re interested in learning more or being a beta tester let me know on my talk page.

Features

  • Closest hash point to you (even if it’s in another graticule - good for split graticules)
  • Integrated map
  • Links to either Google Maps or Apple Maps (your choice)
  • Links to the “Internet was here” poster for that hash point

Planned Future Features

  • Phone notification if the day’s hash point is within a certain distance of your location

Possible Future Features

  • Global hash
  • Let me know what you would use!

Nokia N900

This implementation IS FULLY 30W-compliant.
Social adventure screenshot

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:

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.

Implementations/Libraries/k4

Lua

This implementation IS FULLY 30W-compliant.

Geohash and globalhash calculation in Lua (almost pure, uses wget for web access): https://github.com/atenfyr/luaGH

Mathematica

This implementation IS FULLY 30W-compliant.

Geohashing in Mathematica

perl

Geo::Hashing on CPAN

This implementation IS FULLY 30W-compliant.

Reusable code library that can be used from any perl program:

Geo::Hashing Sample code

Alternative implementations

This implementation IS FULLY 30W-compliant.

Alternatives to the official implementation can be found at Implementations/Libraries/Perl.

Python

geohashing.py

A python script by User:Cole that can calculate geohash coordinates, given a graticule. It can calculate globalhashes as well. It is meant to be used from the command line, but is based around functions that can be used for library usage.

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

Rust

This implementation IS FULLY 30W-compliant.

Available on crates.io or GitLab.

Maintained by Kellerkind.

Shell Script

This implementation IS FULLY 30W-compliant.

Implementations/Libraries/Shell

C#

This implementation IS FULLY 30W-compliant.

A C# command line tool, using dotnet core 3.1, where the implementation can easily be copied to other projects. Just copy two files and don't forget to mention where you found them.

Relies on geo.crox.net for the Dow Jones industrial average.

Source code and a windows binary is available on Göran Roseen's github

Maintained by Göran Roseen.

Miscellaneous utilites

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! Created by Hugo.

The comic creator has been moved to github: https://github.com/hugobuddel/geohashingcomic

It used to run as a cgi service, but these are all down now.

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.

Hashie (IRC bot)

This implementation IS FULLY 30W-compliant.

Because the Shmulik 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".

User:AeroIllini/HashPlacer

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.

User:AeroIllini/GeoHistory

notify-send bash tool

Linux users can use this bash script to give them desktop warnings of nearby geohashes. notify-send, bc, sed, xml_grep are needed to run the tool. It will but has not been tested within cron at the time of this writting.

Regiohashing Minesweeper Tool

These were created to help people display their regiohash achievement progress.

Mepohash

This implementation IS FULLY 30W-compliant.

Mepo is "a fast, simple, hackable OSM map viewer for mobile and desktop Linux." It also happens to be my maps app of choice. Due to it's scriptable nature, I naturally wanted to integrate geohashing into my map solution to make geohashing on my Pinephone as seamless as possible. Also, as someone newer to bash scripting this was an interesting exercise in creating an implementation from scratch. I bring to you mepo_geohash.sh, a simple 30W compliant script that opens Mepo to the detected graticule's hashpoint of the day. By moving the map and calling the script again, you can get the hashpoint for the graticule you moved to. You can view the script at this mailing list, whether it gets accepted into the main project or not I hope someone can get use out of this handy little script.

User:Hamblingreen

Note: Implementations/Broken contains a few more implementations which are known not to work any longer.


Old Page

macHasher

This implementation IS FULLY 30W-compliant.
macHasher screenshot

Scottkuma worked feverishly to:

  1. learn Apple OSX Programming and...
  2. 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

Geohash for the iPhone

This implementation IS PARTIALLY 30W-compliant.
Geohash screenshot

Geohash for the iPhone is available here in the app store (for free).

The new version of Geohash now supports looking forward over the weekend. Yay!

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).

Next feature up? The most requested feature by far is the ability to view Geohash locations in surrounding graticules.

I'll also be publishing the source code when I get a chance. (Update: I'm still a little unsure about the implications of Apple's NDA on their SDK. I'm trying to determine if releasing the source violates the NDA or not. It'll be out for sure once I make sure I won't get spanked by Apple!)

Thanks to Scottkuma for a spot of help with the MD5 hash conversion.

PS. Obviously, feel free to leave reviews on the app store telling everyone what you think, good and bad, but also send feedback to me (casey@kckd.org), so I can respond directly!

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 much basic that it works from virtually every phone which isn't entirely incapable of browsing.

Usage information is available from it's own page.

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.

Geohash Droid (for Android phones)

This implementation IS FULLY 30W-compliant.
Scan to find the app in the Market

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.

So hey, give it a shot! What've you got to lose? Enjoy!

The Tablet of Adventure (Geohash for Nokia N900)

This implementation IS FULLY 30W-compliant.
Social adventure screenshot

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.

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.

Geohash module for phenny IRC bot

This implementation IS FULLY 30W-compliant.

This page describes the geohashing module of the Phenny IRC bot, which currently runs as user "Shmulik" or "geolik" on the #geohashing IRC channel.

  • He can provide you with geohashing related information lookups.
  • He notifies the channel of important recent changes.

He understands the following commands:

.# [location [date]] 
returns the geohash (or globalhash) for the given place and date, and a location .lookup for this place. 
Parameters in square brackets are optional. This method is also triggered by the publication of new 
coordinates by zbot, supplementing its information with the matching globalhashes.
location: A string describing a graticule or populated place, or the string "global" for globalhashes. 
It will try to identify the name using the list of all graticules, and http://geonames.org. 
Defaults to the current globalhash if omitted. If the location name contains spaces, replace these by a '+'
date: A date in the ISO format yyyy-mm-dd. Defaults to a current date (for some time zones) if omitted.
.where's location|username
1) returns the corresponding graticule name and coordinates for the given search term. 
2) If the location is not found in the graticule database, it will try to find a user of that name. If the 
user has registered in location categories (for example with Template:asg) it will display the location(s)
where the user is "at home".
3) finally, if both fails, it may suggest places from the geonames database and provide their coordinates.

location: A pair of coordinates, separated with a space and/or a comma. Alternatively, the name of a 
graticule. Alternatively, the name of any populated place. 
.lookup lat,lon
returns a human readable, hierarchical identification of the given coordinates. The output may vary, 
from a mere country code to street-level details, depending on the available information.
lat,lon: The latitude and longitude of a location, separated by a space and/or a comma.
.rcwatch
Runs the RecentChanges watch daemon, if it is not running already. You should not need this, unless it 
has been stopped before.
.stopwatch
Sets a flag that stops the RecentChanges watch daemon before its next update cycle. Do not use, unless 
in case of wiki spam proliferating into the update messages. 
.addwatch tag=regex
Adds a new regular expression to the notification list. If the title, comment, or author of a recent change 
match the regular expression, a notification labeled with "tag" will be sent to the IRC channel. This 
command only works in public channels.
.watchlist
Displays the current list of notifications, and their numbers. This command should be used in a private 
message preferably, as it will return the whole list.
.rmwatch number
Removes a notification from the watchlist. Number is the rule index provided by the .watchlist command.
Examples
relet: .# San+Francisco 2008-05-22
Shmulik: Geohash for San Francisco, United States on 2008-05-22 is: 37.972874275358, -122.238696518558. http://geohash.org/9qc042u2pbvd
Shmulik: Location: Alhambra Valley Rd, Contra Costa, California, US - distance: 0.11km.
relet: .where's Paris
Shmulik: There's Paris, Texas at 33,-95. http://geohashing.org/33,-95
Shmulik: There's Paris, France at 48,2. http://geohashing.org/48,2
relet: .lookup 52.5785927440891,13.8874053955078
Shmulik: Location: Earth, Europe, Germany, Brandenburg, Strausberg.
relet: .addwatch A new report on Main Page?=Template:Expedition Images/
Shmulik: Notification installed. tag 'A new report on Main Page?' = pattern 'Template:Expedition Images/'
Shmulik: New page: File talk:2010011233-81LM02.JPG was created by Reinhard. (65+x)

The code for this module is available in the python geohashing toolshed at http://relet.net/trac/pygeohashing - it has various dependencies though.

Other, less geohashing or wiki related commands
.weather location
The commands .weather, .now, .3day and .7day all show weather reports for various time spans for a given location
.seen person
Tells you when person was last seen saying something in the IRC channel
Shmulik, tell person ...
Stores a message which will be displayed to "person" as soon as they say something in the IRC channel.
.grab [user]
Puts the last line said [by that user] into the quote archive. 
.quote [user]
Recalls a random quote [by that user].

Active Geohasher

This implementation IS FULLY 30W-compliant.

Active geohasher is a web application by Sermoa which provides resources for geohashers. You can subscribe to graticules to receive a daily email 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

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.

Flattr-badge-large.png

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)

Geco

This implementation IS FULLY 30W-compliant.

A re-implementation by Relet of the official map using leaflet/cloudmade and the above web service. By using geo.crox as a data source, it is hopefully more reliable than the official map.

http://relet.net/geco

Flattr-badge-large.png

Parameters:

  • lat - latitude of the initial graticule
  • lon - longitude of the initial graticule
  • zoom - initial zoom level
  • date - initial date in YYYY-MM-DD format

e.g: http://relet.net/geco/?date=2005-05-26&lat=37&lon=-122&zoom=8

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".

User:AeroIllini/HashPlacer

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)