To contrast this goal with the standard coordinates used by software people, decimal latitude and longitude coordinates typically have 10 significant digits or more. The first three of these essentially just tell you what city you're in, which you already know if you're using an urban map, and all the digits after you get to a few meters simply carry no information due to lack of precision in gps and practical mapping.
For Washington, DC, the obvious logical choice for a center is the location of the Washington Monument, and for a unit is the height of the same monument. According to google maps the location is (38.8894427,-77.035224). The height is 555 feet. Thus the first goal in building a better map is to build a web calculator that converts decimal degrees into local units as I've defined them. For other cities you would repeat this process. E.g. for Paris one would definitely center on the Eiffel Tower, and setting the unit to be the height gives you about twice the radius as you get for the Washington Monument. For London you might center on Big Ben, which is too short to get a good unit, but then use the Westminster Bridge as the unit, making it obvious for someone on the ground how to measure in their mind.
We start by taking a difference between the zero and arbitrary coordinates in decimal degrees.
To account for how longitude changes as we move up from the equator the difference in angle in longitude must be multiplied by the cosine of the latitude to get distance units that are consistent with latitude.
Longitude Difference corrected for non-equatorial latitude:
With this correction we can convert differences to nautical miles by dividing by 60 since 1 nautical mile is 1 arc minute of latitude or 1 60th of a degree. 1 nautical mile is 1.15 statutory miles. 1 statutory mile is 5280 feet. 1 WM(Washington Monument) unit is 555 feet. So the total conversion is $$\Delta\theta[^{\circ}]\left(\frac{60 \textrm{ NM}}{1 ^{\circ}}\right)\left(\frac{1.15 \textrm{ miles}}{1 \textrm{ NM}}\right)\left(\frac{5280 \textrm{ feet}}{1 \textrm{ mile}}\right)\left(\frac{1 \textrm{ WM}}{555 \textrm{ feet}}\right)$$ from which the factor to multiply by is $$\frac{60 \times 1.15 \times 5280}{555} = 656$$ This gives the coordinates in WM from the WM as
X = Y =
Lat/Lon Coordinates:
WM Coordinates(x,y):
Here I'm rounding to the nearest 1/10th of a Washington Monument, or about 50 feet. The default grid will be either 1 WM or 0.1 WM depending on the context, so it's good to have the option by having one number after the decimal place. Any more than one is pointless given the uncertainties of foot travel and gps, so this should be the highest precision used anywhere on this map unless it's a fractally connected map at a smaller scale, such as one for just the Mall or just DuPont circle.
Metro Center:4,6 Farragut North:-2,9 Dupont Circle:-4,13 Woodley Park-Zoo/Adams Morgan:-9,23 Cleveland Park:-12,30 Van Ness-UDC:-14,36 Tenleytown-AU:-23,38 Friendship Heights:-26,47 Bethesda:-30,62 Medical Center:-32,73 Grosvenor-Strathmore:-35,92 White Flint:-40,104 Twinbrook:-44,114 Rockville:-57,128 Shady Grove:-66,151 Gallery Pl-Chinatown:7,6 Judiciary Square:9,4 Union Station:15,5 Rhode Island Ave-Brentwood:20,21 Brookland-CUA:21,29 Fort Totten:17,41 Takoma:9,57 Silver Spring:2,69 Forest Glen:-4,83 Wheaton:-8,98 Glenmont:-9,113 NoMa-Gallaudet U:16,12 Metro Center:4,6 McPherson Square:1,8 Farragut West:-2,8 Foggy Bottom-GWU:-8,7 Rosslyn:-19,5 Arlington Cemetery:-14,-3 Pentagon:-10,-13 Pentagon City:-12,-17 Crystal City:-8,-21 Ronald Reagan Washington National Airport:-4,-24 Braddock Road:-9,-50 King St-Old Town:-13,-54 Eisenhower Avenue:-18,-59 Huntington:-20,-63 Federal Triangle:4,3 Smithsonian:4,-1 L'Enfant Plaza:7,-3 Federal Center SW:10,-3 Capitol South:15,-3 Eastern Market:20,-3 Potomac Ave:25,-6 Stadium-Armory:30,-2 Minnesota Ave:45,6 Deanwood:51,12 Cheverly:61,18 Landover:74,30 New Carrollton:83,38 Mt Vernon Sq 7th St-Convention Center:7,11 Shaw-Howard U:7,15 U Street/African-Amer Civil War Memorial/Cardozo:3,18 Columbia Heights:1,26 Georgia Ave-Petworth:5,31 Fort Totten:17,41 West Hyattsville:33,43 Prince George's Plaza:40,50 College Park-U of Md:55,58 Greenbelt:63,80 Gallery Pl-Chinatown:7,6 Archives-Navy Memorial-Penn Quarter:7,3 L'Enfant Plaza:7,-3 Waterfront:9,-9 Navy Yard-Ballpark:15,-8 Anacostia:20,-18 Congress Heights:24,-29 Southern Avenue:31,-32 Naylor Road:40,-25 Suitland:53,-30 Branch Ave:63,-41 Benning Road:50,1 Capitol Heights:62,0 Addison Road-Seat Pleasant:72,-2 Morgan Boulevard:85,1 Largo Town Center:97,7 Van Dorn Street:-48,-59 Franconia-Springfield:-68,-81 Court House:-25,1 Clarendon:-32,-2 Virginia Square-GMU:-35,-4 Ballston-MU:-39,-5 East Falls Church:-62,-2 West Falls Church-VT/UVA:-79,7 Dunn Loring-Merrifield:-99,-4 Vienna/Fairfax-GMU:-121,-8 McLean:-89,23 Tysons Corner:-96,20 Greensboro:-102,20 Spring Hill:-106,26 Wiehle-Reston East:-156,38
Gallery Pl-Chinatown:7,6 Archives-Navy Memorial-Penn Quarter:7,3 L'Enfant Plaza:7,-3 Pentagon:-10,-13 Pentagon City:-12,-17 Crystal City:-8,-21 Ronald Reagan Washington National Airport:-4,-24It looks like the vertical range should be at least 30 WM's so I'll make it 40. 20 is more than enough in the x direction so I'll make it 30. So the canvas will be 30 WM's wide and 40 WM's high. If we want it to be 400 pixels high that's 10 pixels per WM unit. And the zero point should be centered on the x and closer to the top than the middle on the y, say 100 from the top. Or, in javascript/Geometron:
unit = 10; x0 = 150; y0 = 100; doTheThing(0300);With a canvas that is 300X400 in size.
Metro Center:4:6 Farragut North:-2:9 Dupont Circle:-4:13 Woodley Park-Zoo/Adams Morgan:-9:23 Gallery Pl-Chinatown:7:6 Judiciary Square:9:4 Union Station:15:5 Rhode Island Ave-Brentwood:20:21 NoMa-Gallaudet U:16:12 Metro Center:4:6 McPherson Square:1:8 Farragut West:-2:8 Foggy Bottom-GWU:-8:7 Rosslyn:-19:5 Arlington Cemetery:-14:-3 Pentagon:-10:-13 Pentagon City:-12:-17 Crystal City:-8:-21 Ronald Reagan Washington National Airport:-4:-24 Federal Triangle:4:3 Smithsonian:4:-1 L'Enfant Plaza:7:-3 Federal Center SW:10:-3 Capitol South:15:-3 Eastern Market:20:-3 Potomac Ave:25:-6 Mt Vernon Sq 7th St-Convention Center:7:11 Shaw-Howard U:7:15 U Street/African-Amer Civil War Memorial/Cardozo:3:18 Columbia Heights:1:26 Gallery Pl-Chinatown:7:6 Archives-Navy Memorial-Penn Quarter:7:3 L'Enfant Plaza:7:-3 Waterfront:9:-9 Navy Yard-Ballpark:15:-8 Anacostia:20:-18 Court House:-25:1Now I want to put all the names in the word elements of the Geometron Hypercube, which are the 0600's. I could add that to the code used to generate the above list but to keep things transparent I'll build that information here in a separate script.
0230:0300,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0205 0231:0300,0332,0332,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0232:0300,0332,0332,0332,0332,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0233:0300,0332,0332,0332,0332,0332,0332,0332,0332,0332,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0234:0300,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0205 0235:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0205 0236:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0205 0237:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0240:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0241:0300,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0205 0242:0300,0333,0330,0330,0330,0330,0330,0330,0330,0330,0205 0243:0300,0332,0332,0330,0330,0330,0330,0330,0330,0330,0330,0205 0244:0300,0332,0332,0332,0332,0332,0332,0332,0332,0330,0330,0330,0330,0330,0330,0330,0205 0245:0300,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0330,0330,0330,0330,0330,0205 0246:0300,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0331,0331,0331,0205 0247:0300,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0205 0250:0300,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0205 0251:0300,0332,0332,0332,0332,0332,0332,0332,0332,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0205 0252:0300,0332,0332,0332,0332,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0205 0253:0300,0333,0333,0333,0333,0330,0330,0330,0205 0254:0300,0333,0333,0333,0333,0331,0205 0255:0300,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0205 0256:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0205 0257:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0205 0260:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0205 0261:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0331,0331,0331,0205 0262:0300,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0263:0300,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0264:0300,0333,0333,0333,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0265:0300,0333,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0330,0205 0266:0300,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0330,0330,0330,0205 0267:0300,0333,0333,0333,0333,0333,0333,0333,0330,0330,0330,0205 0270:0300,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0205 0271:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0331,0331,0331,0331,0331,0331,0205 0272:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0331,0331,0331,0331,0331,0205 0273:0300,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0333,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0331,0205 0274:0300,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0332,0330,0205That is the byte code which can be loaded manually into any Geometron instance, put in the code at the top, or put in some library. But in this case the code that generated the displayed table here also loaded the codes into the global array currentTable, so it will be available for the next set of operations.
Lat/Lon Coordinates:
WM Coordinates(x,y):