Google App Engine: запрос геохэш - PullRequest
       3

Google App Engine: запрос геохэш

0 голосов
/ 28 апреля 2011

У меня есть db.StringProperty () geohash, по хеш-коду, как мне найти результат ближе к 10?

Я попробовал ниже, но, похоже, не прав

pois = POI.all().filter('geohash <', h_latlng).order('-geohash').fetch(10)

1 Ответ

1 голос
/ 28 апреля 2011

Геохэш не может выполнить задачу, чтобы найти n-ближайших результатов.Вы можете найти содержимое любой квадратной области по префиксу.Но чтобы найти надежный результат, содержащий n-ближайшие значения, вам нужно получить как минимум 9 префиксов, что делает этот запрос довольно дорогим.Сложность в том, что нужно вычислить префиксы 9 квадратов.

ИМО, в настоящее время эту проблему сложно решить эффективно на app-engine.До сих пор я на этом с года и не нашел сложного и быстрого решения.Реляционная БД с географическим индексом или двумя неравенствами будет выполнять такие задачи лучше и быстрее.Но я также заинтересован в хороших решениях.: -)

Цитата Дэвид Трой:

Geohash также обладает свойством, что при уменьшении количества цифр (справа) точность снижается.Это свойство можно использовать для поиска ограничивающего прямоугольника, поскольку точки рядом друг с другом будут иметь одинаковые префиксы Geohash.

Однако, поскольку данная точка может появиться на границе заданного ограничивающего прямоугольника Geohash, необходимосоздать список значений Geohash, чтобы выполнить поиск истинной близости вокруг точки.Поскольку алгоритм Geohash использует систему нумерации base-32, можно получить значения Geohash, окружающие любое другое заданное значение Geohash, используя простую таблицу поиска.

См .: https://github.com/davetroy/geohash-js

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...