Difference between revisions of "User:Hessophanes/Regiohashing"

From Geohashing
imported>Hessophanes
(Add South America. Thanks for working so hard!)
imported>Hessophanes
m
 
(79 intermediate revisions by 25 users not shown)
Line 5: Line 5:
 
While moving from one flat to another, I had to live without ISP for a few weeks... and as I sat there, determined to waste my time by dedicating it to some totally insane task even without internet access, I came up with this: several active regiohashers have started to create loose tables with minesweeper images showing their progress - why not take this minesweeper thing to the next level and create true regiohash minesweeper boards?
 
While moving from one flat to another, I had to live without ISP for a few weeks... and as I sat there, determined to waste my time by dedicating it to some totally insane task even without internet access, I came up with this: several active regiohashers have started to create loose tables with minesweeper images showing their progress - why not take this minesweeper thing to the next level and create true regiohash minesweeper boards?
  
After doing a first proof-of-concept using only a shell script and the wonderful ImageMagick toolset (which took almost 8 seconds to render a full Australia board) I did it once again with a speedy language (read: C).
+
My first proof-of-concept consisted of only a shell script and the wonderful ImageMagick toolset; but with that it took almost 8 seconds to render a full Australia board. So I soon wrote the whole rendering process from scratch in C, but still relied on ImageMagick to do the final XPM->PNG conversion. This brought the Australia rendering time down to 1 second, but a full world map still took ages (almost 10 seconds including data transfer). So finally (more than one year after the project started) I dropped the XPM intermediate step - the PNG images are now written directly from the pixel data courtesy of libpng.
  
As it is prohibited to directly reference foreign images from wiki sites, interested users have to query the CGI themselves, copy the image into the wiki and include that in their page.
+
== How to use it... ==
 +
 
 +
Possible base URLs are:
 +
 
 +
[http://hessophanes.de/xkcd/xkcdregio.cgi? http://hessophanes.de/xkcd/xkcdregio.cgi?] (running v2.111)
  
== How to use it... ==
+
Now you just tack the parameters of your choice to it. Here's the list:
  
The request URL looks like one of these:
+
* '''Querying metadata'''
 +
** ''version'': All other parameters are ignored. Returns a PNG image with the current version number.
 +
** ''about'': All other parameters are ignored. Displays the list of known regions (as text/plain).
  
http://130.149.11.99/hesso/xkcdregio.cgi?region=YOURREGION&subregion=YOURSUBREGION&visited=GRATICULELIST&home=HOMEGRAT&started=FIRSTHASH
+
* '''Selecting (a part of) the world'''
http://130.149.11.99/hesso/xkcdregio.cgi?region=YOURREGION&subregion=YOURSUBREGION&wikiuser=WIKIUSER&started=FIRSTHASH
+
** ''region=name'': This is the only mandatory parameter. It takes a colon-separated list of regions. The first one determines the size and shape of the board and has to be the outermost. You may continue the list with successively smaller subregions, but you have to list them without omissions (i.e. ''region=Europe:Vlaanderen'' won't work, but ''region=Europe:Belgium:Vlaanderen'' will). In order to keep the list short you may use ISO-3166 abbreviations (the ''about'' list contains these, too). There is now even an abbreviation ''W'' which selects a map of the whole world. - Matching is done top to bottom (continent, nation, state...), so Germany will match ''DE'' before Delaware now.
  
* Common parameters
+
* '''Entering your progress manually'''
** ''region=Regionname'': This is the only mandatory parameter. It determines the size and shape of the board. See below for a list of currently supported regions.
+
** ''home=lat.lng'': If you want, you can specify your home graticule. If you have visited a geohash there, it will be marked with a green flag instead of a red one.
** ''subregion=Subregionname'': If you don't want to aim for the full region, you may specify a subregion which will be drawn onto the map as a yellow borderline.
+
** ''started=yyyymmdd'': If you enter your first visited geohash for this regiohash attempt, a day counter (number of days since your first hash in this region) will be added in the top right corner.
** ''start=yyyymmdd'': If you enter your first visited geohash for this regiohash attempt, a day counter will be added in the top right corner.
+
** ''visited=lat.lng.lat.lng....'': This is your list of visited graticules.
* Progress parameters
 
** Manual
 
*** ''home=lat.lng'': This should be your home graticule. If you have visited a geohash there, it will be marked with a green flag instead of a red one.
 
*** ''visited=lat.lng.lat.lng....'': This is your list of visited graticules (which might become very long as time flies by).
 
** Automatic
 
*** ''wikiuser=User'': This makes the CGI script attempt to automagically parse your wiki userpage for your home graticule (by looking for an <nowiki>{{ASG}}</nowiki> tag) and your visited geohashes (by including all links that match <nowiki>[[\d{4}-\d\d-\d\d[_ ]-?\d{1,3}[_ ]-?\d{1,3}|</nowiki>). This has some intrinsic weaknesses, though - see below.
 
  
E.g.:
+
* '''Redirecting the tool to your userpage'''
 +
** ''wikiuser=User'': This makes the CGI script attempt to automagically parse your wiki userpage for your home graticule (by looking for an <nowiki>{{ASG}}</nowiki> tag) and your visited geohashes (by including all links that match <nowiki>[[\d{4}-\d\d-\d\d[_ ]-?\d{1,3}[_ ]-?\d{1,3}|</nowiki>). This has some intrinsic weaknesses, though (see below) - but it is so much more comfortable.
  
http://130.149.11.99/hesso/xkcdregio.cgi?region=Germany&subregion=Brandenburg&visited=52.13.52.12&home=52.13
+
Here are a few examples:
http://130.149.11.99/hesso/xkcdregio.cgi?region=Germany&subregion=Brandenburg&wikiuser=Hessophanes
 
  
Go ahead and play with it, but please keep in mind that I'm hosting this on a university server. Play nicely.
+
http://hessophanes.de/xkcd/xkcdregio.cgi?region=Germany:Brandenburg&visited=52.13.52.12&home=52.13
 +
http://hessophanes.de/xkcd/xkcdregio.cgi?region=EU:DE:BR&wikiuser=Hessophanes
  
 
== What it looks like...==
 
== What it looks like...==
  
Again with myself as example:
+
A very old example of my board (not that I've visited more graticules in the meantime - just the date counter in the top-right corner is completely off):
  
 
[[Image:Regiohash_Hessophanes.png|example regiohash]]
 
[[Image:Regiohash_Hessophanes.png|example regiohash]]
  
* The counter in the top left corner shows the remaining graticules of the smallest (sub)region that hasn't been completed yet. When we add North America and Asia I guess I'll have to enlarge it to four digits, though.
+
* The counter in the top left corner shows the remaining graticules of the smallest (sub)region that hasn't been completed yet.
  
 
== What it still lacks... ==
 
== What it still lacks... ==
  
# The tool does not (and will never be able to) know which (sub)region a certain geohash visit pertains to. It would need full Google and DJIA data to accomplish that. Still ''wikiuser='' is not completely useless - I'll add a parameter ''notvisited='' so you can still benefit from the comfort of the parser and correct its mistakes.
+
* The tool does not (and will never be able to) know which (sub)region a certain geohash visit pertains to. It would need full Google and DJIA data to accomplish that. Still ''wikiuser='' is not completely useless - someday I'll add a parameter ''notvisited='' so you can still benefit from the comfort of the parser and correct its mistakes.
  
 
== List of available regions ==
 
== List of available regions ==
  
Now that the code is working, data is starting to trickle in. I've converted Australia myself using the wonderful [[User:UnwiseOwl/Australia|map]] that [[User:UnwiseOwl|UnwiseOwl]] is compiling.
+
All this wouldn't have been possible if it weren't for all the submitters who have provided me with maps of regions that would have taken me days to chart... thank you!
Thanks to all submitters!
 
  
 
{|border=1
 
{|border=1
Line 56: Line 56:
 
!submitted by
 
!submitted by
 
|-
 
|-
|Germany
+
|Germany (DE)
|Schleswig-Holstein, Niedersachsen, Mecklenburg-Vorpommern, Sachsen-Anhalt,
+
|Schleswig-Holstein (SH), Niedersachsen (NI), Mecklenburg-Vorpommern (MV), Sachsen-Anhalt (ST), Nordrhein-Westfalen (NW), Brandenburg (BR), Thueringen (TH), Sachsen (SN), Hessen (HE), Rheinland-Pfalz (RP), Saarland (SL), Baden-Wuerttemberg (BW), Bayern (BY), Berlin (BE), Bremen (HB), Hamburg (HH)
Nordrhein-Westfalen, Brandenburg, Thueringen, Sachsen, Hessen,
 
Rheinland-Pfalz, Saarland, Baden-Wuerttemberg, Bayern,
 
Berlin, Bremen, Hamburg
 
 
|[[User:Hessophanes|Hessophanes]]
 
|[[User:Hessophanes|Hessophanes]]
 
|-
 
|-
|Australia
+
|Netherlands (NL)
|Western Australia, Northern Territory, South Australia, Queensland,
+
|Friesland (FR), Groningen (GR), Noord-Holland (NH), Drenthe (DR), Overijssel (OV), Flevoland (FL), Utrecht (UT), Gelderland (GLD), Zuid-Holland (ZH), Zeeland (ZL) 
New South Wales, Victoria, Tasmania, Australian Capital Territory
+
|[[User:Arvid|Arvid]]
 +
|-
 +
|Belgium (BE)
 +
|Vlaanderen (VL), Antwerpen (AW), Limburg (LB), Oost-Vlaanderen (OV), Vlaams-Brabant (VB), West-Vlaanderen (WV), Wallonie (WA), Brabant-Wallon (BA), Hainaut (HI), Liege (LI), Luxembourg (LU), Namur (NA)
 +
|[[User:Arvid|Arvid]]
 +
|-
 +
|Australia (AU)
 +
|Western Australia (WA), Northern Territory (NT), South Australia (SA), Queensland (QLD), New South Wales (NSW), Victoria (VIC), Tasmania (TAS), Australian Capital Territory (ACT)
 
|[[User:UnwiseOwl|UnwiseOwl]]
 
|[[User:UnwiseOwl|UnwiseOwl]]
 
|-
 
|-
|Europe
+
|New Zealand (NZ)
|Iceland, Portugal, Ireland, France, Netherlands, Denmark,
+
| --
United Kingdom, Spain, Italy, Sweden, Belgium, Norway,
+
|[[User:Greenslime|Greenslime]] and [[User:JimmyNZ|JimmyNZ]]
Germany, Finland, Poland, Switzerland, Austria,
+
|-
Czech Republic, Russia
+
|Europe (EU)
 +
|Iceland (IS), Norway (NO), Sweden (SE), Finland (FI), Ireland (IE), United Kingdom (UK), Denmark (DK), Portugal (PT), Spain (ES), France (FR), Belgium (BE), Netherlands (NL), Germany (DE), Switzerland (CH), Austria (AT), Italy (IT), Slovenia (SI), Croatia (HR), Bosnia and Herzegovina (BA), Serbia (RS), Montenegro (ME), Albania (AL), Macedonia (MK), Greece (GR), Poland (PL), Czech Republic (CZ), Slovakia (SK), Hungary (HU), Romania (RO), Bulgaria (BG), Estonia (EE), Latvia (LV), Lithuania (LT), Belarus (BY), Ukraine (UA), Moldova (MD), Russia (RU)
 
|[[User:Danatar|Danatar]]
 
|[[User:Danatar|Danatar]]
 
|-
 
|-
|South America
+
|South America (SA)
|Brazil, Chile, Ecuador, Galapagos, Peru, Venezuela,
+
| Colombia (CO), Venezuela (VE), Guyana (GY), Suriname (SR), French Guiana (GF), Brazil (BR), Bolivia (BO), Paraguay (PY), Uruguay (UY), Argentina (AR), Chile (CL),  Peru (PE), Ecuador (EC), Galapagos (''GX'')
Suriname, Paraguay, Uruguay, Argentia, Colombia,
+
|[[User:Joannac|Joannac]]
Guyana, French Guiana, Bolivia
+
|-
|[[User:Joannac|Joannac]] & [[User:UnwiseOwl|UnwiseOwl]]
+
|North America (NA)
 +
|Canada (CA), United States (US), Mexico (MX), Belize (BZ), Guatemala (GT), El Salvador (SV), Honduras (HN), Nicaragua (NI), Costa Rica (CR), Panama (PA), Bermuda (BM), Bahamas (BS), Cuba (CU), Cayman Islands (KY), Jamaica (JM), Dominican Republic (DO), Haiti (HT), Puerto Rico (PR), Virgin Islands (VI), British Virgin Islands (VG), Anguilla (AI), St. Kitts and Nevis (KN), Antigua and Barbuda (AG), Montserrat (MS), Guadeloupe (GP), Dominica (DM), Martinique (MQ), St. Lucia (LC), St. Vincent and the Grenadines (VC), Barbados (BB),Grenada (GD), Trinidad and Tobago (TT), Netherlands Antilles (AN)
 +
|[[User:Joannac|Joannac]] and [[User:UnwiseOwl|UnwiseOwl]]
 +
|-
 +
|Africa (AF)
 +
|Algeria (DZ), Tunisia (TN), Libya (LY), Egypt (EG), Morocco (MA), Western Sahara (EH), Mauritania (MR), Mali (ML), Niger (NE), Chad (TD), Sudan (SD), Eritrea (ER), Ethiopia (ET), Djibouti (DJ), Somalia (SO), Senegal (SN), Gambia (GM), Guinea-Bissau (GW), Sierra Leone (SL), Liberia (LR), Ivory Coast (CI), Burkina Faso (BF), Ghana (GH), Togo (TG), Benin (BJ), Nigeria (NG), Cameroon (CM), Central African Republic (CF), Equatorial Guinea (GQ), Gabon (GA), Congo (CG), Democratic Republic of the Congo (CD), Uganda (UG), Burundi (BI), Rwanda (RW), Kenya (KE), Tanzania (TZ), Zambia (ZM), St. Helena (SH), Angola (AO), Zimbabwe (ZW), Malawi (MW), Mayotte (YT), Namibia (NA), Mozambique (MZ), Comoros (KM), Mauritius (MU), Seychelles (SC), Botswana (BW), Lesotho (LS), Swaziland (SZ), Reunion (RE), South Africa (ZA), Madagascar (MG), Glorioso Islands (''IG'')
 +
|[[User:Joannac|Joannac]] and [[User:UnwiseOwl|UnwiseOwl]]
 +
|-
 +
|Canada (CA)
 +
|Alberta (AB), British Columbia (BC), Manitoba (MB), New Brunswick (NB), Newfoundland And Labrador (NL), Nova Scotia (NS), Northwest Territories (NT), Nunavut (NU), Ontaria (ON), Prince Edward Island (PE), Quebec (QC), Saskatchewan (SK), Yukon Territory (YT)
 +
|[[User:Wmcduff|Wmcduff]]
 +
|-
 +
|Chile (CL)
 +
|Tarapaca (TA), Antofagasta (AN), Atacama (AT), Coquimbo (CO), Valparaiso (VS), O Higgins (LI), Maule (ML), Biobio (BI), Araucania (AR), Los Lagos (LL), Aisen (AI), Magellanes (MA), Santiago Metropolitan (RM), Los Rios (''LR''), Arica and Parinacota (''AP'')
 +
|[[User:Wmcduff|Wmcduff]]
 +
|-
 +
|United States of America (US)
 +
|Alabama (AL), Alaska (AK), Arizona (AZ), Arkansas (AR), California (CA), Colorado (CO), Connecticut (CT), Delaware (DE), District Of Columbia (DC), Florida (FL), Georgia (GA), Hawaii (HI), Idaho (ID), Illinois (IL), Indiana (IN), Iowa (IA), Kansas (KS), Kentucky (KY), Louisiana (LA), Maine (ME), Maryland (MD), Massachusetts (MA), Michigan (MI), Minnesota (MN), Mississippi (MS), Missouri (MO), Montana (MT), Nebraska (NE), Nevada (NV), New Hampshire (NH), New Jersey (NJ), New Mexico (NM), New York (NY), North Carolina (NC), North Dakota (ND), Ohio (OH), Oklahoma (OK), Oregon (OR), Pennsylvania (PA), Rhode Island (RI), South Carolina (SC), South Dakota (SD), Tennessee (TN), Texas (TX), Utah (UT), Vermont (VT), Virginia (VA), Washington (WA), West Virginia (WV), Wisconsin (WI), Wyoming (WY)
 +
|[[User:Joannac|Joannac]] and [[User:UnwiseOwl|UnwiseOwl]]
 +
|-
 +
|Poland (PL)
 +
|Dolnoslaskie (DS), Kujawsko-Pomorskie (KP), Lubelskie (LU), Lubuskie (LB), Lodzkie (LD), Malopolskie (MA), Mazowieckie (MZ), Opolskie (OP), Podkarpackie (PK), Podlaskie (PD), Pomorskie (PM), Slaskie (SL), Swietokrzyskie (SK), Warminsko-Mazurskie (WN), Wielkopolskie (WP), Zachodniopomorskie (ZP)
 +
|[[User:Charfa|Charfa]]
 +
|}
 +
 
 +
This table is manually kept up to date, so it may contain typos or just be plain wrong at times. If that seems to be the case, ask the tool itself using the ''version'' and ''about'' parameters (see above).
 +
 
 +
=== List of upcoming regions ===
 +
 
 +
Just to prevent duplicate work...
 +
 
 +
{|border=1
 +
!Region
 +
!Progress
 +
|-
 +
|Asia
 +
|Region mapped. Just waiting for a spare month to type up the results.
 +
|-
 +
|Mare Pacifica
 +
|Region mapped, countries forthcoming (honest).
 
|}
 
|}
  
 
== How to add regions ==
 
== How to add regions ==
  
If someone wants to lend a hand, great! I'd prefer email submissions to &lt;jckn@gmx.net&gt; (that address is already heavily spam-infested, obfuscation would be futile)... the format is (just making up an example here):
+
If someone wants to lend a hand, great! I prefer email submissions to &lt;jckn@gmx.net&gt; (that address is already heavily spam-infested, obfuscation would be futile), and the final format looks like this (just making up an example here):
  
 
<pre>
 
<pre>
{"RegionName", "TAG", (lat-top), (lat-bot), (lng-left), (lng-right),
+
RegionName;ISO;lat-n;lat-s;lng-w;lng-e;
  "oooooo00oooo" \
+
oooooo00oooo
  "oooo0000000o" \
+
oooo0000000o
  "ooo00000o000" \
+
ooo00000o000
  "ooo000000000" \
+
ooo000000000
  "oooooooo000o"},
+
oooooooo000o;
 
+
;SubRegion1;SUB:ISO;lat-n;lat-s;lng-w;lng-e;
/* ... */
+
oooooo00oooo
 
+
oooo###0000o
{"SubRegion1", "ST1", "TAG",
+
ooo####0o000
  "oooooo00oooo" \
+
ooo###000000
  "oooo###0000o" \
+
oooooooo000o;
  "ooo####0o000" \
+
;SubRegion2;SUB:ISO;lat-n;lat-s;lng-w;lng-e;
  "ooo###000000" \
+
oooooo##oooo
  "oooooooo000o"},
+
oooo00#####o
{"SubRegion2", "ST2", "TAG",
+
ooo000##o000
  "oooooo##oooo" \
+
ooo00###0000
  "oooo00#####o" \
+
oooooooo000o;
  "ooo000##o000" \
+
;SubRegion3;SUB:ISO;lat-n;lat-s;lng-w;lng-e;
  "ooo00###0000" \
+
oooooo00oooo
  "oooooooo000o"},
+
oooo000000#o
{"SubRegion3", "ST3", "TAG",
+
ooo00000o###
  "oooooo00oooo" \
+
ooo0000#####
  "oooo000000#o" \
+
oooooooo###o;
  "ooo00000o###" \
 
  "ooo0000#####" \
 
  "oooooooo###o"},
 
 
</pre>
 
</pre>
  
* The tags should consist of one to three characters and should ideally match ISO 3166-1 and -2. They are currently not exposed, but I want to keep the option open to add small pictograms/flags/labels in the top bar.
+
But of course I also accept other forms of submission - converting the data to fit my tool is usually no problem.
* The second tag of the subregion should match the tag of the corresponding region.
 
* No array declarations, just define the elements. I'm employing some crazy preprocessor constructs to include everything at the right place and still allow for regions and their corresponding subregions to be stored close to each other in the same header file.
 
* I'm zealously sanitizing CGI input: the only accepted characters are [A-Za-z0-9 =.-] - if your region name contains non-ascii chars, please replace those. (%xx constructs are decoded before matching against that char list, of course.)
 
  
[http://130.149.11.99/hesso/Region_Europe.h Example: current contents of Europe header file]
+
* The tags are taken from ISO-3166-1 and -2, when available. If there is no entry, make one up that doesn't collide with the ISO (e.g. I had to invent GX for Galapagos).
 +
* Toplevel regions (i.e. continents) only bear their own ISO code, subregions have their parent appended (e.g. ''EU'' and ''DE:EU'', respectively). Note that this is the other way round compared to the ''region='' CGI parameter.
 +
* The two map formats are also equivalent now. The tool converts [o0#] maps to [o0] ones by replacing 0 with o and # with 0. It is just more convenient to chart subregions by copying the parent map and replacing a few 0s, so both are (and will be) supported.
 +
* I'm zealously sanitizing CGI input: the only accepted characters are [A-Za-z0-9 =.:-] - if your region name contains non-ascii chars, please replace those. (%xx constructs are decoded before matching against that char list, of course.)
  
 
== Feedback ==
 
== Feedback ==
  
... per IRC or talk page, as usual.
+
Ping me in #geohashing (if I happen to be there) or leave a notice on my talk page.
  
 
== My agenda ==
 
== My agenda ==
  
* Add 4th digit for the grat counter.
 
* Support arbitrary nesting of regions. Slightly redesign region storage format.
 
* Stop compiling the maps into the binary. It was easy to code and comfortable while there were only few maps, but now the binary is growing at an insane pace.
 
 
* Release the code!
 
* Release the code!
* Optimize, Europe is taking way too long to generate. What if I wanted a world map?
 
  
[[Category:Regional Geohash map]]
+
[[Category:Regional geohash map]]
 +
[[Category:Fun stuff]]

Latest revision as of 11:37, 22 August 2010

How to fancifully display your regiohash progress

How it began...

While moving from one flat to another, I had to live without ISP for a few weeks... and as I sat there, determined to waste my time by dedicating it to some totally insane task even without internet access, I came up with this: several active regiohashers have started to create loose tables with minesweeper images showing their progress - why not take this minesweeper thing to the next level and create true regiohash minesweeper boards?

My first proof-of-concept consisted of only a shell script and the wonderful ImageMagick toolset; but with that it took almost 8 seconds to render a full Australia board. So I soon wrote the whole rendering process from scratch in C, but still relied on ImageMagick to do the final XPM->PNG conversion. This brought the Australia rendering time down to 1 second, but a full world map still took ages (almost 10 seconds including data transfer). So finally (more than one year after the project started) I dropped the XPM intermediate step - the PNG images are now written directly from the pixel data courtesy of libpng.

How to use it...

Possible base URLs are:

http://hessophanes.de/xkcd/xkcdregio.cgi? (running v2.111)

Now you just tack the parameters of your choice to it. Here's the list:

  • Querying metadata
    • version: All other parameters are ignored. Returns a PNG image with the current version number.
    • about: All other parameters are ignored. Displays the list of known regions (as text/plain).
  • Selecting (a part of) the world
    • region=name: This is the only mandatory parameter. It takes a colon-separated list of regions. The first one determines the size and shape of the board and has to be the outermost. You may continue the list with successively smaller subregions, but you have to list them without omissions (i.e. region=Europe:Vlaanderen won't work, but region=Europe:Belgium:Vlaanderen will). In order to keep the list short you may use ISO-3166 abbreviations (the about list contains these, too). There is now even an abbreviation W which selects a map of the whole world. - Matching is done top to bottom (continent, nation, state...), so Germany will match DE before Delaware now.
  • Entering your progress manually
    • home=lat.lng: If you want, you can specify your home graticule. If you have visited a geohash there, it will be marked with a green flag instead of a red one.
    • started=yyyymmdd: If you enter your first visited geohash for this regiohash attempt, a day counter (number of days since your first hash in this region) will be added in the top right corner.
    • visited=lat.lng.lat.lng....: This is your list of visited graticules.
  • Redirecting the tool to your userpage
    • wikiuser=User: This makes the CGI script attempt to automagically parse your wiki userpage for your home graticule (by looking for an {{ASG}} tag) and your visited geohashes (by including all links that match [[\d{4}-\d\d-\d\d[_ ]-?\d{1,3}[_ ]-?\d{1,3}|). This has some intrinsic weaknesses, though (see below) - but it is so much more comfortable.

Here are a few examples:

http://hessophanes.de/xkcd/xkcdregio.cgi?region=Germany:Brandenburg&visited=52.13.52.12&home=52.13
http://hessophanes.de/xkcd/xkcdregio.cgi?region=EU:DE:BR&wikiuser=Hessophanes

What it looks like...

A very old example of my board (not that I've visited more graticules in the meantime - just the date counter in the top-right corner is completely off):

example regiohash

  • The counter in the top left corner shows the remaining graticules of the smallest (sub)region that hasn't been completed yet.

What it still lacks...

  • The tool does not (and will never be able to) know which (sub)region a certain geohash visit pertains to. It would need full Google and DJIA data to accomplish that. Still wikiuser= is not completely useless - someday I'll add a parameter notvisited= so you can still benefit from the comfort of the parser and correct its mistakes.

List of available regions

All this wouldn't have been possible if it weren't for all the submitters who have provided me with maps of regions that would have taken me days to chart... thank you!

Region Subregion submitted by
Germany (DE) Schleswig-Holstein (SH), Niedersachsen (NI), Mecklenburg-Vorpommern (MV), Sachsen-Anhalt (ST), Nordrhein-Westfalen (NW), Brandenburg (BR), Thueringen (TH), Sachsen (SN), Hessen (HE), Rheinland-Pfalz (RP), Saarland (SL), Baden-Wuerttemberg (BW), Bayern (BY), Berlin (BE), Bremen (HB), Hamburg (HH) Hessophanes
Netherlands (NL) Friesland (FR), Groningen (GR), Noord-Holland (NH), Drenthe (DR), Overijssel (OV), Flevoland (FL), Utrecht (UT), Gelderland (GLD), Zuid-Holland (ZH), Zeeland (ZL) Arvid
Belgium (BE) Vlaanderen (VL), Antwerpen (AW), Limburg (LB), Oost-Vlaanderen (OV), Vlaams-Brabant (VB), West-Vlaanderen (WV), Wallonie (WA), Brabant-Wallon (BA), Hainaut (HI), Liege (LI), Luxembourg (LU), Namur (NA) Arvid
Australia (AU) Western Australia (WA), Northern Territory (NT), South Australia (SA), Queensland (QLD), New South Wales (NSW), Victoria (VIC), Tasmania (TAS), Australian Capital Territory (ACT) UnwiseOwl
New Zealand (NZ) -- Greenslime and JimmyNZ
Europe (EU) Iceland (IS), Norway (NO), Sweden (SE), Finland (FI), Ireland (IE), United Kingdom (UK), Denmark (DK), Portugal (PT), Spain (ES), France (FR), Belgium (BE), Netherlands (NL), Germany (DE), Switzerland (CH), Austria (AT), Italy (IT), Slovenia (SI), Croatia (HR), Bosnia and Herzegovina (BA), Serbia (RS), Montenegro (ME), Albania (AL), Macedonia (MK), Greece (GR), Poland (PL), Czech Republic (CZ), Slovakia (SK), Hungary (HU), Romania (RO), Bulgaria (BG), Estonia (EE), Latvia (LV), Lithuania (LT), Belarus (BY), Ukraine (UA), Moldova (MD), Russia (RU) Danatar
South America (SA) Colombia (CO), Venezuela (VE), Guyana (GY), Suriname (SR), French Guiana (GF), Brazil (BR), Bolivia (BO), Paraguay (PY), Uruguay (UY), Argentina (AR), Chile (CL), Peru (PE), Ecuador (EC), Galapagos (GX) Joannac
North America (NA) Canada (CA), United States (US), Mexico (MX), Belize (BZ), Guatemala (GT), El Salvador (SV), Honduras (HN), Nicaragua (NI), Costa Rica (CR), Panama (PA), Bermuda (BM), Bahamas (BS), Cuba (CU), Cayman Islands (KY), Jamaica (JM), Dominican Republic (DO), Haiti (HT), Puerto Rico (PR), Virgin Islands (VI), British Virgin Islands (VG), Anguilla (AI), St. Kitts and Nevis (KN), Antigua and Barbuda (AG), Montserrat (MS), Guadeloupe (GP), Dominica (DM), Martinique (MQ), St. Lucia (LC), St. Vincent and the Grenadines (VC), Barbados (BB),Grenada (GD), Trinidad and Tobago (TT), Netherlands Antilles (AN) Joannac and UnwiseOwl
Africa (AF) Algeria (DZ), Tunisia (TN), Libya (LY), Egypt (EG), Morocco (MA), Western Sahara (EH), Mauritania (MR), Mali (ML), Niger (NE), Chad (TD), Sudan (SD), Eritrea (ER), Ethiopia (ET), Djibouti (DJ), Somalia (SO), Senegal (SN), Gambia (GM), Guinea-Bissau (GW), Sierra Leone (SL), Liberia (LR), Ivory Coast (CI), Burkina Faso (BF), Ghana (GH), Togo (TG), Benin (BJ), Nigeria (NG), Cameroon (CM), Central African Republic (CF), Equatorial Guinea (GQ), Gabon (GA), Congo (CG), Democratic Republic of the Congo (CD), Uganda (UG), Burundi (BI), Rwanda (RW), Kenya (KE), Tanzania (TZ), Zambia (ZM), St. Helena (SH), Angola (AO), Zimbabwe (ZW), Malawi (MW), Mayotte (YT), Namibia (NA), Mozambique (MZ), Comoros (KM), Mauritius (MU), Seychelles (SC), Botswana (BW), Lesotho (LS), Swaziland (SZ), Reunion (RE), South Africa (ZA), Madagascar (MG), Glorioso Islands (IG) Joannac and UnwiseOwl
Canada (CA) Alberta (AB), British Columbia (BC), Manitoba (MB), New Brunswick (NB), Newfoundland And Labrador (NL), Nova Scotia (NS), Northwest Territories (NT), Nunavut (NU), Ontaria (ON), Prince Edward Island (PE), Quebec (QC), Saskatchewan (SK), Yukon Territory (YT) Wmcduff
Chile (CL) Tarapaca (TA), Antofagasta (AN), Atacama (AT), Coquimbo (CO), Valparaiso (VS), O Higgins (LI), Maule (ML), Biobio (BI), Araucania (AR), Los Lagos (LL), Aisen (AI), Magellanes (MA), Santiago Metropolitan (RM), Los Rios (LR), Arica and Parinacota (AP) Wmcduff
United States of America (US) Alabama (AL), Alaska (AK), Arizona (AZ), Arkansas (AR), California (CA), Colorado (CO), Connecticut (CT), Delaware (DE), District Of Columbia (DC), Florida (FL), Georgia (GA), Hawaii (HI), Idaho (ID), Illinois (IL), Indiana (IN), Iowa (IA), Kansas (KS), Kentucky (KY), Louisiana (LA), Maine (ME), Maryland (MD), Massachusetts (MA), Michigan (MI), Minnesota (MN), Mississippi (MS), Missouri (MO), Montana (MT), Nebraska (NE), Nevada (NV), New Hampshire (NH), New Jersey (NJ), New Mexico (NM), New York (NY), North Carolina (NC), North Dakota (ND), Ohio (OH), Oklahoma (OK), Oregon (OR), Pennsylvania (PA), Rhode Island (RI), South Carolina (SC), South Dakota (SD), Tennessee (TN), Texas (TX), Utah (UT), Vermont (VT), Virginia (VA), Washington (WA), West Virginia (WV), Wisconsin (WI), Wyoming (WY) Joannac and UnwiseOwl
Poland (PL) Dolnoslaskie (DS), Kujawsko-Pomorskie (KP), Lubelskie (LU), Lubuskie (LB), Lodzkie (LD), Malopolskie (MA), Mazowieckie (MZ), Opolskie (OP), Podkarpackie (PK), Podlaskie (PD), Pomorskie (PM), Slaskie (SL), Swietokrzyskie (SK), Warminsko-Mazurskie (WN), Wielkopolskie (WP), Zachodniopomorskie (ZP) Charfa

This table is manually kept up to date, so it may contain typos or just be plain wrong at times. If that seems to be the case, ask the tool itself using the version and about parameters (see above).

List of upcoming regions

Just to prevent duplicate work...

Region Progress
Asia Region mapped. Just waiting for a spare month to type up the results.
Mare Pacifica Region mapped, countries forthcoming (honest).

How to add regions

If someone wants to lend a hand, great! I prefer email submissions to <jckn@gmx.net> (that address is already heavily spam-infested, obfuscation would be futile), and the final format looks like this (just making up an example here):

RegionName;ISO;lat-n;lat-s;lng-w;lng-e;
oooooo00oooo
oooo0000000o
ooo00000o000
ooo000000000
oooooooo000o;
;SubRegion1;SUB:ISO;lat-n;lat-s;lng-w;lng-e;
oooooo00oooo
oooo###0000o
ooo####0o000
ooo###000000
oooooooo000o;
;SubRegion2;SUB:ISO;lat-n;lat-s;lng-w;lng-e;
oooooo##oooo
oooo00#####o
ooo000##o000
ooo00###0000
oooooooo000o;
;SubRegion3;SUB:ISO;lat-n;lat-s;lng-w;lng-e;
oooooo00oooo
oooo000000#o
ooo00000o###
ooo0000#####
oooooooo###o;

But of course I also accept other forms of submission - converting the data to fit my tool is usually no problem.

  • The tags are taken from ISO-3166-1 and -2, when available. If there is no entry, make one up that doesn't collide with the ISO (e.g. I had to invent GX for Galapagos).
  • Toplevel regions (i.e. continents) only bear their own ISO code, subregions have their parent appended (e.g. EU and DE:EU, respectively). Note that this is the other way round compared to the region= CGI parameter.
  • The two map formats are also equivalent now. The tool converts [o0#] maps to [o0] ones by replacing 0 with o and # with 0. It is just more convenient to chart subregions by copying the parent map and replacing a few 0s, so both are (and will be) supported.
  • I'm zealously sanitizing CGI input: the only accepted characters are [A-Za-z0-9 =.:-] - if your region name contains non-ascii chars, please replace those. (%xx constructs are decoded before matching against that char list, of course.)

Feedback

Ping me in #geohashing (if I happen to be there) or leave a notice on my talk page.

My agenda

  • Release the code!