Recorte em lote no ArcGIS Desktop usando o ArcPy?

12

Encontrei algumas perguntas semelhantes para versões mais antigas do ArcGIS, mas não encontrei uma resposta adequada para o ArcGIS 10.

Eu tenho dois shapefiles de polígono que cobrem uma grande área (por exemplo, um estado / província inteiro). O primeiro arquivo de forma representa a cobertura da terra para todo o Estado e o segundo representa 50 bacias hidrográficas individuais. Gostaria de recortar o arquivo shapefile da cobertura do solo com base em cada bacia hidrográfica (cada uma tem um nome único armazenado em um campo). Gostaria, então, de salvar os arquivos cortados de saída (um para cada uma das 50 bacias hidrográficas) usando o nome da bacia hidrográfica.

Como existem 50 clipes a serem executados, esse processo é um ótimo candidato para o processamento em lote.

Radar
fonte
1
O que você encontrou para versões mais antigas do ArcGIS e o que as torna inadequadas para uso com o ArcGIS 10?
Nfeterson
2
@Radar Dê uma olhada nesta pergunta: gis.stackexchange.com/q/8104/1297 Ela cobre o que você está procurando. Se precisar de ajuda para modificar suas necessidades, entre em contato. Eu sinalizei isso como uma possível duplicata.
SaultDon
@SaultDon: Você está dizendo que as soluções em gis.stackexchange.com/q/8104/1297 definitivamente também funcionarão no ArcGIS 10?
whuber
@SaultDon - Algumas alterações foram feitas nos cursores do ArcGIS 10 que causam uma resposta desatualizada. Espero encontrar a melhor solução para o Arc10 e não apenas uma versão hackeada de um script 9.3.
Radar
@whuber Não é assim, precisa de mudanças que podem não ser óbvias. Radar - Você está certo, eles são mais simples =)
SaultDon

Respostas:

17

O script a seguir recorta bacias hidrográficas de polígono nos limites do condado de polígono, nomeando cada característica de saída como algo como nome de HspWBD_HU12_county. Testado e funciona. Certifique-se de que seus valores no campo NAME não tenham caracteres ou espaços especiais (métodos simples de sequência de caracteres Python podem limpar isso para você).

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
fonte
Absolutamente perfeito, porém clássico tipo cursor !!
SIslam
8

Enquanto você usa o ArcGIS 10, eu usaria o modelbuilder com a ferramenta incorporada: Seleção de Recurso de Iteração para executar esta tarefa. Veja o pseudo-modelo na imagem. ele não precisa conhecer python scritping. pseudo modelo

VietThanh Le
fonte
Para obter uma explicação mais detalhada dessa abordagem, recorte facilmente um espaço de trabalho inteiro para uma área de estudo específica e o pacote de ferramentas de geoprocessamento associado do Clip Workspace . Também explorado aqui na pilha: gis.stackexchange.com/questions/84989/…
matt wilkie
2

Isso soa exatamente como o que a ferramenta Dividir da caixa de ferramentas Análise faz.

No entanto, requer uma licença do ArcInfo para ser executada, portanto não está disponível para a maioria dos usuários do ArcGIS Desktop, por isso gosto da resposta de Chad, que também funcionará para os usuários do ArcGIS 10 Desktop com licenças nos níveis ArcView e ArcEditor.

PolyGeo
fonte
-1

Você pode fazer isso da maneira que desejar, se executar outra ferramenta no modo em lote primeiro: Ferramentas de conversão> Para banco de dados geográfico> Classe de recurso em Classe de recurso. Isso permitirá que você use uma expressão para pegar sua camada de bacia hidrográfica e extrair cada bacia hidrográfica individualmente e salvá-la como sua própria classe de recursos; então, você terá 50 camadas individuais que podem ser usadas com a ferramenta Clipe no modo em lote.

Dan C
fonte
2
Agradeço a resposta, mas essa não parece ser uma solução muito eficiente. Prefiro não criar 50 arquivos separados para bacias hidrográficas e mais 50 arquivos cortados.
Radar
-1

A ferramenta Split no ArcGIS faz exatamente isso.

Mariana Oliveira
fonte