¿Recorte por lotes en ArcGIS Desktop usando ArcPy?

12

Me he encontrado con algunas preguntas similares para versiones anteriores de ArcGIS, pero no he encontrado una respuesta adecuada para ArcGIS 10.

Tengo dos archivos de forma poligonal que cubren un área grande (por ejemplo, un Estado / Provincia completo). El primer archivo de forma representa la cobertura terrestre de todo el Estado y el segundo representa 50 cuencas hidrográficas individuales. Me gustaría recortar el archivo de forma de la cubierta terrestre en función de cada cuenca hidrográfica (cada una tiene un nombre único almacenado en un campo). Luego me gustaría guardar los archivos recortados de salida (uno para cada una de las 50 cuencas hidrográficas) utilizando el nombre de cuenca hidrográfica.

Dado que hay 50 clips para realizar, este proceso es un gran candidato para el procesamiento por lotes.

Radar
fuente
1
¿Qué ha encontrado para las versiones anteriores de ArcGIS y qué las hace inadecuadas para usar con ArcGIS 10?
nmpeterson
2
@Radar Eche un vistazo a esta pregunta: gis.stackexchange.com/q/8104/1297 Cubre lo que está buscando. Si necesita ayuda para modificar sus necesidades, hágamelo saber. He marcado esto como un posible duplicado.
SaultDon
@SaultDon: ¿Está diciendo que las soluciones en gis.stackexchange.com/q/8104/1297 definitivamente también funcionarán en ArcGIS 10?
whuber
@SaultDon: se han realizado algunos cambios en los cursores en ArcGIS 10 que hacen que esa respuesta en particular esté desactualizada. Espero encontrar la mejor solución para Arc10 y no solo una versión pirateada de un script 9.3.
Radar
@whuber No como es, necesita cambios que pueden no ser obvios. Radar - Tienes razón, son más simples =)
SaultDon

Respuestas:

17

La siguiente secuencia de comandos recorta las cuencas hidrográficas del polígono a los límites de los condados del polígono, nombrando cada clase de entidad de salida como HspWBD_HU12_county name. Probado y funciona. Asegúrese de que sus valores en el campo NOMBRE no tengan caracteres o espacios especiales (los métodos simples de cadena de Python pueden limpiarlo por usted).

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')), '')
Chad Cooper
fuente
¡Cursor de tipo absolutamente perfecto aunque clásico!
SIslam
8

Mientras usa ArcGIS 10, usaría modelbuilder con la herramienta integrada: Selección de entidad de iteración para realizar esta tarea. Ver el pseudo-modelo en la imagen. no necesita saber el cifrado de python en absoluto. pseudo modelo

VietThanh Le
fuente
Para una explicación más profunda de este enfoque, vea Recortar fácilmente un área de trabajo completa para un área de estudio específica y el paquete de herramientas de geoprocesamiento Clip Workspace asociado . También explorado aquí en la pila: gis.stackexchange.com/questions/84989/…
matt wilkie
2

Esto suena exactamente como lo que hace la herramienta Dividir de la caja de herramientas Análisis .

Sin embargo, requiere una licencia de ArcInfo para ejecutarse, por lo que no está disponible para la mayoría de los usuarios de ArcGIS Desktop, por lo que me gusta la respuesta de Chad, que también funcionará para los usuarios de ArcGIS 10 Desktop con licencias de nivel ArcView y ArcEditor.

PolyGeo
fuente
-1

Puede hacerlo de la manera que desee si primero ejecuta otra herramienta en modo por lotes: Herramientas de conversión> A geodatabase> Clase de entidad a Clase de entidad. Eso le permitirá usar una expresión para tomar su capa de cuenca hidrográfica y extraer cada cuenca de manera invidividual y guardarla como su propia clase de entidad, luego tendrá 50 capas individuales que puede usar con la herramienta Clip en modo por lotes.

Dan C
fuente
2
Agradezco la respuesta, pero esta no parece ser una solución muy eficiente. Prefiero no crear 50 archivos de cuenca hidrográfica separados y luego 50 archivos recortados más.
Radar
-1

La herramienta Dividir en ArcGIS hace exactamente esto.

Mariana Oliveira
fuente