Пересечение объектов

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 09:22

Здравствуйте! Прошу помощи: есть 2 шейпа с полигональными объектами. Необходимо сделать выборку полигонов исходного слоя таким образом, чтоб перекрытие составляло от 50 до 100 % с полигонами сравнения.

Желательно, чтобы еще можно было узнать процент каждого перекрытия.

Приложил картинку для наглядности.

1 Полигон должен попасть в выборку, так как суммарное пересечение с тремя полигонами сравнения >50%
2 Полигон НЕ должен попасть в выборку, так как не имеет пересечений.
3 Полигон должен попасть в выборку, так как полностью входит в полигон сравнения
4 Полигон НЕ должен попасть в выборку, так как пересечение с полигоном сравнения <50%
5 Полигон НЕ должен попасть в выборку, так как суммарное пересечение с двумя полигонами сравнения <50%

Спасибо!
Вложения
1.jpg
1.jpg (112.22 КБ) 10259 просмотров

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Пересечение объектов

Сообщение trir » 09 июл 2015, 10:00

Как то так...

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

select * from 
(select * , sum(tbl1.geom.STIntersection(tbl2.geom)/tbl1.geom.STArea) as sum1
from tbl1, tbl2
where tbl1.geom.STIntersects(tbl2.geom)
group by tbl1.id) as t3
where sum1>0.5

avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Re: Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 10:52

Спасибо за ответ!
Однако, я не умею писать SQL запросы. Хотелось бы уточнить:
tbl1 и tbl2 - это сравниваемые шейпы?
Если да то в Select By Atributes я из ниспадающего списка выбираю tbl1, select * from tbl1 where: прописывается автоматически, а какие места мне нужно поменять в вашем коде дальше?
Шейпы для удобства назвал tbl1 и tbl2.

trir
Гуру
Сообщения: 5355
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1021
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Пересечение объектов

Сообщение trir » 09 июл 2015, 10:57

подозреваю этот инструмент не позволяет это сделать, я привёл код для MS SQL Server

avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Re: Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 11:05

Может тогда есть другие варианты?
Например, http://resources.arcgis.com/ru/help/mai ... 0044000000 .
Если бы кто помог написать код в Python был бы очень благодарен. Шейпы назвал tbl1 и tbl2 для удобства.

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Пересечение объектов

Сообщение Ariki » 09 июл 2015, 11:28

Tabulate Intersection - это не совсем то, он предназначен для классифицированных данных и вычисляет статистику по классам, а не по отдельным объектам. Можно сделать обычный Intersect с сохранением в атрибутах результата площади и ID исходного объекта, а затем в калькуляторе посчитать отношение площади результата к исходной. Потом через Join по ID выбрать объекты из исходного слоя.

avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Re: Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 11:49

Спасибо! А делать через Python? Не подскажете код?

Подозреваю, что начало примерно такое: arcpy.Intersect_analysis(["tbl1","tbl2"], "Intersect_output",
А как заставить выводить площадь и ID ?

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Пересечение объектов

Сообщение Ariki » 09 июл 2015, 12:12

FID он по умолчанию присоединяет, как и все остальные атрибуты (параметр join_attributes='ALL'). А площадь нужно предварительно скопировать из служебного атрибута SHAPE_Area в обычный атрибут - например, калькулятором или с помощью UpdateCursor в arcpy.

avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Re: Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 12:59

Прописал в Python
arcpy.Intersect_analysis(["tbl1","tbl2"],"C:\Users\Arkady\Documents\123.gdb","ALL")

Ошибка
Executing: Intersect "tbl1 #;tbl2 #" C:\Users\Arkady\Documents\951.shp ALL # INPUT
Start Time: Thu Jul 09 14:57:01 2015
WARNING 000117: Warning empty output generated.

Не подскажете, в чем проблема?

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Пересечение объектов

Сообщение Ariki » 09 июл 2015, 13:37

Это не ошибка, а предупреждение, что в результате пересечения получен пустой набор данных.

avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Re: Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 13:54

Но полигоны ТОЧНО пересекаются =(. Мне посоветовали воспользоваться следующей схемой: Clip-> Field Geometry -> Создать Field с отношением площадей к исходным * 100%. Это сработало! Но теперь как определить какой именно полигон с каким пересекаются? У шейпов нет атрибутов связанных друг с другом... То есть они связаны толшько пространственным положением. Как можно привязать полигоны из одного слоя к полигонам из другого по их пересечению?

Спасибо за ответы!

avserikov89
Новоприбывший
Сообщения: 8
Зарегистрирован: 09 июл 2015, 09:01
Репутация: 0

Re: Пересечение объектов

Сообщение avserikov89 » 09 июл 2015, 14:11

Вопрос закрыт. Спасибо всем откликнувшимся! Если кому понадобится что-то подобное то используя все выше написанное и вот это:

http://oldforum.dataplus.ru/forum/forum ... p?TID=9792

Все у вас получится.

Еще раз спасибо!

Ariki
Гуру
Сообщения: 731
Зарегистрирован: 12 янв 2011, 22:40
Репутация: 304
Ваше звание:

Re: Пересечение объектов

Сообщение Ariki » 09 июл 2015, 14:26

avserikov89 писал(а):Вопрос закрыт. Спасибо всем откликнувшимся!
Рад, что всё получилось.
avserikov89 писал(а):Но полигоны ТОЧНО пересекаются =(.
Странно. А проекция шейпов одинаковая? Какая версия ArcGIS?
Вообще ArcGIS - штука глючная, иногда происходят странные вещи.
avserikov89 писал(а):Как можно привязать полигоны из одного слоя к полигонам из другого по их пересечению
Есть инструмент Spatial Join.

Ответить

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

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

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