Страница 1 из 1
Присвоить атрибут по наибольшей площади пересечения
Добавлено: 21 фев 2014, 21:03
rhot
Есть 2 вектора: почвы и вырубки. Типов почв только три, остальные исключены из рассчёта.
Необходимо присовить полигонам вырубок, преобладающий тип почвы. См. картинку.
Я склоняюсь к PG/PostGIS поскольку данные там и считать в терминале проще и быстрей.
1) Обрезать почвы вырубками;
2) Посчитать площади для обрезанных полигонов;
3) Присвоить пересекающимся почвам тот же ID, что и у вырубок;
4) Для каждого полигона почвы с одинаковым ID вырубок определить наибольший по площади объект и тип почвы этого объекта (почвы) присвоить вырубке с соотвествующим ID.
Муторно получилось. Может кто проще делал или знает как сделать?
Re: Присвоить атрибут по наибольшей площади пересечения
Добавлено: 21 фев 2014, 23:02
А.Серов
Может не оптимальный вариант, но я бы так сделал
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. Может быть полезно для последующего анализа.
Re: Присвоить атрибут по наибольшей площади пересечения
Добавлено: 22 фев 2014, 12:09
ginpetr
в мапинфо есть команда обновить колонку одной таблицы значениями другой таблицы, объединение данных по пересечению объектов, там что-то бало пропорционально площади пересечения. к сожалению сейчас доступа к программе не имею, чтоб точно посмотреть, но не исключено, что там можно в одно-два действия всё решить.
Re: Присвоить атрибут по наибольшей площади пересечения
Добавлено: 22 фев 2014, 14:38
thegeo
Реализация в MI. Программа и пример в архиве. Все для трех типов почв, но несложно расширить программу и для более общего случая. Результат работы на рисунке.
Re: Присвоить атрибут по наибольшей площади пересечения
Добавлено: 22 фев 2014, 15:03
rhot
Круто! Спасибо за информацию.
Re: Присвоить атрибут по наибольшей площади пересечения
Добавлено: 22 фев 2014, 18:00
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 думаю.