1

I have a polyline feature dataset with Z coordinates. I'd like to change the Z values (e.g.) by adding 10 meters.

I am trying the following code, but no changes happen. It seems the code is able to enter each part of each polyline and print the Z values plus 10, but I don't know what I have to do to update the Z coordinates.

Here is the code:

import arcpy

gdb = r'C:\Umberto\network_analyst\umbeNETWORK\OfficeBuilding.gdb'
feature = gdb + r'\Transportation\FloorLines'
fields = ["Floor_Number", "SHAPE@"]

# start edit session
edit = arcpy.da.Editor(gdb)
edit.startEditing()
edit.startOperation()

# Create field name with the proper delimiters
#
whereclause = """%s = 3""" % arcpy.AddFieldDelimiters(feature, fields[0])

with arcpy.da.UpdateCursor(feature,fields, whereclause) as cursor:
    for row in cursor:
        polyline = row[1]
        for part in polyline:
            for pnt in part:
                pnt.Z = pnt.Z + 10
                print pnt.Z
        cursor.updateRow(row)

# stop esit session
edit.stopOperation()
edit.stopEditing(True)
2

1 Answer 1

0

Using the explode_to_points=True argument into updateCursor as suggested in this link did the work. Thanks to @klewis for the comment.

However, because the updateCursor in my case works with two fields, I had to specify two arguments in the final updateRow call, as row[0] refers to the filed Floor_Number, while row[1] is the Z coordinate I need to change.

The working code is:

import arcpy

gdb = r'\path\to\my.gdb'
feature = gdb + r'\my_polyline'
fields = ["Floor_Number", "SHAPE@Z"]

# start edit session
edit = arcpy.da.Editor(gdb)
edit.startEditing()
edit.startOperation()

# Create field name with the proper delimiters
#
whereclause = """%s = 3""" % arcpy.AddFieldDelimiters(feature, fields[0])

# this is the increment of the Z coordinate (in meters, change as you need)
z_increase = -200

with arcpy.da.UpdateCursor(feature,fields, whereclause, explode_to_points=True) as cursor:
    for row in cursor:
        print row[1]
        cursor.updateRow([row[0], row[1] + z_increase])

# stop edit session
edit.stopOperation()
edit.stopEditing(True)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.