Статистические вычисления в QGIS

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
losdimas
Интересующийся
Сообщения: 24
Зарегистрирован: 24 июн 2011, 10:06
Репутация: 2

Статистические вычисления в QGIS

Сообщение losdimas » 12 авг 2013, 15:48

Здравствуйте, уважаемые.
В программе R при использовании пакета PBSMapping, можно сделать следующую карту-Изображение
Где: 1. Загружаем точечный шейп-файл со значениями
2. Создаем регулярную сетку с заданным шагом
3. Проводим статистические вычисления над данными шейп-файла которые пересекаются регулярной сеткой (например вычисляем среднее в каждом квадрате).
4. На основании вычисленных данных заливаем квадраты, содержащие значения, градуированными цветами.

Вопрос, как это выполнить в QGIS? пункт 1 - тут понятно, пункт 2 - Вектор-выборка-регулярная сетка, а вот с остальными проблема.

HasT
Активный участник
Сообщения: 142
Зарегистрирован: 16 окт 2009, 22:08
Репутация: 55
Откуда: Харьков

Re: Статистические вычисления в QGIS

Сообщение HasT » 14 авг 2013, 11:30

Пункт 3 можно сделать используя PostgreSQL/PostGIS. Запрос на подсчет статистики будет следующий:

Код: Выделить всё

SELECT
m."nam",
COUNT(*) AS pointcount,
SUM(data) AS pointsum,
AVG(data) AS pointavg
FROM
"point" AS r,
"buffer" AS m 
WHERE ST_Intersects(m.the_geom, r.the_geom)
GROUP BY m."nam"
где point - точечный слой с значениями в поле data; buffer - полигональный слой регулярной сетки с именем ячейки nam. pointcount - количество точек в ячейке, pointsum - сумма значений точек в ячейке, pointavg - среднее значение точек для ячейки.
Для записи значений в слой регулярной сетки необходимо сделать:
- добавить колонки для записываемых значений

Код: Выделить всё

ALTER TABLE "buffer" ADD COLUMN pointcount INTEGER;
ALTER TABLE "buffer" ADD COLUMN pointsum NUMERIC (20, 2);
ALTER TABLE "buffer" ADD COLUMN pointavg NUMERIC (20, 2);
- выпонить запрос для записи вычисляемых значений:

Код: Выделить всё

UPDATE "buffer" t
SET
pointcount =calc.pointcount,
pointsum =calc.pointsum,
pointavg =calc.pointavg
FROM (
SELECT
m."nam",
COUNT(*) AS pointcount,
SUM(data) AS pointsum,
AVG(data) AS pointavg
FROM
"point" AS r,
"buffer" AS m 
WHERE ST_Intersects(m.the_geom, r.the_geom)
GROUP BY
m."nam"
) calc
WHERE t."nam" = calc."nam";
Пункт 4 - сделать соответствующую классификацию значений в свойствах - стиль слоя регулярной сетки.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Статистические вычисления в QGIS

Сообщение Максим Дубинин » 14 авг 2013, 11:35

на прямой вопрос не отвечу, но мнение выскажу
имхо, это не нужно делать в QGIS, расчеты нужно делать в R, а геометрические операции и визуализацию - в QGIS, у вас уже все для этого есть.
пристегивайтесь, турбулентность прямо по курсу

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Статистические вычисления в QGIS

Сообщение Petruxin » 14 авг 2013, 11:37

На Gis-Lab есть статья про использование Sextante в Qgis там пример очень похожую операцию иллюстрирует.

[ Сообщение с мобильного устройства ]

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя