Difference between revisions of "Implementations"
(2003) |
imported>Crox m (layout fixes) |
||
(766 intermediate revisions by more than 100 users not shown) | |||
Line 1: | Line 1: | ||
− | + | __TOC__ | |
− | + | = 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 [[DJIA|Dow]]'s opening price for any given day. Details on such services are available at [[Dow Jones Industrial Average]]. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | [[ | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | = Official Implementations = | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | {{:Implementations/Official}} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <div style="clear:both"></div> | |
+ | = Online calculators = | ||
− | + | {{:Implementations/Online}} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <div style="clear:both"></div> | |
− | + | = Feeds / Web Services = | |
− | + | {{:Implementations/Web services}} | |
− | |||
− | |||
− | |||
− | + | <div style="clear:both"></div> | |
− | + | = Mobile apps and applications = | |
− | |||
− | + | {{:Implementations/Apps}} | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | < | + | <div style="clear:both"></div> |
− | < | + | = Libraries = |
− | |||
− | |||
− | |||
− | |||
− | + | {{:Implementations/Libraries}} | |
− | {{ | ||
− | |||
− | |||
− | |||
− | |||
− | = | + | <div style="clear:both"></div> |
− | + | = Miscellaneous utilities = | |
− | |||
− | + | {{:Implementations/Utilities}} | |
− | |||
− | + | <div style="clear:both"></div> | |
+ | = Broken Implementations = | ||
− | + | '''Note: [[Implementations/Broken]] contains a few more implementations which are known not to work any longer.''' | |
− | |||
− | |||
− | |||
− | + | [[Category:Geohashing guide]] | |
− | |||
− | |||
− |
Latest revision as of 21:34, 4 May 2013
Contents
- 1 Definition
- 2 Official Implementations
- 3 Online calculators
- 4 Feeds / Web Services
- 5 Mobile apps and applications
- 6 Libraries
- 7 Miscellaneous utilities
- 8 Broken Implementations
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).
Online calculators
Eupeodes's geohashing map
This implementation IS FULLY 30W-compliant. |
An implementation using openlayers. Gives 3 x 3 hashes, with option to download as GPX. Uses geo.crox as data source. This implementation works very well on both desktop and mobile.
See the help on the site for url parameters.
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.
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.
QDGN is an online tool written by Kripakko. It shows the client's location, as well as the nearest Geohash and its location, both as text and on a map.
Shotgun
This implementation IS FULLY 30W-compliant. |
Shotgun Retro search tool. Multiple locations can be shown on the same map, using custom filters.
(Updated on 12th September 2015 to fix a 30W issue.)
Features:
- Option to limit the search to an area of interest, for example an island you live on, an area close to you, or just a favourite area.
- Search instances of a specific day of the year within the area, for example your birthday or anniversary.
- Show all matching results on a single map using Google Maps markers.
Example uses:
- View all 2015 location on La Gomera. [1]
- Search for 21st May locations on the Isle of Wight since 2008. [2]
- Prove that the last location on land in the Lizard Point was September 22nd, 2019. [3]
Future plans include creating a graphical selector for the graticule, and area of interest.
Note: This tool uses a private data source that needs to be manually updated, so it may be missing the last week or so of recent hashpoints.
Written by Zamzara
KML Tool
This implementation IS FULLY 30W-compliant. |
Please double check the output - it has been tested but ...
Sourcerer has made a geohash KML calculator. The source code is available on GitHub.
- This makes KML data which loads for viewing into Google Earth Desktop or similar applications like Marble. This might download as text if Google Earth Desktop is not installed.
- Why?
- Well there's no point having a dog and barking yourself.
- Google Earth Desktop has powerful functionality and there's not much point re-inventing these features.
Usage instructions, bug reporting and feature requests are on the Sourcerer/KML tool page.
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. |
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. |
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. |
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: https://lab.brainonfire.net/drop/geohash-offline.zip
- Working example: https://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. |
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. |
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
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 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! 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".
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.
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.
- The original, by Hessophanes (No longer works)
- A recreation, by XXOs
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.
Broken Implementations
Note: Implementations/Broken contains a few more implementations which are known not to work any longer.