Ich bin jetzt auf der Suche nach einem eleganten Algorithmus zum rekursiven Finden Nachbarn der Nachbarn mit dem Geohashing-Algorithmus (http://www.geohash.org).
Grundsätzlich ein zentrales geohash, und dann den ersten 'Ring' der gleichen Größe Hashes um ihn (8 Elemente), dann, im nächsten Schritt, erhalten Sie den nächsten Ring um den ersten etc. etc. Haben Sie gehört auf eine elegante Art und Weise dies zu tun?Geohashing - rekursiv Nachbarn der Nachbarn finden
Brute Force könnte jeden Nachbarn nehmen und ihre Nachbarn einfach ignorieren die massive Überlappung. Nachbarn um einen zentralen geohash wurde viele Male (hier zB in Ruby: http://github.com/masuidrive/pr_geohash/blob/master/lib/pr_geohash.rb) gelöst
Bearbeiten zur Klarstellung: Aktuelle Lösung, mit in einem Mittelschlüssel übergeben und eine Richtung, wie diese (mit entsprechenden Lookup-Tabellen):
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
(Auszug aus Yuichiro Masui lib)
ich sagen, dieser Ansatz bald hässlich wird, weil Richtungen hässlich wird, sobald wir in Ring zwei oder drei sind. Der Algorithmus würde idealerweise einfach zwei Parameter annehmen, wobei der mittlere Bereich und der Abstand von 0 nur der zentrale Geohash ist (["u0m"]
und 1 der erste Ring aus 8 gleich großen geohashs) (=> [["u0t", "u0w"], ["u0q", "u0n"], ["u0j", "u0h"], ["u0k", "u0s"]])
. Zwei sind der zweite Ring mit 16 Bereichen um den ersten Ring usw.
Haben Sie irgendeine Art und Weise zu sehen, die ‚Ringe‘ aus den Bits in einer eleganten Art und Weise?
Wie viel Geohashlänge ist zu berücksichtigen, wenn Sie mit dem zentralen Geohash beginnen? – Atul