Я запускаю 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 вообще. Я отправил мое решение в качестве ответа на этот вопрос.
Я чувствую, что должен быть более красноречивый и быстрый способ сделать это, чем то, что я придумал.