поэлементный Clip
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 32
поэлементный Clip
Привет!
Есть два слоя - полигональный и линейный. Эти слои соотносятся друг с другом по ID - линия N1 относится к полигону N1. При этом геометрически линия N1 может заезжать на полигон NX. Задача - обрезать линейный шейп по соответствующим полигонам. Т.е. пошагово это "выбрать первый полигон"-"выбрать первую линию"-"клипнуть"-"выбрать второй полигон"-...
Есть какие-нибудь варианты сделать это автоматом?
Есть два слоя - полигональный и линейный. Эти слои соотносятся друг с другом по ID - линия N1 относится к полигону N1. При этом геометрически линия N1 может заезжать на полигон NX. Задача - обрезать линейный шейп по соответствующим полигонам. Т.е. пошагово это "выбрать первый полигон"-"выбрать первую линию"-"клипнуть"-"выбрать второй полигон"-...
Есть какие-нибудь варианты сделать это автоматом?
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: поэлементный Clip
Model Builder в помощь.
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 32
Re: поэлементный Clip
я понимаю, что можно в modelbuilder'е накидать что-то вроде iterate selection (Poly) - select by attribute (Line, id=%ID%) - clip (Line, Poly). Но это наплодит промежуточных слоёв.
Нашел метод intersect для курсора, пытаюсь понять, как это работает..
Нашел метод intersect для курсора, пытаюсь понять, как это работает..
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 32
Re: поэлементный Clip
Сработало!
В итоге (вдруг кому пригодится?:)
uc = arcpy.da.UpdateCursor(Lines, "SHAPE@")
sc = [row[-1] for row in arcpy.da.SearchCursor(Polygons, "SHAPE@")]
k=0
for row in uc:
clippedFeature=row[-1].intersect(sc[k], 2)
uc.updateRow([clippedFeature])
k+=1
по мотивам https://blogs.esri.com/esri/arcgis/2013 ... r-the-job/
В итоге (вдруг кому пригодится?:)
uc = arcpy.da.UpdateCursor(Lines, "SHAPE@")
sc = [row[-1] for row in arcpy.da.SearchCursor(Polygons, "SHAPE@")]
k=0
for row in uc:
clippedFeature=row[-1].intersect(sc[k], 2)
uc.updateRow([clippedFeature])
k+=1
по мотивам https://blogs.esri.com/esri/arcgis/2013 ... r-the-job/
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: поэлементный Clip
а зачем такой мудреж, если можно просто разрезать линии полигонами, а потом собрать нужное запросом по ID и вложенности в полигоны (не прибегая к программированию)?
-
- Участник
- Сообщения: 85
- Зарегистрирован: 21 ноя 2010, 17:36
- Репутация: 32
Re: поэлементный Clip
Потому что линии покрывают большую площадь и залезают на соседние полигоны. Т.е при разбиении полигонами я получил бы линию, состоящую из, условно, двух кусков - один в "своём" полигоне, другой - в соседнем.
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
Кто сейчас на конференции
Сейчас этот форум просматривают: Ahrefs [Bot] и 3 гостя