Hi, I???ve tried to write a script to take a file of railway lines and find the towns within 2 kilometres of each railway line, sum the populations of those selected towns and return the result to a field in the railway lines file. I???ve been successful in getting bits of the script to work in isolation (copied from other???s scripts), but not as a whole. The script is below and I would really appreciate it if anyone can offer advice as to why it doesn???t work, or how it could be improved. I only have an ArcView license (9.3.1) with Python 2.5 and I'm very new to Python. Thank you, Ash
# Import system modules
import sys, string, os, arcgisscripting
# Create the Geoprocessor object
gp = arcgisscripting.create(9.3)
# Load required toolboxes.
gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")
# Script arguments...
inFC = r"c:\data\Towns.shp" # Input towns.
inFCSel = r"c:\data\railways.shp" # Input railways.
# Local variables...
tempLayer = "tempLayer" # the towns
tempLayer2 = "tempLayer2" # the Railways
counter = 0
try:
# Process: Make Feature Layer for input feature class (the towns).
gp.MakeFeatureLayer_management(inFC, tempLayer, "", "", "")
# Process: Make Feature Layer for Selecting features (the railways).
gp.MakeFeatureLayer_management(inFCSel, tempLayer2, "", "", "")
# Create a row and rows object to update the field (Railways).
rows = gp.UpdateCursor(tempLayer2)
row = rows.Next()
# Iteration to loop through the railways
while row:
query = "\"FID\" = " + str(counter)
# Process: Select the railway
gp.SelectLayerByAttribute_management(tempLayer2, "NEW_SELECTION", query)
# Process: Select towns within 2kms of the railway
tempLayer3 = gp.SelectLayerByLocation_management(tempLayer, "WITHIN_A_DISTANCE", tempLayer2, "2 Kilometers" , "NEW_SELECTION")
# Create row and rows object to sum the population (Towns).
rows2 = gp.SearchCursor(tempLayer3)
row2 = rows2.Next()
rsum = 0
# Iteration to loop through the selected towns
while row2:
rsum = rsum + row2.GetValue("Total_pop") # Sum the populations of the selected towns
row2 = rows2.Next()
row.SetValue("Pop_Sum",rsum)
rows.UpdateRow(row) # update the population field for the selected railway
counter = counter + 1
row = rows.Next()
gp.AddMessage("Processing done...")
# release locks...
del row
del rows
del row2
del rows2
del gp
except:
print "Error found.."
gp.AddMessage("Error found..")
print gp.getmessage(2)
del tempLayer
del tempLayer2
del tempLayer3
del gp
... View more