Я запускаю Postgres 9.6.1 и PostGIS 2.3.0 r15146 и имею две таблицы. geographies может иметь 150 000 000 строк, paths может иметь 10 000 000 строк:
CREATE TABLE paths (id uuid NOT NULL, path path NOT NULL, PRIMARY KEY (id))
CREATE TABLE geographies (id uuid NOT NULL, geography geography NOT NULL, PRIMARY KEY (id))
Учитывая массив/набор ids для таблицы geographies, каков наилучший способ нахождения всех пересекающихся путей и геометрий?
Другими словами, если начальный geography имеет соответствующий пересекающийся path, нам также нужно найти все остальные geographies, которые пересекает этот path. Оттуда нам нужно найти все остальные paths, которые только что нашли geographies, и так далее, пока мы не найдем все возможные пересечения.
Идентификаторы начальной географии (наш вход) могут быть от 0 до 700. В среднем около 40.
Минимальные пересечения будут равны 0, максимальное значение будет около 1000. Среднее значение, вероятно, около 20, обычно менее 100.
Я создал функцию, которая делает это, но я новичок в GIS в PostGIS и Postgres вообще. Я отправил мое решение в качестве ответа на этот вопрос.
Я чувствую, что должен быть более красноречивый и быстрый способ сделать это, чем то, что я придумал.
