arcpy scripting error question

10-17-2018 12:09 PM
New Contributor

I am having some issues with creating a  script to count stairwells from a stair shapefile. I have two shapefiles one being stairs and another one being  stairwell.   I  was instructed to use this  code  and  make  a simple  script. i am not used to working with python so if you can help that would be much appreciated. code is pasted below.

def createInternalParallelLines():
# import libraries
import arcpy

# set input/output parameters
polyFC = arcpy.GetParameterAsText(0) # input polygons
outParallel = arcpy.GetParameterAsText(1) # output parallel lines
lineSpacing = arcpy.GetParameterAsText(2) # line spacing
buffDist = arcpy.GetParameterAsText(3) # inner buffer distance

# parse numbers from parameters
lineSpaceNum = float(lineSpacing.split(' ')[0])
buffNum = float(buffDist.split(' ')[0])

# establish spatial reference
desc = arcpy.Describe(polyFC)
SR = desc.spatialReference

# set overwrite environment
arcpy.env.overwriteOutput = True
arcpy.env.outputCoordinateSystem = SR

parallels = []
# create hull rectangle to establish a rotated area of interest
coordSplit = row[0].hullRectangle.split(' ')

# collect corner coordinates
coordList = arcpy.Array([arcpy.Point(coordSplit[0],coordSplit[1]),arcpy.Point(coordSplit[2],coordSplit[3]),arcpy.Point(coordSplit[4],coordSplit[5]),arcpy.Point(coordSplit[6],coordSplit[7]),arcpy.Point(coordSplit[0],coordSplit[1])])

# create lines from hull rectangle
currentLines = []
for pointNum in range(0,4):
hullRecLine = arcpy.Polyline(arcpy.A
# loop through each input shape
for row in arcpy.da.SearchCursor(polyFC, ["SHAPE@"], spatial_reference=SR):

# create inner buffer
polyBuff = row[0].buffer(buffNum * -1)

# compare first and second line to determine if first line is short or long
firstLong = 0
if currentLines[0].length < currentLines[1].length:
firstLong = 1

# calculate number of points needed along short axis
numPoints = int(math.floor(currentLines[firstLong].length/lineSpaceNum))

# create and join points to create parallel lines
for point in range(1,numPoints+1):
shortPoint1 = currentLines[firstLong].positionAlongLine(lineSpaceNum*point)
shortPoint2 = currentLines[firstLong + 2].positionAlongLine(currentLines[firstLong + 2].length - (lineSpaceNum*point))
parallel = arcpy.Polyline(arcpy.Array([shortPoint1.centroid,shortPoint2.centroid]), SR)

# intersect parallel lines with buffer
parallelBuff = parallel.intersect(polyBuff,2)

# write geometries to disk
arcpy.CopyFeatures_management(parallels, outParallel)

# add to map
mxd = arcpy.mapping.MapDocument("CURRENT")
dataFrame = arcpy.mapping.ListDataFrames(mxd, "*")[0]
addLayer = arcpy.mapping.Layer(outParallel)
arcpy.mapping.AddLayer(dataFrame, addLayer)

del row

0 Kudos
5 Replies
MVP Esteemed Contributor

You should really use the syntax highlighter when posting code.  It makes it so much easier to read.  (Click on the three dots (expand tool bar); choose More; pull down to syntax highligher; select Python....

The first thing I see is your lack of indentation for your def().  Everything inside the def() needs to be indented:

def myFunction():
  list commands
  in desired order
  and indent accordingly

other commands outside the
def() don't get indented‍‍‍‍‍‍‍‍‍‍‍‍‍‍

Edited moments later:  I just copied your code into SPyder and there are tons of problems with it aside from def(): indentation.  I see missing closing parenthesis, extra parenthesis,   ill structured for loopsetc etc...

can't wait to retire....
MVP Esteemed Contributor

/blogs/dan_patterson/2016/08/14/script-formatting  to get you going on the format issues.

The error message if any and details of the inputs would help (ie location and types of inputs)

MVP Esteemed Contributor

Having read your other thread for the same subject, you might want to take a look at: 

Learn Python - Free Interactive Python Tutorial 

Python For Beginners | 

To name a few....

can't wait to retire....
0 Kudos
MVP Esteemed Contributor
0 Kudos
MVP Esteemed Contributor

Yep... That's the 'other' thread...

can't wait to retire....
0 Kudos