The 10:10 Code
blog.jgc.org
blog.jgc.org
http://en.wikipedia.org/wiki/Geohash
In my mind the big issue with these is that while they're easy to transmit, you don't actually want to store them because then you lose the ability to do proximity or point in polygon searches.
I'd much prefer a solution that removed the square grid requirement and the dissimilar angular coordinates, divided the earth into roughly equally sized and shaped sectors, and ideally was hierarchical so that you could achieve a naming scheme similar to the geohash. A bit of googling led me to this picture, which looks promising: http://icon.enes.org/swm/icoswp/node3.html
There's an interesting observation about normal distributions that may prove helpful--especially if you find a way to use randomness to generate a coordinate system.
If you have n pairwise independent identically normal distributed random variables X_i, and normalize them to the unit sphere Z := X * 1/length(X) then Z will be distributed equally on the surface of the unit sphere (in the sense that the distribution is symmetric under any rotation around the origin).
If you add some ideas from arithmetic coding and/or the theory for de-randomization of algorithms, you might be able to get a working coordinate system out of this.
I think you could do a reasonable job by dividing first into two hemispheres, then into six(?) triangular sectors each, then recursively into four subsectors each. This would give log4(510 Mkm²/2/6/100 m^2) = 19.3 recursions, or 43 bits to reach a 100m² accuracy, assuming it really does divide nicely. Won't be square, though. Then you'd have to decide whether to use the remaining 5 bits on a checksum, or to allow arbitrary precision. Or I suppose you could add a checksum there, and interpret any further bytes as unchecked precision.
I wonder if six subsectors are required in the first phase to construct the voronoi cells. The triangular scheme should work fine with four, which seems more elegant.
I found a way to make my idea work, anyway.
For area-equality, shape-inequality, a recursive three-division becomes also worthy of consideration.
Here's what I thought of: Use a Cartesian coordinate system with the centre of the sphere as its origin and the radius of the sphere normalized to 1. Each point on the square has coordinates x_1,x_2,x_3. The new coordinates will live in [0,1]^3 (i.e. three real numbers between 0 and 1).
To convert, do the following: Generate a random number r from a N(0,1) normal distribution. For each coordinate determine the quantile of q_i := rx_i in the N(0,1) normal distribution. (This results in 0 <= q_i <= 1.)
Take the triple (q_1,q_2,q_3) and express it as a binary number. Bonus points for using octal numbers like this: Q(j) = q_1(j) + 2q_2(j) + 4*q_3(j) where Q(j) is the j-th octal digit of the number Q after the comma and q_i(j) is the j-th digital digit of the number q_i after comma.
(This octal scheme has the property that you can cut off at any time for getting a less accurate description of the location.)
This coordinate scheme is redundant. Also a uniform distribution of random points on the surface of the sphere, will lead to a uniform distribution of coordinates in this scheme.
(This kind of scheme would get you better worst-case resolution with your 10 characters. I'm not sure what it is for the posted code.)
if the above is correct, why not explain it thus?
if you do this, it becomes obvious what happens to errors; we know you can gracefully degrade the accuracy (since it's a linear encoding) by dropping the bits before the checksum.
what are the coding properties of the checksum? it doesn't look like crc32 or adler. what is it? why did you choose it?
Want to fix it? ^32^29 in the code.
Update: I changed it.
why did you pick this checksum? what are its coding properties?
Encoding in Kanji would result into fewer characters, but would probably result in some funny phrases. ("Turn left at Ephemeral Outhouse!"). Not quite sure whether that's good or bad...
The main problem this would have is people figuring out what the hell it means! Most people have some grasp on latitude / longitude and although they may not know how to read/use it, they could probably find out.
A random code without obvious meaning is going to be a whole lot less appetizing... At least until it gets popular - I mean look at what twitter did for url shorteners... maybe that's the way to integrate this. Or get google maps to implement it, and use it in their location code (it is shorter than lat/long coords and they already use these in their queries, and they are concerned about bits transmitted...)
You'd be able to figure out roughly where it so you know how much it will cost to ship, but otherwise where I live would be private.
I'd be able to change what the code maps to and all my mail would automatically follow me when I move. Or my identity theft, depending on how competantly this is managed :-)
The problem is that this is a service "worth" something so the postal services can charge for it. You'd have to remove that incentive to convince them to offer it as a global service.
But, even so, the PO box is tied to a city. people can't keep using it and have mail go to the right place automatically. the best they can do is forward it. so something could be shipped from nyc to a PO box in LA and then get forwarded back
depending on how competantly this is managed :-) Is this a play on the "Qualaty Initiative" from Dilbert?