Анализ соответствия двух растров (диаграмма рассеяния)
- antonv
- Активный участник
- Сообщения: 229
- Зарегистрирован: 29 ноя 2016, 10:44
- Репутация: 114
- Откуда: Санкт-Петербург
Анализ соответствия двух растров (диаграмма рассеяния)
Случился у меня следующий геоинформационный "затык":
имеются два растра. Оба представляют собой классификации (т.е. ячейки содержат не количественные значения, а номера классов): первый растр - классификация растительности, второй - классификация форм рельефа. Задача стоит получить статистику следующего вида: сколько и каких пикселей растительности содержится в разных формах рельефа.
Первое, что пришло в голову - применить инструмент scatterplot в SAGA и конвертировать результат из "картинки" (графика) в табличку, где сопоставлены попиксельно два растра. Далее табличку можно было бы вставить в эксель, и там уже делать с ней что угодно. Но вот проблема - табличка содержит гораздо меньше значений, чем пикселей в растрах. При построении Scatterplot можно указывать параметр sample number - я выставляю число, заведомо большее количества пикселей, но число строк в таблице остается неизменным (18025 - я даже решил, что это какое-то магическое число для SAGA).
Ладно, второй вариант, вроде подходящий - конвертируем, например, второй растр в полигоны и далее применяем инструмент Зональной статистики в QGIS. Но этот инструмент может посчитать либо количество всех пикселей, входящих в полигоны (а нужно ведь "разложить" по классам), либо посчитать сумму всех значений, что тоже вроде не подходит.
Есть, конечно, вариант решения "в лоб" - сохранить оба растра в *.asc, открыть в блокноте, сделать так, что все значения пикселей были перечислены в один столбец, скопировать столбцы обоих растров в эксель и далее уже анализировать.
Но мне кажется, я что-то упускаю. Есть ведь какой-то подходящий для решения этой задачи инструмент, но какой?
имеются два растра. Оба представляют собой классификации (т.е. ячейки содержат не количественные значения, а номера классов): первый растр - классификация растительности, второй - классификация форм рельефа. Задача стоит получить статистику следующего вида: сколько и каких пикселей растительности содержится в разных формах рельефа.
Первое, что пришло в голову - применить инструмент scatterplot в SAGA и конвертировать результат из "картинки" (графика) в табличку, где сопоставлены попиксельно два растра. Далее табличку можно было бы вставить в эксель, и там уже делать с ней что угодно. Но вот проблема - табличка содержит гораздо меньше значений, чем пикселей в растрах. При построении Scatterplot можно указывать параметр sample number - я выставляю число, заведомо большее количества пикселей, но число строк в таблице остается неизменным (18025 - я даже решил, что это какое-то магическое число для SAGA).
Ладно, второй вариант, вроде подходящий - конвертируем, например, второй растр в полигоны и далее применяем инструмент Зональной статистики в QGIS. Но этот инструмент может посчитать либо количество всех пикселей, входящих в полигоны (а нужно ведь "разложить" по классам), либо посчитать сумму всех значений, что тоже вроде не подходит.
Есть, конечно, вариант решения "в лоб" - сохранить оба растра в *.asc, открыть в блокноте, сделать так, что все значения пикселей были перечислены в один столбец, скопировать столбцы обоих растров в эксель и далее уже анализировать.
Но мне кажется, я что-то упускаю. Есть ведь какой-то подходящий для решения этой задачи инструмент, но какой?
-
- Гуру
- Сообщения: 920
- Зарегистрирован: 30 дек 2008, 14:11
- Репутация: 236
- Откуда: Ханты-Мансийск
- Контактная информация:
Re: Анализ соответствия двух растров (диаграмма рассеяния)
Быстрее всего сделать это в GRASS используя модуль r.stats
Создать проект GRASS, загрузить туда оба растра, потом выполнить команду:
Флаги (можете другие выбрать, например в процентах выразить):
c - выразить результат в количестве пикселей
n - не включать в отчет статистику по классу "нет данных"
Создать проект GRASS, загрузить туда оба растра, потом выполнить команду:
Код: Выделить всё
r.stats -cn input=relief_raster,vegetation_raster separator=space null_value=* > путь к файлу/statistics.txt
c - выразить результат в количестве пикселей
n - не включать в отчет статистику по классу "нет данных"
-
- Гуру
- Сообщения: 4057
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Анализ соответствия двух растров (диаграмма рассеяния)
загрузите оба растра в R, и если они одинаковые, просто сделате table()antonv писал(а):Есть, конечно, вариант решения "в лоб" - сохранить оба растра в *.asc
Код: Выделить всё
library(raster)
r1<-raster(filename1)
r2<-raster(filename2)
table(r1[],r2[])
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 793
- Ваше звание: званий не имею
- Откуда: Москва
Re: Анализ соответствия двух растров (диаграмма рассеяния)
Можно только добавить, что модуль <r.stats> доступен и в QGIS через "Анализ данных" (Processing).bolotoved писал(а):Быстрее всего сделать это в GRASS используя модуль r.stats
Редактор материалов, модератор форума
- antonv
- Активный участник
- Сообщения: 229
- Зарегистрирован: 29 ноя 2016, 10:44
- Репутация: 114
- Откуда: Санкт-Петербург
Re: Анализ соответствия двух растров (диаграмма рассеяния)
Спасибо за ответы! Через QGIS удобнее всего получается.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 33 гостя