[GIS] Calculating X and Y of line start and line end using ArcPy

arcgis-10.1arcgis-desktoparcpyfield-calculatorline

I have a series of polyline shapefiles and I am trying to automate the process of calculating the X and Y coordinates of the line start and line end using Python.

I have added the 4 fields (startx, starty, endx, endy) in Python with the following code:

Arcpy.addfield_management ("Polyline","startx","DOUBLE")

I can perform this task by right-clicking the attribute and calculating geometry, but I want to automate this process for about 30 polylines.

I have the following code I've found that might be able to perform the desired task with some modification:

xExpression = "float(!SHAPE.CENTROID!.split()[0])"
yExpression = "float(!SHAPE.CENTROID!.split()[1])"

arcpy.CalculateField_management("Polyline", "startx", xExpression, "PYTHON")
arcpy.CalculateField_management("Polyline", "starty", yExpression, "PYTHON")

This code only calculates the coordinate at the centre of the shape I believe. Are their any expressions I can add to this code to calculate the X and Y coordinates of the start and end points of the polyline?

I am using ArcGIS 10.1 with ArcInfo license.

Best Answer

I agree with Barbarossa that accessing the power of the da module would be beneficial. Here is very clean scripting approach:

import arcpy

fc = r'C:\Users\OWNER\Documents\ArcGIS\Default.gdb\samplePolyline'

fields = ['x1','x2','y1','y2']

# Add fields to your FC
for field in fields:
    arcpy.AddField_management(fc,str(field),"DOUBLE")

with arcpy.da.UpdateCursor(fc, ('x1','x2','y1','y2', "SHAPE@")) as cursor:
    for row in cursor:
        row[0] = row[4].firstPoint.X
        row[1] = row[4].lastPoint.X
        row[2] = row[4].firstPoint.Y
        row[3] = row[4].lastPoint.Y
        cursor.updateRow(row)