Как использование кривой Гильберта в Google S2 решает (если нет, минимизирует) проблему более близких ячеек, имеющих разные значения префикса, как в Geohash?

В случае GeoHash две близкие точки могут иметь совершенно разные хеш-значения, что делает невозможным сравнение префиксов. Это связано с тем, что где-то в линии предков есть раскол (в географической группировке).

Как S2 пытается решить эту проблему с целью запроса? Я прочитал кучу сообщений на S2, но ничего не понял.

1 ответ

Решение

Я бы не сказал, что S2 решает эту проблему. Две близкие точки могут иметь совершенно разные идентификаторы ячеек в S2. Можно утверждать, что кривая Гильберта S2 делает его несколько менее распространенным, чем Z-кривая, используемая GeoHash, но основная проблема остается.

Когда вы используете S2, вы обычно не используете сравнение префиксов, вы используете интервальный поиск. В качестве альтернативы вы вычисляете несколько возможных префиксов в пределах определенного радиуса точки и выполняете их поиск. Конечно, вы можете использовать оба этих подхода и с GeoHash.

S2 решает другую проблему с GeoHash, что делает непрактичным использование GeoHash для поиска поблизости, за исключением локальных случаев: очень разные размеры и геометрия ячеек. Ячейки GeoHash около полюсов намного меньше (в реальной области), чем ячейки того же уровня около экватора. Неполярные ячейки GeoHash также растянуты. Клетки S2 более равномерны по всему миру.

Другие вопросы по тегам