Пакетная вырезка в ArcGIS Desktop с использованием ArcPy?

12

Я встречал несколько похожих вопросов для более старых версий ArcGIS, но не нашел подходящего ответа для ArcGIS 10.

У меня есть два полигональных шейп-файла, которые покрывают большую область (например, весь штат / провинция). Первый шейп-файл представляет земной покров для всего штата, а второй представляет 50 отдельных водосборов. Я хотел бы обрезать шейп-файл земного покрова на основе каждого водораздела (каждый имеет уникальное имя, сохраненное в поле). Затем я хотел бы сохранить выходные обрезанные файлы (по одному для каждого из 50 водосборов), используя название водораздела.

Учитывая, что необходимо выполнить 50 клипов, этот процесс является отличным кандидатом для пакетной обработки.

радиолокационный
источник
1
Что вы нашли для старых версий ArcGIS и что делает их неподходящими для использования с ArcGIS 10?
nmpeterson
2
@Radar Посмотрите на этот вопрос: gis.stackexchange.com/q/8104/1297 Он охватывает то, что вы ищете. Если вам нужна помощь в модификации для ваших нужд, дайте мне знать. Я пометил это как возможный дубликат.
SaultDon
@SaultDon: Вы говорите, что решение (я) на gis.stackexchange.com/q/8104/1297 определенно будет работать в ArcGIS 10?
whuber
@SaultDon - Некоторые изменения были внесены в курсоры в ArcGIS 10, что делает этот конкретный ответ устаревшим. Я надеюсь найти лучшее решение для Arc10, а не просто взломанную версию скрипта 9.3.
Радар
@whuber Не так, как нужно, нужны изменения, которые могут быть неочевидны. Радар - Ты прав, они проще =)
SaultDon

Ответы:

17

Следующий скрипт обрезает водоразделы полигонов к границам округа полигонов, называя каждый выходной класс объектов чем-то вроде имени HspWBD_HU12_county. Проверено и все работает. Убедитесь, что в ваших значениях в поле NAME нет специальных символов или пробелов (простые строковые методы Python могут это исправить).

import arcpy

arcpy.env.workspace = r'D:\Projects\GDBs\slowbutter.gdb\IPAS'
rows = arcpy.SearchCursor('HspAOI')
for row in rows:
    feat = row.Shape
    arcpy.Clip_analysis('HspWBD_HU12', feat, 'HspWBD_HU12_' + str(row.getValue('NAME')), '')
Чед Купер
источник
Абсолютно идеальный, хотя классический тип курсора!
Сислам
8

Поскольку вы используете ArcGIS 10, я бы использовал построитель моделей со встроенным инструментом: Выбор элемента итерации для выполнения этой задачи. Смотрите псевдомодель на картинке. ему вообще не нужно знать скриптинг на питоне. псевдо модель

VietThanh Le
источник
Более подробное объяснение этого подхода см. В разделе Легкое закрепление всего рабочего пространства для конкретной области исследования и связанный пакет инструментов геообработки Clip Workspace . Также исследовано здесь в стеке: gis.stackexchange.com/questions/84989/…
Мэтт Вилки
2

Это похоже на то, что делает инструмент «Разделить» из панели инструментов «Анализ» .

Однако для его запуска требуется лицензия ArcInfo, поэтому она недоступна большинству пользователей ArcGIS Desktop, поэтому мне нравится ответ Чада, который будет работать и для пользователей ArcGIS 10 Desktop с лицензиями уровня ArcView и ArcEditor.

PolyGeo
источник
-1

Вы можете сделать это так, как вам нужно, если вы сначала запустите другой инструмент в пакетном режиме: Инструменты преобразования> В базу геоданных> Класс пространственных объектов в Класс пространственных объектов. Это позволит вам использовать выражение, чтобы взять слой вашего водораздела и вырвать каждый водораздел для каждого отдельного объекта и сохранить его как свой собственный класс пространственных объектов, тогда у вас будет 50 отдельных слоев, которые вы можете использовать с помощью инструмента «Клип» в пакетном режиме.

Дэн С
источник
2
Я ценю ответ, но, похоже, это не очень эффективное решение. Я бы предпочел не создавать 50 отдельных файлов водораздела, а затем еще 50 вырезанных файлов.
Радар
-1

Инструмент Split в ArcGIS делает именно это.

Мариана Оливейра
источник