Я провел небольшой эксперимент:
- сгенерировано 900 случайных точек
- связал их, используя минимальное связующее дерево
- выбрал раковину где-то посередине

- перевернул ссылки, чтобы сформировать диаграмму направленности, то есть каждый узел в конечном итоге разряжается в один приемник

- запускал скрипт, который я использую для объединения меньшего водосбора в более крупные, пытаясь получить средний «размер» 30.
РЕЗУЛЬТАТ:

Дайте мне знать, если это представляет интерес, я могу выкопать сценарий (он уже опубликован где-то на этом сайте) или объяснить процесс более подробно. Я использовал ArcGIS.
-------------------------------------
** ОБНОВЛЕНИЕ сентябрь 2017
Это очень похоже на выше, но с использованием растрового подхода, инструментов расстояния и гидрологии из ArcGIS. Сложной задачей является создание минимального остовного дерева и поиск выходов «водосборов» в растровом формате.
Вот шаги, которые я выполнил:
- Триангуляционные узлы (указывает на кластер), извлекают треугольные ребра сети, конвертируют узлы в растр WEIGHT :

- Поле вычисления в таблице ребер: Я использую (ShapeLength ^ 3 / 1e6). Преобразовать в растр, заполнить пропуски с очень высоким значением, чтобы создать растр COST . Это стимулирует поток между точками, близкими друг к другу. Есть надежда, что пути потока будут выглядеть как минимальное остовное дерево (MST) вместо того, чтобы находиться рядом с прямыми линиями, направленными к стоку.
- Выберите любой узел (OUTLET / SINK) и создайте растр Cost Back Link, используя поверхность COST и SINK в качестве источника. Преобразуйте растр обратной ссылки в достойный растр направления потока, используя
Int(Power(2,"backlink"-1))
. Накапливайте поток, используя направление потока и весовой растр. Как можно видеть, трюк с распределением затрат действительно производит нечто похожее на MST:

Я решил сгруппировать точки по 50. Имея в виду фрактальную структуру сети, я установил предел чуть ниже точек INLET в начале «High Flow Streams», то есть Con («FlowAccum»> 45,1). Входы определены как ячейки, где
Высокий поток существует & фокальная статистика = 2 & ячейка не является SINK (нет значения данных в направлении потока) :

Используйте входы в качестве точек заливки и направления потока для определения водосбора. На рисунке показано 115 полученных водосборов:

Их статистика: среднее = 50,33, минимальное = 46 и максимальное = 74.
Для получения второго набора водосборов достаточно стереть растр ВЕСА в уже определенных водосборах, рассчитать накопление потока и т. Д.
Метод будет работать для миллионов точек, потому что он основан на растре, триангуляция этого количества точек также не будет проблемой.