Як просторово розділити цілу кількість балів?


9

У мене є дані про місцезнаходження клієнтів із понад 130 мільйонами записів, розповсюдженими по всій країні. Це просторова таблиця в PostGIS

Я хочу зараз розділити всю країну на "зони обслуговування", щоб кожна зона обслуговування мала:

  • Принаймні 30 клієнтів
  • Знаходиться не більше 1000 кв.

Я досліджував агрегатний інструмент ArcGIS, але він не відповідає моїм критеріям, оскільки:

  • Він не враховує мінімального рахунку
  • У мене в розпорядженні лише Qgis & Grass.

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

Відповіді:


4

Я провела невеликий експеримент:

  • генерував 900 випадкових балів
  • з'єднав їх за допомогою дерева мінімального розміру
  • вибрана раковина десь посередині

введіть тут опис зображення

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

введіть тут опис зображення

  • запустив сценарій, який я використовую для об'єднання менших водозборів у більші, намагаючись отримати середній "розмір" 30.

РЕЗУЛЬТАТ:

введіть тут опис зображення

Повідомте мене, якщо це цікавить, я можу викопати сценарій (він уже опублікований десь на цьому сайті) або пояснити робочий процес більш детально. Я використовував ArcGIS.

-------------------------------------

** ОНОВЛЕННЯ вересня 2017 року

Він дуже схожий на вище, але використовує растровий підхід, відстань та гідрологічні інструменти від ArcGIS. Хитра частина полягає у створенні мінімально розтягнутого дерева та пошуку розеток "водозборів" у растровому форматі.

Це наступні кроки:

  • Трикутні вузли (вказує на кластер), витягують трикутні ребра мережі, перетворюють вузли в растрові ВАГИ :

введіть тут опис зображення

  • Обчислити поле в таблиці таблиць: Я використовую (ShapeLength ^ 3 / 1e6). Перетворити в растр, заповнити прогалини дуже високим значенням, щоб створити растр COST . Це заохочує потік між точками, близькими один до одного. Можна сподіватися, що шляхи потоку будуть схожі на дерево з мінімальним розміщенням (MST), а не біля прямих ліній, що прямують до раковини.
  • Виберіть будь-який вузол (OUTLET / SINK) та створіть растр повернення витрат, використовуючи поверхню COST та SINK як джерело. Перетворити растр зворотного посилання на пристойний растр потоку з використанням потоку Int(Power(2,"backlink"-1)). Накопичуйте потік, використовуючи напрямок потоку та вагу растру. Як видно, фокус із розподілом витрат справді створює щось подібне до MST:

введіть тут опис зображення

Я вирішив згрупувати бали на 50. Маючи на увазі фрактальну структуру мережі, я встановив межу трохи нижчих точок INLET на початку "High Flow Streams", тобто Con ("FlowAccum"> 45,1). Входи визначені як комірки, де

Існує великий потік & фокусна статистика = 2, а комірка не є SINK (значення даних у напрямі потоку немає) :

введіть тут опис зображення

Використовуйте впускні отвори як точки заливки та напрямок потоку для визначення водозборів. На малюнку показано 115 отриманих водозборів:

введіть тут опис зображення

Їх статистика: середнє = 50,33, хв = 46 і макс = 74.

Для отримання другого набору водозборів достатньо стерти растр ваги під уже визначеними водозборами, обчислити акумуляцію потоку тощо.

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


1
Я не знаю, чи буде це корисно для мене, але це виглядає цікаво як пекло. Будь ласка, опублікуйте сценарій, якщо зможете.
Devdatta Tengshe

Я опублікую сценарій пізніше сьогодні або в понеділок, взяв вихідний день. Тим часом погляньте на gis.stackexchange.com/questions/179559/…, де я описав ідею за нею
FelixIP

Я перевірив його на 100 000 балів за ніч. Останній крок треба було близько 6 годин , і це не робить його не йти підхід, а не в ArcGIS , по крайней мере. Не кажучи вже про те, що мені довелося кодувати MST самостійно, бо інструмент, який я від Паттерсона, застряг.
FelixIP

Вам вдалося це вирішити? Здається, я скористався растровим підходом, можу розмістити робочий процес, якщо це цікавить /
FelixIP

Будь ласка. Я вирішив це методом Bruteforce, який був досить нормальним для моєї мети; Але я впевнений, що інші можуть отримати користь від вашого нового підходу.
Devdatta Tengshe
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.