ArcMap Python Код, который зацикливает клип (управление данными), приводит к сбою ArcMap - PullRequest
0 голосов
/ 17 апреля 2020

Я написал код для обрезки растра, используя кучу шейп-файлов. Все это работает до функции клипа, после чего он вылетает ArcMap на рабочий стол без сообщения об ошибке. Мой код выглядит следующим образом:

import arcpy

# File path to Folder with the Shapefiles
WSin = arcpy.GetParameterAsText(0)

# File path to Folder where the clipped rasters will go
WSrast = arcpy.GetParameterAsText(1)

# File path to Folder where the raster to be clipped is
InRast = arcpy.GetParameterAsText(2)

# Set workspace to WSin
arcpy.env.workspace = WSin

# Create a list of the shapefiles with full file paths
Polys = arcpy.ListFeatureClasses()
Polys = [WSin + "\\" + sub for sub in Polys]

# Set workspace to WSrast
arcpy.env.workspace = WSrast

# Allow Overwriting
arcpy.env.overwriteOutput = True

# Clip Loop
for i in Polys:

    # Strip the shapefile names so they can be used as rasters
    desc = arcpy.Describe(i)
    name = str(desc.name)[:8]
    seper1 = "."
    name = name.split(seper1,1)[0]
    seper2 = "_"
    name = name.split(seper2,1)[0]
    rastname = str(WSrast) + "\\" + str(name) + "_Rast"

    # The problem child
    arcpy.Clip_management(InRast, i, rastname)

Я, к сожалению, не могу поделиться своими точными данными, поскольку они конфиденциальны, но я полагаю, что вы должны здесь что-то выяснить. Я предполагаю, что это нечто простое, чего я просто не вижу. любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Возможная проблема: ArcMap arcpy.Clip_management ожидает конверт (который фактически является строкой) в качестве второго параметра, а не пути шейп-файла или физической формы).

https://desktop.arcgis.com/en/arcmap/10.3/tools/data-management-toolbox/clip.htm

Итак, ваша строка arcpy.Clip_management должна выглядеть следующим образом:

 arcpy.Clip_management(InRast, "0 10 20 30", rastname)

, где 0 - xmin, 10 - ymin, 20 - это xmax, а 30 - это ymax. Теперь другой вопрос: как вы хотите получить значения огибающей? Шейп-файлы содержат только одну форму внутри? Или вы хотите получить область, полученную в результате получения экстента всех фигур внутри шейп-файла? Это требует дополнительного кодирования, возможно, с использованием геометрии:

https://desktop.arcgis.com/en/arcmap/10.3/analyze/arcpy-classes/extent.htm https://desktop.arcgis.com/en/arcmap/10.3/analyze/arcpy-classes/geometry.htm

0 голосов
/ 18 апреля 2020

Спасибо, Шим. Я понял. Я использовал неправильные данные, как вы сказали. Я изменил свой код, и теперь он выглядит следующим образом (я только что изменил для l oop part):

for i in Polys:
    desc = arcpy.Describe(i)
    ext = desc.extent
    name = str(desc.name)[:8]
    seper1 = "."
    name = name.split(seper1,1)[0]
    seper2 = "_"
    name = name.split(seper2,1)[0]
    rastname = str(WSrast) + "\\" + str(name) + "_Rast"
    arcpy.Clip_management(InRast, str(ext), rastname,i,"#","ClippingGeometry")

Работает как шарм. Спасибо!

...