Я хочу продублировать класс объектов полигонов и сместить все полигоны примерно на 10 футов в направлениях x и y. Я спросил, есть ли какой-нибудь способ сделать это на прошлой неделе, и мне сообщили, что мне, скорее всего, нужно будет сделать свой собственный скрипт на python, используя arcpy. Я сделал свой собственный скрипт с использованием arcpy, но он не работает:
import arcpy
from arcpy import env
import os
env.overwriteOutput = True
# Get arguments:
# Input polygon feature class
# Output polygon feature class
#
inputFeatureClass = arcpy.GetParameterAsText(0)
outputFeatureClass = arcpy.GetParameterAsText(1)
xShift = arcpy.GetParameterAsText(2)
yShift = arcpy.GetParameterAsText(3)
shapeName = arcpy.Describe(inputFeatureClass).shapeFieldName
# Create the output feature class with the same fields and spatial reference as the input feature class
arcpy.CreateFeatureclass_management(os.path.dirname(outputFeatureClass), os.path.basename(outputFeatureClass), "POLYGON", inputFeatureClass, "", "", inputFeatureClass)
# Create a search cursor to iterate through each row of the input feature class
inrows = arcpy.SearchCursor(inputFeatureClass)
# Create an insert cursor to insert rows into the output feature class
outrows = arcpy.InsertCursor(outputFeatureClass)
# Create empty Point and Array objects
pntArray = arcpy.Array()
partArray = arcpy.Array()
# Loop through each row/feature
for row in inrows:
# Create the geometry object
feature = row.getValue(shapeName)
partnum = 0
# Count the total number of points in the current multipart feature
partcount = feature.partCount
while partnum < partcount:
part = feature.getPart(partnum)
pnt = part.next()
pntcount = 0
# Enter while loop for each vertex
#
while pnt:
pnt = part.next()
shiftedPoint = arcpy.Point()
try:
shiftedPoint.ID = pnt.ID
shiftedPoint.X = pnt.X + float(xShift)
shiftedPoint.Y = pnt.Y + float(yShift)
except AttributeError:
continue
#shiftedPoint = arcpy.Point(float(pnt.X) + float(xShift), float(pnt.Y) + float(yShift))
pntArray.add(shiftedPoint)
pntcount += 1
# If pnt is null, either the part is finished or there is an
# interior ring
#
if not pnt:
pnt = part.next()
if pnt:
arcpy.AddMessage("Interior Ring:")
# Create a polygon using the array of points
polygon = arcpy.Polygon(pntArray)
# Empty the array for the next run through the loop
pntArray.removeAll()
# Add the polygons (or 'parts') to an array. This is necessary for multipart features, or those with holes cut in them
partArray.add(polygon)
arcpy.AddMessage("Added a polygon to the partArray!")
partnum += 1
# Create a new row object that will be inserted into the ouput feature class. Set newRow = row so that it has the same attributes
# Set newRow.shape = partArray so that the only thing different about this new feature is that its geometry is different (shifted)
newRow = row
newRow.shape = partArray
outrows.insertRow(newRow)
# Empy the array for the next run through the loop
partArray.removeAll()
del inrows, outrows
Я продолжаю получать эту ошибку в строке 70
<type 'exceptions.ValueError'>: Array: Add input not point nor array object
Я не могу понять, почему это дает мне эту ошибку, так как я определил входные данные как массив.
Кто-нибудь знает, почему я получаю эту ошибку?
источник