Как я могу пространственно разделить много точек?

9

У меня есть данные о местонахождении клиентов с более чем 130 миллионами записей по всей стране. Это пространственная таблица в PostGIS

Теперь я хочу разделить всю страну на «зоны обслуживания», чтобы каждая зона обслуживания имела:

  • Atleast 30 клиентов
  • Максимум 1000 кв.

Я исследовал инструмент Агрегат ArcGIS, но он не соответствует моим критериям, так как:

  • Не учитывает минимальный счет
  • В моем распоряжении только Qgis & Grass.

Какой инструмент / процесс я могу использовать для достижения этой цели?

Девдатта Тенгше
источник

Ответы:

4

Я провел небольшой эксперимент:

  • сгенерировано 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.

Для получения второго набора водосборов достаточно стереть растр ВЕСА в уже определенных водосборах, рассчитать накопление потока и т. Д.

Метод будет работать для миллионов точек, потому что он основан на растре, триангуляция этого количества точек также не будет проблемой.

FelixIP
источник
1
Я не знаю, будет ли это полезным для меня, но это выглядит чертовски интересно. Пожалуйста, опубликуйте сценарий, если можете.
Девдатта Тенгше
Я выложу сценарий позже сегодня или в понедельник, взял выходной. А пока взгляните на gis.stackexchange.com/questions/179559/… где я описал идею, лежащую в основе этого
FelixIP
Я проверил это на 100 000 очков за одну ночь. Последний шаг занял около 6 часов, и он не подходит, по крайней мере, в ArcGIS. Не говоря уже о том, что мне пришлось самому кодировать MST, потому что инструмент от Паттерсона застрял.
FelixIP
Вам удалось это решить? Кажется, я использовал растровый подход, могу опубликовать рабочий процесс, если это интересно /
FelixIP
Пожалуйста, сделай. Я решил это с помощью метода Bruteforce, который был достаточно хорош для моей цели; Но я уверен, что другие могут извлечь выгоду из вашего нового подхода.
Девдатта Тенгше