Присвоить атрибут по наибольшей площади пересечения
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Присвоить атрибут по наибольшей площади пересечения
Есть 2 вектора: почвы и вырубки. Типов почв только три, остальные исключены из рассчёта.
Необходимо присовить полигонам вырубок, преобладающий тип почвы. См. картинку.
Я склоняюсь к PG/PostGIS поскольку данные там и считать в терминале проще и быстрей.
1) Обрезать почвы вырубками;
2) Посчитать площади для обрезанных полигонов;
3) Присвоить пересекающимся почвам тот же ID, что и у вырубок;
4) Для каждого полигона почвы с одинаковым ID вырубок определить наибольший по площади объект и тип почвы этого объекта (почвы) присвоить вырубке с соотвествующим ID.
Муторно получилось. Может кто проще делал или знает как сделать?
Необходимо присовить полигонам вырубок, преобладающий тип почвы. См. картинку.
Я склоняюсь к PG/PostGIS поскольку данные там и считать в терминале проще и быстрей.
1) Обрезать почвы вырубками;
2) Посчитать площади для обрезанных полигонов;
3) Присвоить пересекающимся почвам тот же ID, что и у вырубок;
4) Для каждого полигона почвы с одинаковым ID вырубок определить наибольший по площади объект и тип почвы этого объекта (почвы) присвоить вырубке с соотвествующим ID.
Муторно получилось. Может кто проще делал или знает как сделать?
- Вложения
-
- Полупрозрачные почвы наложены на красный полигон вырубок
- Вырубка.jpeg (45.38 КБ) 5831 просмотр
___________(¯`·.¸(¯`·.¸ 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. Может быть полезно для последующего анализа.
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: Присвоить атрибут по наибольшей площади пересечения
в мапинфо есть команда обновить колонку одной таблицы значениями другой таблицы, объединение данных по пересечению объектов, там что-то бало пропорционально площади пересечения. к сожалению сейчас доступа к программе не имею, чтоб точно посмотреть, но не исключено, что там можно в одно-два действия всё решить.
-
- Активный участник
- Сообщения: 161
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: Присвоить атрибут по наибольшей площади пересечения
Реализация в MI. Программа и пример в архиве. Все для трех типов почв, но несложно расширить программу и для более общего случая. Результат работы на рисунке.
- Вложения
-
- rna_00130.png (25.36 КБ) 5752 просмотра
-
tstGrnd.rar
- (5.88 КБ) 404 скачивания
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Присвоить атрибут по наибольшей площади пересечения
Круто! Спасибо за информацию.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Присвоить атрибут по наибольшей площади пересечения
Пока пересечь получилось так:
Над пунктом 4 думаю.
Код: Выделить всё
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);
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 4 гостя