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

MapInfo, MapBasic
Ответить
xar4enkkoff
Активный участник
Сообщения: 107
Зарегистрирован: 17 янв 2010, 00:07
Репутация: 5
Откуда: Курск

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

Сообщение xar4enkkoff » 06 апр 2014, 16:50

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

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

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

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

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

Сообщение thegeo » 06 апр 2014, 18:59

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

xar4enkkoff
Активный участник
Сообщения: 107
Зарегистрирован: 17 янв 2010, 00:07
Репутация: 5
Откуда: Курск

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

Сообщение xar4enkkoff » 06 апр 2014, 19:26

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

P.S. Возникла тут идея сделать как Вы советуете. А потом просто обновить колонки в зависимости от положеняи конечных полигонов на исходных
Последний раз редактировалось xar4enkkoff 06 апр 2014, 19:59, всего редактировалось 1 раз.

gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

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

Сообщение gamm » 06 апр 2014, 19:58

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

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

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

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

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

Сообщение ginpetr » 06 апр 2014, 20:07

блин, писал инструкцию, но сообщение не добавилось...

вместо удалить часть нужно разрезать и потом обновить колонку у зон, извлекая значения из адм.терр., объединение данных по признаку объект из адм.терр. содержит объекти из зоны. колонку можно обновить существующую, а можно добавить временную
Последний раз редактировалось ginpetr 06 апр 2014, 21:43, всего редактировалось 1 раз.

thegeo
Активный участник
Сообщения: 161
Зарегистрирован: 17 янв 2012, 18:51
Репутация: 74

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

Сообщение thegeo » 06 апр 2014, 21:06

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

xar4enkkoff
Активный участник
Сообщения: 107
Зарегистрирован: 17 янв 2010, 00:07
Репутация: 5
Откуда: Курск

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

Сообщение xar4enkkoff » 07 апр 2014, 10:07

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

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

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

Сообщение Boris » 09 апр 2014, 05:37

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. 
которая работает существенно быстрее за счет того, что не строит внешний объект, пригодный для отображения в выбранной проекции, а обходится внутренними расчетами.

Ответить

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

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

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