Это не очень хорошее использование геохэш. Geohash хорош для определения конкретных точек, но не очень хорош для описания сложных форм, таких как границы страны или океан.
Я думал о ручном подборе точек в середине океана и использовании короткого префикса GeoHash для созданиябольшая коробка в океане, но она довольно ограничена.
Да, это даст очень неточный результат. Что вам нужно, это проверить каждую точку, принадлежит ли она к полигону любой страны. То, как вы это сделаете, зависит от используемой вами платформы, например, в SQL вы выполняете запрос ST_Intersects(point, country)
.
Я бы просто преобразовал геохэш обратно в пару широта / долгота и проверил их.
ЕслиВы действительно хотите использовать geohash или, если у вас слишком много (миллиарды) точек, вы можете использовать трюк с коротким префиксом GeoHash, но вам нужно будет использовать много префиксов для представления каждого океана. Примерно так, используя префиксное дерево:
- начинайте с длины пар букв GeoHash,
- для каждой возможной строки GeoHash, вычисляйте, полностью ли ее поле содержит океан или суша(используя ST_Intersects или подобный точный метод).
- если целый блок принадлежит одному классу - добавьте его в дерево префиксов.
- , если нет - добавьте больше букв (опять же, все возможные комбинации) и продолжайте рекурсивно до некоторого предела, где вам нужно остановиться.
Как только вы построите такое дерево -вы можете использовать GeoHash для быстрого поиска вашего ответа в этом дереве.