2016-01-20 5 views
0

У меня есть один шейп-файл, который охватывает весь город, и список шейп-файлов, которые являются буферами в разных местах города. Я хочу кликать город с каждым буфером. Я попытался использовать ArcPy в Python, но код не работает. Что я делаю не так?анализ клипа в дуге

import arcpy 
from arcpy import env 
from arcpy.sa import * 
env.workspace = "U:\Park and Residential Area\Test\SBA park_res_buffer_5\SBA.gdb" 
infeature= "U:\Park and Residential Area\Test\park_res_merge.shp" 
clipfeatture = arcpy.ListFeatureClasses("*", "polygon") 
for i in clipfeatture: 
    outclipfeatture = arcpy.Clip_analysis(infeature,i) 
    outclipfeatture.save("U:\Park and Residential Area\Test\SBA park_res_buffer_5/"*i) 
+0

Можете ли вы быть более конкретную информацию о том, как код не работает: как он выводит сообщение об ошибке, или делать что-то другое, чем то, что вы ожидаете? – Erica

+0

Также будьте осторожны со строками, содержащими дорожки; «\» является escape-символом в Python. Мой предпочтительный вариант состоит в том, чтобы сделать их необработанными строками следующим образом: myString = r "путь \ to \ data" – TomAdair

ответ

4

Это соответствующий синтаксис for using Clip in ArcPy:

arcpy.Clip_analysis(in_features, clip_features, out_feature_class)

поэтому ваш for цикл должен быть вместо этого что-то вроде:

for i in clipfeatture: 
    outfeature = "U:\Foo\Bar\" + i 
    arcpy.Clip_analysis(infeature, i, outfeature) 
1

Я хотел бы также print() каждый фи le, чтобы вы могли проверить, что его синтаксис используется соответствующим образом. Обратные косые черты являются escape-символами в Python и могут иметь специальные свойства, за которыми следуют ключевые буквы.

Я всегда помещал r перед любой строкой, содержащей путь к файлу, например. r"\\srvr\drv\proj\gdb.gdb\fc"; это говорит Python, что это сырая строка и игнорирует функции escape.

См. Приведенную ниже ссылку для развлекательной аналогии при обратном слежении в именах файлов.

https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/

-1

Вы также можете экспортировать инструмент выбора функции итерации от модели Builder, если каждое место является уникальным.

http://desktop.arcgis.com/en/arcmap/10.3/tools/modelbuilder-toolbox/iterate-feature-selection.htm

# Import arcpy module 
import arcpy 

# Load required toolboxes 
arcpy.ImportToolbox("Model Functions") 


# Local variables: 
Selected_Features = "" 
Value = "1" 

# Process: Iterate Feature Selection 
arcpy.IterateFeatureSelection_mb("inputfeature", "fields", "false") 
+0

Работает ли этот инструмент ModelBuilder в автономном скрипте Python? (Многие этого не делают, но у меня нет опыта с 'IterateFeatureSelection'.) – Erica

+0

Для простого процесса, такого как создание буферов для каждого отдельного буфера. Вы можете сохранить построитель моделей и перейти в файл> экспорт> экспорт в виде скрипта python, а затем привести его в модуль, который вы хотите использовать. Мой пример выше - это только инструмент выбора итераций функции - никаких дополнительных данных не добавлено. ArcGIS добавляет дополнительную информацию (например, локальные переменные), но если вы создадите модель данных, а затем экспортируете ее, и все переменные будут автоматически завершены в зависимости от того, что вы сделали в построителе моделей. – Smithw1

+0

Чтобы построить модель вы бы просто: Вставка> итераторы> Выбор компонентов для выбранных функций было бы ваши буферы для значений было бы ваше уникальное поле (работает поиск курсора) Затем приложите инструмент клипа. используйте выбранную функцию (текущий буфер) в качестве клипа и вашего города в качестве функции ввода. убедитесь, что имена вывода уникальны. % Значение% _Buffer будет печатать имя места с помощью _Buffer в конце, чтобы сделать его простым. – Smithw1