Ora sto cercando un algoritmo elegante per trovare ricorsivamente i vicini dei vicini con l'algoritmo di geohashing (http://www.geohash.org).
Prendete fondamentalmente un geohash centrale, quindi prendete il primo "anello" di hash della stessa dimensione attorno ad esso (8 elementi), quindi, nel passaggio successivo, prendete l'anello successivo attorno al primo ecc. Ecc. Avete sentito di un modo elegante per farlo?Geohashing - Trova in modo ricorsivo i vicini dei vicini
La forza bruta potrebbe essere quella di prendere ogni vicino e ottenere i propri vicini semplicemente ignorando la massiccia sovrapposizione. Vicini circa un geohash centrale è stato risolto molti volte (qui ad esempio in Ruby: http://github.com/masuidrive/pr_geohash/blob/master/lib/pr_geohash.rb)
Edit chiarimenti: soluzione corrente, con il passaggio in un tasto centrale e una direzione, come questo (con corrispondenti di ricerca tavoli):
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
(estratto lib di Yuichiro MASUI)
dico questo approccio otterrà brutto presto, perché le direzioni diventa brutto una volta che siamo in anello di due o tre. L'algoritmo idealmente prenderebbe semplicemente due parametri, l'area centrale e la distanza da 0 solo al centro geohash (["u0m"]
e 1 è il primo anello composto da 8 geohashes della stessa dimensione attorno ad esso (=> [["u0t", "u0w"], ["u0q", "u0n"], ["u0j", "u0h"], ["u0k", "u0s"]])
. due sono il secondo anello con 16 aree intorno al primo anello ecc
vedete un modo per dedurre i 'anelli' dai bit in modo elegante?
Quanto tempo di geohash deve essere considerato quando si inizia con il geohash centrale? – Atul