Ahora estoy buscando un algoritmo elegante para encontrar recursivamente vecinos de vecinos con el algoritmo de geohashing (http://www.geohash.org).
Básicamente tomar un geohash central, y luego obtener el primer 'anillo' de hash del mismo tamaño a su alrededor (8 elementos), luego, en el siguiente paso, obtener el siguiente anillo alrededor del primero, etc. ¿Has oído de una manera elegante de hacerlo?Geohashing: recursivamente encuentra vecinos de vecinos
La fuerza bruta podría ser tomar a cada vecino y hacer que sus vecinos simplemente ignoren la superposición masiva. Vecinos alrededor de un geohash central ha sido resuelto muchas veces (aquí por ejemplo en Ruby: http://github.com/masuidrive/pr_geohash/blob/master/lib/pr_geohash.rb)
Editar una aclaración: solución actual, con el paso de una tecla central y una dirección, así (con las correspondientes operaciones de búsqueda mesas):
def adjacent(geohash, dir)
base, lastChr = geohash[0..-2], geohash[-1,1]
type = (geohash.length % 2)==1 ? :odd : :even
if BORDERS[dir][type].include?(lastChr)
base = adjacent(base, dir)
end
base + BASE32[NEIGHBORS[dir][type].index(lastChr),1]
end
(extracto de lib de Yuichiro Masui)
digo este enfoque se ponen feas pronto, porque las direcciones pone feo una vez que estamos en el anillo de dos o tres. El algoritmo idealmente tomaría simplemente dos parámetros, el área central y la distancia desde 0 es el centro del geohash solamente (["u0m"]
y 1 es el primer anillo compuesto por 8 geoashes del mismo tamaño alrededor de él (=> [["u0t", "u0w"], ["u0q", "u0n"], ["u0j", "u0h"], ["u0k", "u0s"]])
. Dos es el segundo anillo con 16 áreas alrededor del primer anillo etc.
¿ves alguna manera de deducir los 'anillos' de los bits de una manera elegante?
¿Cuánta longitud de geohash se debe tener en cuenta cuando se comienza con geohash central? – Atul