Геохеширование - рекурсивно находит соседей соседей

Я теперь ищу изящный алгоритм для рекурсивного нахождения соседей соседей с геоалгоритмом хеширования (http://www.geohash.org).
В основном возьмите центральный геохеш, и затем получите первое 'кольцо' хешей того-же-размера вокруг этого (8 элементов), затем, на следующем шаге, получите следующее кольцо вокруг первого и т.д. и т.д. Вы услышали об изящном способе сделать так?

Грубая сила могла быть должна взять каждого соседа и получить их соседей, просто игнорирующих крупное перекрытие. Соседи вокруг одного центрального геохеша много раз решались (здесь, например, в Ruby: http://github.com/masuidrive/pr_geohash/blob/master/lib/pr_geohash.rb)

Редактирование для разъяснения: Текущее решение, с передачей в центральном ключе и направлении, как это (с соответствующими справочными таблицами):

  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

(извлечение из lib MASUI Yuichiro)

Я говорю, что этот подход станет ужасным скоро, потому что направления становятся ужасными, после того как мы находимся в кольце два или три. Алгоритм идеально просто взял бы два параметра, центральную область и расстояние от 0 являющийся центральным геохешем только (["u0m"] и 1 являющийся первым кольцом сделан из 8 геохешей того же размера вокруг этого (=> [["u0t", "u0w"], ["u0q", "u0n"], ["u0j", "u0h"], ["u0k", "u0s"]]). два являющийся вторым кольцом с 16 областями вокруг первого кольца и т.д.

Вы видите какой-либо способ вывести 'кольца' из битов изящным способом?

7
задан itsme 18 June 2010 в 16:40
поделиться