Пакетная вырезка в 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, я бы использовал построитель моделей со встроенным инструментом: Выбор элемента итерации для выполнения этой задачи. Смотрите псевдомодель на картинке. ему вообще не нужно знать скриптинг на питоне. псевдо модель


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

2

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

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


-1

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


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

-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.