Присвоить атрибут по наибольшей площади пересечения

Вопросы общего характера по ГИС и дистанционному зондированию, не связанные с конкретным ПО.
Ответить
Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Присвоить атрибут по наибольшей площади пересечения

Сообщение rhot »

Есть 2 вектора: почвы и вырубки. Типов почв только три, остальные исключены из рассчёта.

Необходимо присовить полигонам вырубок, преобладающий тип почвы. См. картинку.

Я склоняюсь к PG/PostGIS поскольку данные там и считать в терминале проще и быстрей.
1) Обрезать почвы вырубками;
2) Посчитать площади для обрезанных полигонов;
3) Присвоить пересекающимся почвам тот же ID, что и у вырубок;
4) Для каждого полигона почвы с одинаковым ID вырубок определить наибольший по площади объект и тип почвы этого объекта (почвы) присвоить вырубке с соотвествующим ID.

Муторно получилось. Может кто проще делал или знает как сделать?
Вложения
Полупрозрачные почвы наложены на красный полигон вырубок
Полупрозрачные почвы наложены на красный полигон вырубок
Вырубка.jpeg (45.38 КБ) 5985 просмотров
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
А.Серов
Активный участник
Сообщения: 209
Зарегистрирован: 14 янв 2010, 15:40
Репутация: 68
Откуда: Сыктывкар
Контактная информация:

Re: Присвоить атрибут по наибольшей площади пересечения

Сообщение А.Серов »

Может не оптимальный вариант, но я бы так сделал

1. Сделал Intersect, получил ID_FELL, SOIL_TYPE, AREA
2. Подцепил бы слой в MS Access
3. Построил перекрестный запрос где в строках были бы ID_FELL, в столбцах - типы почв (SOIL_TYPE1, SOIL_TYPE2...), а значения - сумма площадей (Sum(AREA))
4. Написал бы небольшой скрипт на VBA для выборки максимальной площади и запихивании его в специально подготовленное поле таблицы с вырубками. Строк 10 очевидного кода.

Наверняка, то же самое реализуется и в PostrgesSQL, скажем на PL. Не знаю только как быть с перекрестными запросами - не сталкивался.

Чем хорошо делать так - будем иметь в одной таблице сразу площади по всем типам почв для каждого ID_FELL. Хоть 3, хоть 100. Может быть полезно для последующего анализа.
Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Присвоить атрибут по наибольшей площади пересечения

Сообщение ginpetr »

в мапинфо есть команда обновить колонку одной таблицы значениями другой таблицы, объединение данных по пересечению объектов, там что-то бало пропорционально площади пересечения. к сожалению сейчас доступа к программе не имею, чтоб точно посмотреть, но не исключено, что там можно в одно-два действия всё решить.
thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

Re: Присвоить атрибут по наибольшей площади пересечения

Сообщение thegeo »

Реализация в MI. Программа и пример в архиве. Все для трех типов почв, но несложно расширить программу и для более общего случая. Результат работы на рисунке.
Вложения
rna_00130.png
rna_00130.png (25.36 КБ) 5906 просмотров
tstGrnd.rar
(5.88 КБ) 413 скачиваний
Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Присвоить атрибут по наибольшей площади пересечения

Сообщение rhot »

Круто! Спасибо за информацию.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Присвоить атрибут по наибольшей площади пересечения

Сообщение rhot »

Пока пересечь получилось так:

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

CREATE TABLE clearcuts_soils AS
SELECT b.id as clearcut_id, bedrock, cf_year, area_ha as full_area, round(CAST(ST_Area(ST_Intersection(a.geom, b.geom))/10000 as numeric),1) as area, ST_Intersection(a.geom, b.geom) as intersect_ab
FROM soils a INNER JOIN clearcuts b ON ST_Intersects(a.geom,b.geom);
Над пунктом 4 думаю.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Ответить

Вернуться в «Общие вопросы»

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

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