Как вы идентифицируете точки GeoHash, которые НЕ находятся на суше? - PullRequest
1 голос
/ 04 ноября 2019

У меня есть список координат по широте / долготе, которые я преобразовал в GeoHash. Моя цель состоит в том, чтобы идентифицировать точки, которые, как сообщается, находятся над водой (океаны, моря и т. Д. За пределами границ любой страны). У меня также есть набор данных всех форм границ всех стран мира по широте / долготе, преобразованных также в GeoHash.

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

Возможно, вообще есть способ понять, что значит быть точкой гео-хеширования за пределами границ какой-либо страны?

1 Ответ

0 голосов
/ 04 ноября 2019

Это не очень хорошее использование геохэш. Geohash хорош для определения конкретных точек, но не очень хорош для описания сложных форм, таких как границы страны или океан.

Я думал о ручном подборе точек в середине океана и использовании короткого префикса GeoHash для созданиябольшая коробка в океане, но она довольно ограничена.

Да, это даст очень неточный результат. Что вам нужно, это проверить каждую точку, принадлежит ли она к полигону любой страны. То, как вы это сделаете, зависит от используемой вами платформы, например, в SQL вы выполняете запрос ST_Intersects(point, country).

Я бы просто преобразовал геохэш обратно в пару широта / долгота и проверил их.

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

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

Как только вы построите такое дерево -вы можете использовать GeoHash для быстрого поиска вашего ответа в этом дереве.

...