An algorithm to find out neighbors of a geohash code.
- Base32: 123456789bcdefghjkmnpqrstuvwxyyz
- Neighbors (direction type)
- right even: bc01fg45238967deuvhjyznpkmstqrwx
- left even: 238967debc01fg45kmstqrwxuvhjyznp
- top even: p0r21436x8zb9dcf5h7kjnmqesgutwvy
- bottom even: 14365h7k9dcfesgujnmqp0r2twvyx8zb
- righ odd= top even (p0r21436x8zb9dcf5h7kjnmqesgutwvy)
- left odd= bottom even (14365h7k9dcfesgujnmqp0r2twvyx8zb)
- top odd= right even (bc01fg45238967deuvhjyznpkmstqrwx)
- bottom odd= left even (238967debc01fg45kmstqrwxuvhjyznp)
- Borders (direction type)
- right even: bcfguvyz
- left even: 0145hjnp
- top even: przx
- bottom even: 028b
- right odd= top even (przx)
- left odd= bottom even (028b)
- top odd= right even (bcfguvyz)
- bottom odd= left even (0145hjnp)
- function calculateAdjancent(String srcHashCode, String direction)
char lastCharacter=srcHashCode.charAt(srcHashCode.length-1);
String type=(srcHashCode.length%2)?'odd': 'even':
String base=srcHashCode.subString(0,srcHashCode.length-1);
if(Borders[direction][type].indexOf(lastCharacter) != -1)
base=calculateAdjancent(base,direction);
return base+BASE32[Neighbors[direction][type].indexOf(lastCharacter)];
Ex. find a's right neighbor
calculateAdjancent(a,right);
No comments:
Post a Comment