Страница 1 из 1

Получения слоя, как результата пересечения двух других

Добавлено: 06 апр 2014, 16:50
xar4enkkoff
Здравствуйте. Имеются два слоя, скажем "zone" и "region". В первом - ландшафты, во втором - адм. области.
Нужно получить слой, в котором будут полигоны как результат пересечения контуров полигонов двух других слоев.
Интересует два случая.
1) Общая граница первого слоя и второго совпадает.
Безымянный 1.jpg
Безымянный 1.jpg (18.04 КБ) 9319 просмотров
Вот пусть, например, как тут. Синий - лес, зеленый - степь, красный - регион_1, фиолетовый - регион_2.
В итоговом слое нужно получить четыре полигона: 1) лес/регион_1, 2) лес/регион_2, 3) степь/регион_1, 4) степь/регион_2.
Делал когда-то такое в АркГИС, использовал инструмент Intersect. Все выходило прекрасно. Хочется в МИ.

2. Границы слоев не совпадают. Как тут:
Безымянный 2.jpg
Безымянный 2.jpg (31.67 КБ) 9319 просмотров
Цвета обозначают то же.
В результате хочется получить слой, в котором будут 3 полигона (как на рисунке)
1) степь/регион_1, 2) степь/регион_2, 3) лес/регион_2.
Точно не помню, но вроде давно в АркГИС у меня такое не выходило, потому что вроде граница разных слоев не совпадает. Хочется делать такое в МапИНФО.

Прошу, по возможности, по-детальнее, как для дурака.

Re: Получения слоя, как результата пересечения двух других

Добавлено: 06 апр 2014, 18:59
thegeo
Для обоих случаев будет работать следующий подход (если я правильно понял задачу):
1. Выделяем объекты на «Зоны» (слой д.б. редактируемый)
2. Меню: Объекты/Выбрать изменяемый объект
3. Выделяем объекты на «Регионы»
4. Меню: Объекты/Удалить внешнюю часть…
Если нужно сохранить таблицу «Зоны», то предварительно нужно сделать с нее копию и работать с копией.

Re: Получения слоя, как результата пересечения двух других

Добавлено: 06 апр 2014, 19:26
xar4enkkoff
Нужно, чтобы в атрибутах слоя нового были параметры и первого, и второго слоев исходных. Обрезка этого не даст. Короче говоря, нужно, чтобы потом была возможность идентифицировать, результат пересечения чего есть каждый полигон

P.S. Возникла тут идея сделать как Вы советуете. А потом просто обновить колонки в зависимости от положеняи конечных полигонов на исходных

Re: Получения слоя, как результата пересечения двух других

Добавлено: 06 апр 2014, 19:58
gamm
xar4enkkoff писал(а):Нужно, чтобы в атрибутах слоя нового были параметры и первого, и второго слоев исходных. Обрезка этого не даст. Короче говоря, нужно, чтобы потом была возможность идентифицировать, результат пересечения чего есть каждый полигон
придется делать запрос с пространственным условием

select * from a,b where a.obj within b.obj into tmp

и лучше, чтобы имена не пересекались (в запросе объединятся записи таблицы а, центроиды которых попадают в объекты в, что в вашем случае даст однозначный результат). Таблицу tmp нужно будет сохранить в файл.

Re: Получения слоя, как результата пересечения двух других

Добавлено: 06 апр 2014, 20:07
ginpetr
блин, писал инструкцию, но сообщение не добавилось...

вместо удалить часть нужно разрезать и потом обновить колонку у зон, извлекая значения из адм.терр., объединение данных по признаку объект из адм.терр. содержит объекти из зоны. колонку можно обновить существующую, а можно добавить временную

Re: Получения слоя, как результата пересечения двух других

Добавлено: 06 апр 2014, 21:06
thegeo
После удаления внешней части, постройте запрос для таблиц «Зоны» (измененная) и «Регионы» на пересечение. Из результирующей таблицы можно извлечь много полезного. При построении запроса учитывайте viewtopic.php?f=17&t=16137 .

Re: Получения слоя, как результата пересечения двух других

Добавлено: 07 апр 2014, 10:07
xar4enkkoff
Всем спасибо! Проблема решилась. Я, наверное, некорректно объяснил. Мне сами объекты пересечения не так важны были, как их площадь вкупе с атрибутами исходными от двух слоев.
Проблема решилась идеально вот так:
http://web.pb.com/mapinfopro-jul-2013/Q ... witter"%7D

Re: Получения слоя, как результата пересечения двух других

Добавлено: 09 апр 2014, 05:37
Boris
xar4enkkoff писал(а):Всем спасибо! Проблема решилась. Я, наверное, некорректно объяснил. Мне сами объекты пересечения не так важны были, как их площадь вкупе с атрибутами исходными от двух слоев.
Проблема решилась идеально вот так:
http://web.pb.com/mapinfopro-jul-2013/Q ... witter"%7D
Разработчики Mapinfo подумали немного больше, чем вам сообщили продвинутые пользователи, которые сперва вычисляют пересечение, а потом дополнительно еще и площадь, и вместо

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

CartesianArea(Overlap(Cadastre.Obj, Urban_Areas.Obj), "sq m") "Overlap sqm"
приготовили для этого единую функцию:

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

AreaOverlap( ) function 
Purpose 
Returns the area resulting from the overlap of two closed objects. You can call this function from the MapBasic Window in MapInfo Professional. 

Syntax 
AreaOverlap( object1, object2 )  
object1 and object2 are closed objects. 
которая работает существенно быстрее за счет того, что не строит внешний объект, пригодный для отображения в выбранной проекции, а обходится внутренними расчетами.