Створення регулярно розташованих точок всередині багатокутника на основі значення атрибута за допомогою QGIS?


11

У мене є шар багатокутника із доданим значенням атрибута, що представляє кількість осіб у полігоні. Я використовую QGIS 3.0.

Мені потрібно візуалізувати підрахунки як сітку точок всередині багатокутника (тобто 1 бал = 100 жаб, пофарбованих за специфікою). Точки не обов'язково повинні займати цілий багатокутник, і бажано бути намальованими навколо центроїда із заздалегідь визначеним проміжком (тобто 300 м), щоб вони могли представляти акуратну сітку при певній роздільній здатності.

Поточне вирішення, яке я знайшов, - це використовувати "Регулярні точки" з параметром count, щоб створити сітки всередині масштабу, намальованого на карті, а потім видалити додаткові точки, створені алгоритмом (алгоритм кругляє до сітки, і ви можете отримати 20 балів замість 17 у вхід). Це дає бажаний результат, але вимагає намалювати обсяг площі для регулярних точок для кожного багатокутника, а також ввести вручну атрибути та очистити створені точки. Крім того, оскільки я використовую "Регулярні точки" із вказаним підрахунком, замість пробілів, кожен багатокутник отримує різні точки.

Коротше кажучи: регулярні точки (визначено # балів, намальована кількість) для кожного багатокутника (партії)> Видалити зайві точки> призначити значення атрибутів # балам

Альтернативно (уникає нерегулярного інтервалу, але вимагає ще більше маніпуляцій):

Регулярні точки (визначений пробіл, тобто 300м) у межах всього шару> Обрізайте мірою багатокутників> Видаліть зайві точки у кожному багатокутнику, поки не отримаєте потрібне число очок> призначте значення атрибутів точкам.

Основна проблема моїх обхідних шляхів - це обробка полігон за полігоном, що ускладнює оновлення даних та роботу з більшою кількістю полігонів.

Аналогічне запитання було задано як Створення регулярно розташованих, визначених # балів у полігоні в QGIS , але специфіка відрізняється.

Скріншот бажаного результату:

Таблиця атрибутівL:


1
Чи відображає зображення у вашому запитанні те, що ви очікуєте в результаті? Звідки беруться підрахунки кольорових точок? Чи можете ви додати таблицю атрибутів шару? Особливо атрибути полігонів, до яких належать Едмонтон та Шервуд-Парк, для кращого розуміння кольорів та підрахунків.
Кадір Şahbaz

1. Це просто замасковані дані, які не мають великого відношення до фактичних багатокутників, але так, я очікую такого результату, але з крапками навколо центру багатокутника. 2. Підрахунки походять із стовпців таблиці атрибутів, оскільки є три стовпчики / типи точок, я об'єдную їх у один стовпець, щоб спочатку отримати потрібну кількість точок на багатокутник, а потім призначити атрибут / кольори за допомогою виразів. редагувати: додана таблиця Excel під питання, не представляє значення, але представляє структуру моїх даних.
Руслан

Відповіді:


5

QGIS 3 поставляється з новим методом переміщення в рендері кластера під назвою сітка. Схоже, це майже все, що вам потрібно. Просто створіть кількість бажаних точок у центроїді вашого багатокутника.

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

Мені не відомий спосіб генерування очок лише інструментом gui, але відносно простий скрипт python повинен це зробити.

with edit(point_layer):
    for polygon_feature in polygon_layer.getFeatures():
        point_feature = QgsFeature(point_layer.fields())
        point_feature.setGeometry(polygon_feature.geometry().centroid())

        point_feature['type'] = 'Frog'
        for i in range(polygon_feature['Frogs']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Cat'
        for i in range(polygon_feature['Cats']):
            point_layer.addFeature(point_feature)

        point_feature['type'] = 'Diplodoc'
        for i in range(polygon_feature['Diplodocs']):
            point_layer.addFeature(point_feature)

Якщо ви хочете зійти з розуму, вкажіть це в користувальницький алгоритм обробки.


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

Мені невідомий простий метод, окрім написання маленького сценарію python. Код абсолютно неперевірений, тому можуть бути помилки;)
Маттіас Кун

Знову дякую. Можливо, мені доведеться зробити подібну візуалізацію для багатьох шарів / розширень тощо, тому я спробую створити для цього принаймні модель обробки.
Руслан

5

Можливо, іншим способом надихає відповідь Сарат СРК:

  1. Центроїд багатокутників
  2. Буфер, що використовує вираз із квадратом та адаптується до вашої шкали: тобто (1000 * (sqrt ("Жаби" + "Коти" + "Diplodocs") / 2)) + 1 і сегмент = 1, стиль кінцевої шапки = квадрат
  3. Нова точка сітки з проміжком, когерентним масштабу буфера.
  4. Видалити точку, яка не перетинається з шаром буфера (виберіть за місцем розташування)
  5. приєднатись до attribut за місцем розташування (Attribut буфера або оригінальних полігонів)

Тим не менше, у вас буде щось подібне введіть тут опис зображення

  1. Використовуйте графічний моделер à, щоб створити нове поле за допомогою команди "@row_number" введіть тут опис зображення

  2. Виконайте модель з ітерацією на буферному шарі введіть тут опис зображення

  3. Об’єднайте весь новий шар

  4. Видаліть всю крапку з полем ID_pt, більшим за суму поля ("Жаби" + "Коти" + "Diplodocs")

  5. Класифікуйте за правилами (тобто
    • "ID_pt" <= "Жаби"
    • "ID_pt"> "Жаби" та "ID_pt" <= ("Коти" + "Жаби")
    • "ID_pt"> ("Коти" + "Жаби") та "ID_pt" <= ("Коти" + "Жаби" + "Diplodocs") введіть тут опис зображення

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

1

Ви можете використовувати для цього генератори геометрії.

  1. Додайте 3 підшару в символ, по одному для кожного кольору / атрибута.
  2. Створіть вираз, який генерує мультиполігон для кожного підшару.
  3. Тепер важка частина, генеруйте квадратні частини для багатополігона на основі атрибута. Я думаю, для цього буде потрібна спеціальна функція вираження python.
  4. Необов’язково використовувати змінні візуалізації для масштабування карт для визначення масштабування полігонів та проміжків.

Вибачте, я зараз занадто зайнятий для повної відповіді, але буде дуже цікавим завданням спробувати приготувати щось із цього рецепту тут. Можливо, хтось обходиться, щоб надати нам гарне рішення на основі цього.
Маттіас Кун

1

Одним з рішень може бути створення точкового шару з точками в центроїді кожного багатокутника. Отже, для прикладу ви отримали в центрі Едмонтона 25 накладену точку: 5 з атрибутом жаби, 20 балів з котом і 0 з диплодоксами.

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

Складність полягає в створенні точкового шару ....


0

Дуже простою альтернативою може бути використання кругової діаграми, наявної у властивостях шару? Атрибути та розміри можуть бути продиктовані виразом.

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


2
Я знаю про альтернативні способи відображення даних. Суть питання полягає в тому, щоб зробити цей робочий процес візуалізації можливим. Діаграма пирогів насправді не працює, тому що, дивлячись на сітку, ви отримуєте дуже хороший сенс щодо кількості людей. Намагатися оцінити точні індивідуальні підрахунки кожного багатокутника з пирогів майже неможливо.
Руслан

0

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


Здається, це досить близько, але як зазначено в питанні, я недостатньо досвідчений, щоб кодувати це / змінити запропонований там код.
Руслан

Сподіваємось, хтось, хто має достатньо знань та часу,
задзвенить

0

У вашому випадку,

  1. Створюйте регулярно розташовані точки, використовуючи задану відстань для всього AOI
  2. Створіть центральні точки для всіх полігонів (вхід).
  3. Створіть буфер для цих центроїдних точок за допомогою буфера фіксованої відстані зі значенням сегментів '1'. Він створить квадратний буфер замість кола (Використовуйте інструмент обертання в Qgis, якщо ви хочете обертати багатокутники буфера).
  4. Створіть підбірку точок, що потрапляють у буферні багатокутники, використовуючи вектор -> Інструменти дослідження -> Вибір за місцем розташування (точки у праві полігонів).
  5. Перемикайте вибір і видаляйте точки поза полігонами буфера. Отже, тепер у вас регулярно розташовані точки навколо центральних полігонів.
  6. Надайте атрибут «Більшість» для цілих очок, а решту пунктів потрібно класифікувати вручну. Використовуйте інструмент QuickMultiAttributeEdit для легкого оновлення атрибутів.

Дякуємо, це, здається, скорочує кроки обробки, але це не вирішує проблему з необхідністю вибору вручну (буфери всередині полігонів були б однаковими за розміром = однакова кількість точок на багатокутник), видалення та атрибут створених точок для кожного з багатокутників, що є головним питанням цього та мого робочого процесу.
Руслан
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.