Obcinanie wsadowe w ArcGIS Desktop przy użyciu ArcPy?

12

Znalazłem kilka podobnych pytań dotyczących starszych wersji ArcGIS, ale nie znalazłem odpowiedniej odpowiedzi dla ArcGIS 10.

Mam dwa wielokształtne kształty, które obejmują duży obszar (np. Całe państwo / prowincję). Pierwszy plik kształtu reprezentuje pokrycie terenu dla całego państwa, a drugi przedstawia 50 pojedynczych zlewisk. Chciałbym przyciąć plik kształtów pokrycia terenu na podstawie każdej zlewni (każda ma unikalną nazwę zapisaną w polu). Chciałbym następnie zapisać pliki wyjściowe przycięte (po jednym dla każdego z 50 działów wodnych) przy użyciu nazwy działu wodnego.

Biorąc pod uwagę, że należy wykonać 50 klipów, proces ten jest doskonałym kandydatem do przetwarzania wsadowego.

Radar
źródło
1
Co znalazłeś dla starszych wersji ArcGIS i co sprawia, że ​​nie nadają się do użytku z ArcGIS 10?
nmpeterson
2
@Radar Spójrz na to pytanie: gis.stackexchange.com/q/8104/1297 Obejmuje to, czego szukasz. Jeśli potrzebujesz pomocy modyfikującej Twoje potrzeby, daj mi znać. Oflagowałem to jako możliwy duplikat.
SaultDon
@SaultDon: Czy mówisz, że rozwiązanie (rozwiązania) na gis.stackexchange.com/q/8104/1297 na pewno będzie działać również w ArcGIS 10?
whuber
@SaultDon - Wprowadzono pewne zmiany w kursorach w ArcGIS 10, które powodują, że ta konkretna odpowiedź jest nieaktualna. Mam nadzieję znaleźć najlepsze rozwiązanie dla Arc10, a nie tylko zhakowaną wersję skryptu 9.3.
Radar
@ whuber Nie jest tak, jak jest, wymaga zmian, które mogą nie być oczywiste. Radar - Masz rację, są prostsze =)
SaultDon,

Odpowiedzi:

17

Poniższy skrypt przycina zlewiska wielokątów do granic hrabstwa wielokątów, nazywając każdą z cech wyjściowych klasę taką jak nazwa HspWBD_HU12_county. Przetestowane i działa. Upewnij się, że twoje wartości w polu NAZWA nie zawierają znaków specjalnych ani spacji (proste metody ciągu znaków w Pythonie mogą to dla Ciebie wyczyścić).

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
źródło
Absolutnie doskonały choć klasyczny kursor !!
SIslam
8

Gdy korzystasz z ArcGIS 10, do wykonania tego zadania użyłbym narzędzia do budowania modeli z wbudowanym narzędziem: Wybór funkcji iteracji. Zobacz pseudomodel na zdjęciu. wcale nie musi znać pisania w Pythonie. pseudo model

VietThanh Le
źródło
Aby uzyskać głębsze wyjaśnienie tego podejścia, zobacz Łatwe przycinanie całego obszaru roboczego dla określonego obszaru badań oraz powiązany pakiet narzędzi geoprzetwarzania Clip Workspace . Zbadano również tutaj na stosie: gis.stackexchange.com/questions/84989/…
matt wilkie
2

To brzmi dokładnie tak samo jak narzędzie Podziel z przybornika Analiza .

Jednak wymaga uruchomienia licencji ArcInfo, więc nie jest dostępna dla większości użytkowników ArcGIS Desktop, więc podoba mi się odpowiedź Chada, która będzie działać dla użytkowników ArcGIS 10 Desktop z licencjami ArcView i ArcEditor.

PolyGeo
źródło
-1

Możesz to zrobić tak, jak chcesz, jeśli najpierw uruchomisz inne narzędzie w trybie wsadowym: Narzędzia konwersji> Do geobazy> Klasa elementów na Klasa elementów. Dzięki temu możesz użyć wyrażenia, aby wziąć warstwę zlewu i wyciągnąć każdą zlewnię indywidualnie i zapisać ją jako własną klasę obiektów, a następnie będziesz mieć 50 osobnych warstw, których możesz używać z narzędziem Klip w trybie wsadowym.

Dan C.
źródło
2
Doceniam odpowiedź, ale nie wydaje się to bardzo skutecznym rozwiązaniem. Wolałbym nie tworzyć 50 osobnych plików działów wodnych, a następnie 50 innych plików obciętych.
Radar
-1

Podział narzędzie w ArcGIS robi dokładnie to.

Mariana Oliveira
źródło