How To: Create a line based on origin and destination points with Python

Summary

Instructions provided demonstrate one method for creating a line feature between origin and destination point XY coordinates from a table using the Python scripting environment.

Procedure

This article contains a sample table and script that demonstrates one method for creating a line feature between an origin and destination point XY coordinates from a table.

• The script creates a feature class, defines the coordinate system and then uses the information provided in the table to populate the feature class with the line geometries in ArcGIS 9.2 or higher release:

`Code:import sys, string, os, arcgisscriptinggp = arcgisscripting.create()gp.Overwriteoutput = 1#Specify the location for the new shapefile.gp.CreateFeatureclass("C:/temp/", "test_line.shp", "POLYLINE")#Define Coordinate Systemgp.workspace = "C:/temp/"gp.toolbox = "management"coordsys = "Coordinate Systems/Geographic Coordinate Systems/North America/North American Datum 1983.prj"gp.defineprojection("test_line.shp", coordsys)#Open a cursor to insert rows into the shapefile.cur = gp.InsertCursor("C:/temp/test_line.shp")#Create an Array and Point object.lineArray = gp.CreateObject("Array")pnt = gp.CreateObject("Point")#Open a cursor on the table of XY coordinates to read from. rows = gp.SearchCursor("c:/pythonTest.dbf")#Reset the cursor to the top.row = rows.Next()#Loop through each record in the XY table..while row:    #Set the X and Y coordinates for origin vertex.    pnt.x = row.GetValue("Origin_x")    pnt.y = row.GetValue("Origin_y")        #Insert it into the line array        lineArray.add(pnt)        #Set the X and Y coordinates for destination vertex    pnt.x = row.GetValue("dest_x")    pnt.y = row.GetValue("dest_y")    #Insert it into the line array    lineArray.add(pnt)        #Go to next row in table.        row = rows.Next()    #Insert the new poly into the feature class.    feat = cur.NewRow()    feat.shape = lineArray    cur.InsertRow(feat)    lineArray.RemoveAll()    del cur, row, rows`

• The formatting of the source table should include X and Y data for both the origin and destination points.

• The script can be expanded to process the output feature class in various ways. A few examples are adding fields and calculate values, appending the new values to an existing feature class, or adding features to an existing topology.
• The sample code is slightly different for versions of ArcGIS prior to version 9.2:

`Code:import sys, string, os, win32com.clientgp = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")gp.Overwriteoutput = 1#Specify the location for the new shapefile.gp.CreateFeatureclass("C:/temp/", "test_line.shp", "POLYLINE")#Define Coordinate Systemgp.workspace = "C:/temp/"gp.toolbox = "management"coordsys = "Coordinate Systems/Geographic Coordinate Systems/North America/North American Datum 1983.prj"gp.defineprojection("test_line.shp", coordsys)#Open a cursor to insert rows into the shapefile.cur = gp.InsertCursor("C:/temp/test_line.shp")#Create an Array and Point object.lineArray = gp.CreateObject("Array")pnt = gp.CreateObject("Point")#Open a cursor on the table of XY coordinates to read from. rows = gp.SearchCursor("c:/pythonTest.dbf") #Reset the cursor to the top.row = rows.Next()#Loop through each record in the XY table..while row:    #Set the X and Y coordinates for origin vertex.    pnt.x = row.GetValue("Origin_x")    pnt.y = row.GetValue("Origin_y")        #Insert it into the line array        lineArray.add(pnt)        #Set the X and Y coordinates for destination vertex    pnt.x = row.GetValue("dest_x")    pnt.y = row.GetValue("dest_y")    #Insert it into the line array    lineArray.add(pnt)        #Go to next row in table.        row = rows.Next()    #Insert the new poly into the feature class.    feat = cur.NewRow()    feat.shape = lineArray    cur.InsertRow(feat)    lineArray.RemoveAll()    del cur, row, rows`