У меня есть таблица PostGreSQL, в которой есть столбец типа geometry
, в котором хранятся различные простые многоугольники (возможно, пересекающиеся). Полигоны - это все области в городе. Я получаю ввод точки (широта-долгота) и мне нужно найти список полигонов, которые содержат данную точку. Что у меня есть на данный момент:
- Некластеризованный индекс GiST, определенный для столбца многоугольника.
- Использование
ST_Contains(@param_Point, table.Polygon)
для всей таблицы.
Это довольно медленно, поэтому я ищу более производительную альтернативу в памяти. У меня есть следующие идеи:
- Вести словарь полигонов в Redis, используя их геоху sh. Полигоны с таким же геоха sh будут сохранены в виде списка. Когда я получу точку, вычислю ее геоху sh и обрежу до нужного уровня. Затем выполните поиск по карте Redis и продолжайте обрезать геоху точки sh, пока я не найду первый результат (или достаточно результатов).
- Из базы данных было загружено tr ie геохешей. Обновляйте tr ie периодически или получая события обновления. Подсчитайте геоху точки sh, ищите в tr ie, пока я не найду достаточно результатов. Я предпочитаю это, потому что карта может иметь длинные списки для геоха sh, учитывая природу многоугольников.
- Любые другие подходы?
Я читал о библиотеках, таких как GeoTr ie и Polygon Geohasher , но, похоже, не удается интегрировать их с базой данных и приведенными выше идеями.
Какие-нибудь подсказки или отправные точки, пожалуйста?