Як зробити карту тепла чи хороплета, яка використовує багатокутники в QGis?


12

Я розігрувався з плагіном теплової карти для QGIS, і мені цікаво, чи можна зробити теплову карту за допомогою подібного плагіна / інструмента, який використовує багатокутники, а також точки?

Я хотів би отримати уявлення про щільність даних приблизно так само, як плагін теплової карти з точками.

Наведене нижче зображення є приблизним ескізом мого бажаного результату:

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


3
Чи думали ви про створення центроїдів для своїх полігонів та побудову теплової карти з них?
andytilia

1
Ще деякі відомості про ваші дані допоможуть. Що являють собою багатокутники та як вони розподіляються? Чи можете ви опублікувати зразок зображення?
andytilia

@andytilia: Центроїди не відображають точно покриття полігонів. Полігони представляють використання ресурсів на площі 1200 м2. Деякі багатокутники крихітні, що представляють собою хороший ягідний наліт, а інші - величезні, що охоплюють місця проживання карібу та лосів. Я розглядав бінінг-шестикутну сітку, а потім підраховував перекриття ... але я вже майже ноб, тому мені не вдалося знайти хорошого підручника, який я можу зрозуміти з цього приводу.
NWT Adam

1
см QGIS Heatmap плагін qgis.spatialthoughts.com/2012/07 / ...
РКМ

Чи мають чисельні значення для вас якесь значення чи ви просто шукаєте досить / чітку візуалізацію?
underdark

Відповіді:


5

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

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


1
+1 Відмінна ідея. Єдине, що я хотів би додати, - це приєднатися до місця розташування з точковими даними та шестикутними полісами, позбутися від будь-яких невідповідних функцій, а потім генерувати в цьому бали, щоб ваші одиничні бали не заглушалися серед усіх інших пунктів.
RomaH

Це, здається, дає найкращий результат. Дякуємо всім людям, які запропонували рішення. Мені здається, що погано дарую винагороду лише одній людині, оскільки, здається, існує ряд хороших рішень!
NWT Адам

6

Якщо я правильно розумію ваше запитання, я раніше робив щось подібне; просто треба було пам’ятати, що я робив.

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

Ключовий процес, який потрібно використовувати - це атрибути приєднання за місцем розташування в меню Вектор> Менеджмент даних . Тут вкажіть ваше шестикутне поле як цільовий шар, а шар з'єднання як один із ваших багатокутників. Назвіть отриманий шар і позначте перемикач на пункт " Зберігати всі записи" .

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

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

Тут ми маємо грати в деяких кишках файлу форм, тому якщо ви не зберегли шар як файл форми, зробіть це зараз. І видаліть шар із робочої області в QGIS.

Відкрийте * .dbf файли shapefile у OpenOffice Calc, НЕ використовуйте Excel. Він буде обробляти файл, і він марний, дізнався, що важкий шлях. І не впорядковуйте дані, це дуже конкретно і за порядком рядків у файлі. Переконайтесь, що NULL тепер є нулями, якщо їх немає, замініть їх ретельно.

Тепер вставити файл форми в QGIS і відкрити таблицю атрибутів . Тепер він повинен показувати нулі замість NULL. Використовуйте калькулятор полів та підсумовуйте поля, які реалізовані для вашої роботи, у новому стовпці.

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

Якщо ви хочете позбутися від усіх невикористаних полів у файлі. Просто відкрийте файл dbf ще раз у Calc та видаліть небажані стовпці за бажанням. Особисто я б радив навчитися отримувати зручніше, переходячи у форму, таким чином, як це роблю часто.


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

1
Ви можете створити багатокутне накладання за допомогою PostGIS (якщо ви його використовуєте), що розбиває ваші поліси, що перекриваються. gis.stackexchange.com/questions/83/… Можливо, хтось із кращим SQL-фу може нам тут допомогти, і як отримати отримані поліси для успадкування своїх значень, я не надто добре в цьому.
Рома

1
Ще один варіант, який я б дуже наголосив, - можливо, саме час переосмислити свій точний підхід до вашої проблеми. Які дані ви намагаєтеся зіставити? Чи є підстави припускати, що значення було б однорідним в усьому багатокутнику? Чи насправді багатокутник, що перекривається, матиме накопичувальні ефекти? Якщо у вас немає вагомих доказів, які дозволяють запропонувати ці речі, використання цієї карти для будь-якого виду прогнозного моделювання може бути хиткою. Просто подумайте над тим, що у вас може бути правильне рішення, але ви можете знайти кращий спосіб його моделювання чи відображення.
RomaH

1
Дякуємо за пропозицію PostGIS. Я ознайомлюсь із цим, але я просто ознайомлююся з тим, як використовувати PostGIS. Що стосується переоцінки питання ... Я бачу, що ви маєте на увазі, але я не впевнений, як інакше я міг би уявити те, що ми намагаємося висловити. Наші дані представляють усі сфери, які старійшини та користувачі ресурсів визначають як продуктивні чи важливі з культурної точки зору. Ми розуміємо, що карта значень не має бути однорідною на всьому полігоні, але достатньо близька до точки, яку ми хочемо виразити картою.
NWT Адам

1
Великі пальці аж до будь-якого посібника в qgis - особливо після того, як ви почнете мати справу з // tons // of shapefiles, ви можете опинитися в дуже розчарувальному положенні. Ви не пошкодуєте про використання свого SQL-фу, будь то плагін postGIS або плагін GRASS (див. Мою відповідь нижче: gis.stackexchange.com/a/42188/7689 ).
egbutter

4

Це загальний робочий процес з використанням растрових. Я не знаю специфіки її досягнення в QGIS.

  1. Використовуйте інструмент перетину для створення нового векторного шару областей перекриття багатокутника
  2. Перетворіть ваші векторні шари, включаючи шар перекриття, до растрових
  3. Використовуйте арифметику растру (можливо, додавання) для комбінування растрових
  4. Результатом має бути растр, схожий на теплову карту

Альфа / нульові значення та / або прозорість шару дозволять вам накладати растр на будь-яку базову карту.


Пройшовши цей робочий потік, у мене залишився великий сірий блок, що покриває масштаби нового растру. Як я можу зробити так, щоб це виглядало як теплова карта?
NWT Адам

1
Чи є різні значення, призначені пікселям у кінцевому растрі? Кілька думок: Можливо, вам доведеться вказати більш точну роздільну здатність (більше пікселів) під час створення растр; растри повинні бути однакового розміру та роздільної здатності; Вам може знадобитися розтягнути або змінити отриману кольорову карту растру, щоб показати більш яскраві кольори для більших значень.

Гаразд, я встановив кольорову карту, але я отримую лише два кольори: синій (значення 0) та червоний (2). Я здогадуюсь, що кожному шару при растровані шарах було надано значення 1, а не кожен багатокутник. Тоді, коли були додані растри, загальне значення дорівнювало 2. Як можна підтримувати / додавати значення на рівні полігону, а не на рівні шару?
NWT Адам

растр

Як зробити растр більш тонкої роздільної здатності?
NWT Адам

4

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

Приєднуйтесь до атрибутів за місцем розташування, а ваші гексогональні клітини як цілі, а ваші дані точки - як об'єднання. Виберіть, щоб зберегти всі функції. Встановіть символіку для осередків із успадкованим значенням на потрібний колір і встановіть прозорість приблизно на 50%.

Потім на вашому шарі з круговими полісами встановіть свою символіку того ж кольору та прозорості. Помістіть коло poly перед коміркою poly. Це дасть ілюзію підвищеного насичення у міру збільшення значення.

Якщо ви хочете, ви також можете витягнути лінії всіх полісів і накладати зверху, щоб контури підшару не були перефарбовані іншими шарами.

Вам доведеться пограти з кольорами та прозорістю, щоб знайти найкраще рішення. Я вважаю, що такі ж кольори найкраще виглядають, але досвід.


4

Я пропоную вам використовувати плагін GRASS - QGIS має досить обмежений функціонал (а навіщо винаходити колесо в python, коли програмне забезпечення типу GRASS вже існує?):

v.in.ogr.qgis

[Наступні два рядки можуть знадобитися, залежно від того, чи мають багатокутники вже значення]

v.db.addcol 
v.db.update_const 

саме тут ми складаємо перекриття в полігонах, а потім робимо растр на основі цих стовпців

v.to.db ... qcolumns=sum(col_with_polygon_value)
v.to.rast.attr

v.out.ogr [r.out.ogr]

3

З звичайним QGIS це може бути складним, можливо, вам знадобиться користувальницький сценарій або використовувати просторову базу даних, наприклад PostGIS або Spatialite. Я б створив звичайну сітку точок за допомогою PostGIS або генерував як текстовий файл CSV та імпортував це. Потім намалюйте коло навколо кожної точки за допомогою st_buffer або прямокутників за допомогою ST_MakeEnvelope та підрахуйте всі області, що перекриваються кожного буфера. Тоді ви, мабуть, хочете видалити всі 0 значень, якщо це означає "немає даних". Нарешті, ви можете зробити теплову карту для сітки, використовуючи лічильник як поле Ваги.

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

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