Ritaglio batch in ArcGIS Desktop utilizzando ArcPy?


12

Ho riscontrato alcune domande simili per le versioni precedenti di ArcGIS, ma non ho trovato una risposta adatta per ArcGIS 10.

Ho due shapefile poligonali che coprono una vasta area (ad esempio un intero stato / provincia). Il primo shapefile rappresenta la copertura del suolo per l'intero Stato e il secondo rappresenta 50 singoli bacini idrografici. Vorrei tagliare lo shapefile della copertura del suolo in base a ogni spartiacque (ognuno ha un nome univoco memorizzato in un campo). Vorrei quindi salvare i file ritagliati in uscita (uno per ciascuno dei 50 bacini idrografici) usando il nome dello spartiacque.

Dato che ci sono 50 clip da eseguire, questo processo è un ottimo candidato per l'elaborazione batch.


1
Cosa hai trovato per le versioni precedenti di ArcGIS e cosa non le rende idonee all'uso con ArcGIS 10?
nmpeterson

2
@Radar Dai un'occhiata a questa domanda: gis.stackexchange.com/q/8104/1297 Copre ciò che stai cercando. Se hai bisogno di aiuto per modificare le tue esigenze, fammi sapere. L'ho contrassegnato come possibile duplicato.
Sault,

@SaultDon: Stai dicendo che le soluzioni su gis.stackexchange.com/q/8104/1297 funzioneranno sicuramente anche in ArcGIS 10?
whuber

@SaultDon - Sono state apportate alcune modifiche ai cursori in ArcGIS 10 che rendono obsoleta quella particolare risposta. Spero di trovare la migliore soluzione per Arc10 e non solo una versione compromessa di uno script 9.3.
Radar

@whuber Non com'è, ha bisogno di cambiamenti che potrebbero non essere ovvi. Radar - Hai ragione, sono più semplici =)
SaultDon

Risposte:


17

Il seguente script aggancia gli spartiacque poligonali ai confini della contea poligonale, nominando ogni featureclass qualcosa come HspWBD_HU12_county name. Testato e funziona. Assicurati che i tuoi valori nel campo NAME non contengano caratteri o spazi speciali (i semplici metodi stringa Python possono ripulirlo per te).

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')), '')

Cursore di tipo assolutamente perfetto anche se classico !!
SIslam,

8

Mentre usi ArcGIS 10, userei modelbuilder con lo strumento integrato: Selezione funzionalità di iterazione per eseguire questa attività. Vedi lo pseudo-modello nella foto. non ha bisogno di conoscere scritping su Python. modello pseudo


Per una spiegazione più approfondita di questo approccio, vedere Clip facilmente un intero spazio di lavoro per un'area di studio specifica e il pacchetto di strumenti di geoprocessaggio dell'area di lavoro Clip associato . Anche qui esplorato nello stack: gis.stackexchange.com/questions/84989/…
matt wilkie,

2

Questo suona esattamente come fa lo strumento Dividi dalla casella degli strumenti Analisi .

Tuttavia, richiede l'esecuzione di una licenza ArcInfo, quindi non è disponibile per la maggior parte degli utenti di ArcGIS Desktop, quindi mi piace la risposta di Chad che funzionerà anche per gli utenti di ArcGIS 10 Desktop con licenze di livello ArcView e ArcEditor.


-1

Puoi farlo nel modo desiderato se esegui prima un altro strumento in modalità batch: Strumenti di conversione> In geodatabase> Classe di funzionalità in Classe di funzionalità. Ciò ti consentirà di utilizzare un'espressione per prendere il tuo livello spartiacque ed estrarre ogni spartiacque in modo individuale e salvarlo come propria classe di caratteristiche, quindi avrai 50 singoli livelli che puoi utilizzare con lo strumento Clip in modalità batch.


2
Apprezzo la risposta, ma questa non sembra essere una soluzione molto efficiente. Preferirei non creare 50 file spartiacque separati e quindi altri 50 file ritagliati.
Radar

-1

Lo strumento Dividi in ArcGIS fa esattamente questo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.