Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

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.

share|improve this question
    
I would start here with ESRI's discussion of arcpy Point object; code snipped at end of page is very much what you want esri help –  spatialfrog Feb 28 at 13:44
    
Are these simple polyline features or complicated, braching features? –  Aaron Feb 28 at 13:54
    
All polyline features are simple lines with one start and one end, no branching involved. –  JC11 Feb 28 at 14:12

3 Answers 3

up vote 5 down vote accepted

The field calcuation expression to do this is:

Start of line:

"!Shape!.positionAlongLine(0.0,True).firstPoint.X"
"!Shape!.positionAlongLine(0.0,True).firstPoint.Y"

End of line:

"!Shape!.positionAlongLine(1.0,True).firstPoint.X"
"!Shape!.positionAlongLine(1.0,True).firstPoint.Y"
share|improve this answer
    
I'm having problems with ArcGIS10 and this expression: "Error:The row contains a bad value." I'm trying to do it in a Polyline shapefile. Any suggestion? –  juasmilla Jun 2 at 15:44
    
@juasmilla - hopefully you already found a solution, but for other 10.0 users, you can use: "!shape.firstPoint.X!" –  Cyrus Jun 12 at 4:32
    
Just wish to point out that starting at ArcGIS 10.2, this can easily been done using the LINE_START_MID_END geometry properties in the Add Geometry Attributes tool. This tool is available for all license level. –  ericchiasson Jun 30 at 15:39

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)
share|improve this answer

I would loop through each polyline with arcpy.da.SearchCursor, reading the "SHAPE@" field. Then read the firstPoint and lastPoint from the polyline geometry.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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