0

I would like to know how to simplify the following code in order to execute it more efficiently than copy paste 82 processes (with a loop I guess?) but I don't know how to do it.

There are 4 main processes : Select analysis, cost distance, cost path, and raster to polylines. The study region is Uganda and there are 82 points and therefore 82 (or 81) routes to be founded. In the future, I would like to execute this code for other countries as well with more points. Many thanks in advance for your help :-)!


# Import arcpy module
import arcpy
arcpy.env.workspace = "E:\HEC\strategicmap\strategicmap.gdb"
arcpy.env.overwriteOutput = True

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Set Geoprocessing environments
arcpy.env.scratchWorkspace = "E:\\HEC\\strategicmap\\scratch.gdb"
arcpy.env.snapRaster = ""
arcpy.env.extent = "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda"
arcpy.env.cellSize = "MAXOF"
arcpy.env.mask = ""

# Local variables:
WorldWGS84WM = "E:\\HEC\\strategicmap\\strategicmap.gdb\\WorldWGS84WM"
PRIOcAfricaWGS84 = "E:\\HEC\\strategicmap\\strategicmap.gdb\\PRIOcAfricaWGS84"
costsurface = "E:\\HEC\\strategicmap\\strategicmap.gdb\\costsurface"
Uganda = "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda"
outputcostdist = "E:\\HEC\\strategicmap\\strategicmap.gdb\\outputcostdist"
outputcostbacklink = "E:\\HEC\\strategicmap\\strategicmap.gdb\\outputcostbacklink"
PRIOUganda = "E:\\HEC\\strategicmap\\strategicmap.gdb\\PRIOUganda"
outputcostpath = "E:\\HEC\\strategicmap\\strategicmap.gdb\\outputcostpath"

#all files for Uganda (82 points)
route1= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route1"
route2= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route2"
route3= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route3"
route4= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route4"
route5= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route5"
route6= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route6"
route7= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route7"
route8= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route8"
route9= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route9"
route10= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route10"
route11= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route11"
route12= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route12"
route13= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route13"
route14= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route14"
route15= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route15"
route16= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route16"
route17= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route17"
route18= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route18"
route19= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route19"
route20= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route20"
##etc...until route82

Uganda1= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda1"
Uganda2= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda2"
Uganda3= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda3"
Uganda4= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda4"
Uganda5= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda5"
Uganda6= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda6"
Uganda7= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda7"
Uganda8= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda8"
Uganda9= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda9"
Uganda10= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda10"
Uganda11= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda11"
Uganda12= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda12"
Uganda13= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda13"
Uganda14= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda14"
Uganda15= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda15"
Uganda16= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda16"
Uganda17= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda17"
Uganda18= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda18"
Uganda19= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda19"
Uganda20= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda20"
##etc... until Uganda82

arcpy.Select_analysis(WorldWGS84WM, Uganda, "\"FIPS10_4\"='UG'")
arcpy.Clip_analysis(PRIOcAfricaWGS84, Uganda, PRIOUganda, "")

arcpy.Select_analysis(PRIOUganda,Uganda1, "\"OBJECTID\" =1")
arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath, "EACH_CELL", "OBJECTID")
arcpy.RasterToPolyline_conversion(outputcostpath,route1, "ZERO", "0", "SIMPLIFY", "VALUE")
arcpy.gp.CostDistance_sa(Uganda1, costsurface, outputcostdist, "", outputcostbacklink)
arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath,"EACH_CELL","OBJECTID")
arcpy.RasterToPolyline_conversion(outputcostpath,route1, "ZERO", "0", "SIMPLIFY", "VALUE")

arcpy.Select_analysis(PRIOUganda,Uganda2, "\"OBJECTID\" =2")
arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath, "EACH_CELL", "OBJECTID")
arcpy.RasterToPolyline_conversion(outputcostpath,route2, "ZERO", "0", "SIMPLIFY", "VALUE")
arcpy.gp.CostDistance_sa(Uganda2, costsurface, outputcostdist, "", outputcostbacklink)
arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath,"EACH_CELL","OBJECTID")
arcpy.RasterToPolyline_conversion(outputcostpath,route2, "ZERO", "0", "SIMPLIFY", "VALUE")

arcpy.Select_analysis(PRIOUganda,Uganda3, "\"OBJECTID\" =3")
arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath, "EACH_CELL", "OBJECTID")
arcpy.RasterToPolyline_conversion(outputcostpath,route3, "ZERO", "0", "SIMPLIFY", "VALUE")
arcpy.gp.CostDistance_sa(Uganda3, costsurface, outputcostdist, "", outputcostbacklink)
arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath,"EACH_CELL","OBJECTID")
arcpy.RasterToPolyline_conversion(outputcostpath,route3, "ZERO", "0", "SIMPLIFY", "VALUE")

##etc... until 82
3

A simple approach, using your existing data structure and setup, would be to just use a for loop.

...
for i in range(1,83): # i will have values from 1 to 82
    route= "E:\\HEC\\strategicmap\\strategicmap.gdb\\route{0}".format(i)
    Uganda= "E:\\HEC\\strategicmap\\strategicmap.gdb\\Uganda{0}".format(i)
    arcpy.Select_analysis(PRIOUganda,Uganda, "\"OBJECTID\" ={0}".format(i))
    arcpy.gp.CostPath_sa(PRIOUganda, outputcostdist, outputcostbacklink, outputcostpath, "EACH_CELL", "OBJECTID")
    arcpy.RasterToPolyline_conversion(outputcostpath,route, "ZERO", "0", "SIMPLIFY", "VALUE")

...

This assumes that all of the input files are present and are named appropriately. You could get more complex, such as allowing the workspace to be specified, or different workspaces for routes and points, but the concept should be the same in the end.

  • note that : 1) using MakeFeatureLayer is better than select because the data will remain in memory 2) you will probably need to rename outputcostpath in the loop "outputcostpath{0}".format(i) – radouxju Feb 3 '14 at 18:50

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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