Acme::Geo::Whitwell::Name - Steadman Whitwell's "rational geographic nomenclature"


Version 0.04


    use Acme::Geo::Whitwell::Name qw(to_whitwell from_whitwell);

    # Convert Sunnyvale, CA's lat and lon to a Whitwell name pair.
    my @names = to_whitwell("37.37N", "122.03");

    # Same conversion, using signed latitude and longitude instead.
    my @names = to_whitwell(37.37, -122.03);

    # Convert a Whitwell name to a latitude and longitude.
    # (Washington DC's "rational" name to N/S lat and E/W long.)
    my($lat_string, $lon_string) = from_whitwell("Feiro Nyvout");

    # If you want signed values, add signed => some true value.
    my($lat, $long) = from_whitwell("Feiro Nyvout", signed=>1);


This module implements Steadman Whitwell's "rational system of geographic nomenclature", in which place names are generated by converting the latitude and longitude of the location into a two-part name by means of a transliteration scheme.

Whitwell devised this scheme in an attempt to provide an alternative to the proliferation of similarly-named towns in the early US. However, people seemed to prefer creating many Springfields and Washingtons in preference to using Whitwell's uniquely quirky names.


Two tables of number-to-letter(s) are used to translate latitudes and longitudes of two-decimal precision, digit-by-digit, into vaguely-pronounceable two-part names.

             1 2 3 4 5 6 7  8  9  0
   latitude  a e i o u y ee ei ie ou  vowels
  longitude  b d f k l m n  p  r  t   consonants

Transliteration is done by looking up the apropriate digit in the tables above, switching rows until all the digits are consumed. If the coordinate is negative, a special 'sign consonant' is inserted into the (partial) name after the first vowel is added, and the transliteration continues by choosing again from the vowel table, then continuing to alternate again.

This is very orderly, but confusing to generate by hand (putting aside the fact that no one in their right mind really wants to live in "Isilu Buban" instead of Sydney, AU, or "Feiro Nyvout" instead of Washington, DC).

The generated names are guaranteed to have alternating consonants and vowels, and should be pronounceable (though most likely bizarre). I have not been able to locate the original documentation of the scheme, so I am unable to determine why some example names are built in "reverse": with the first letter for the latitude selected from the longitude table, and vice versa for the longitude. I can only guess that the alternate construction was deemed more pronounceable or "interesting". Since this is the case, I generate both alternatives so you can choose the one that seems "better". In the cases of places like McMurdo Base ("Eeseepu Bymeem" or "Neeveil Amyny"), I'm not sure there is a "better".

However, solely for the purposes of amusement, it can be interesting to find out what a given location would have been called in the alternate universe where Whitwell's scheme caught on.

It would be lovely to use this module to change all the place names on online maps, wouldn't it?


  • The Angel and the Serpent: The Story of New Harmony, William E. Wilson, Indiana University Press, 1984, p. 154 =item * Search for '"new harmony gazette" whitwell' =item *



to_whitwell($lat, $lon)

Generates a properly-capitalized Whitwell name from a latitude-longitude pair. Latitude and longitude are truncated to the two digits after the decimal point, in keeping with Whitwell's original scheme. Zeroes are added after the decimal point as necessary.

North latitudes are positve, and south latitudes are negative. East longitudes are positive, west longitudes are negative. Trailing E/W and N/S are converted into the appropriate sign. If you supply both for some reason, trailing sign indicators override signs.

Returns both alternatives for the name (see SCHEME).

from_whitwell($whitwell_name, signed => $yes_or_no)

Converts a Whitwell name back into a lat/lon pair, in trailing indicator format. Results will be undefined if the string does not match the Whitwell scheme; if the strings is Whitwell-compatible, but includes extra letters, these will be assumed to be further digits after the decimal point.

If you supply the 'signed' option with a true value, the returned values are signed numbers rather than numbers with trailing sign indicators.


Joe McMahon, <mcmahon at>


Please report any bugs or feature requests to bug-acme-geo-whitwell-name at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


  • (0,0) isn't handled correctly; however, since there's nothing there but water, this is not a practical limitation.


You can find documentation for this module with the perldoc command.

    perldoc Acme::Geo::Whitwell::Name

You can also look for information at:



Copyright 2008 Joe McMahon, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.