Search code examples
pythonarcmap

Trouble with creaing custom tool in Arcmap


I am trying to create my own tool to use in ArcMap but keep running into a problem. I want to create a buffer (which I can do) and then clip the points that fall within the buffer. The problem I run into is that I cannot figure out how to use the buffer as the input feature for the clip section of my tool.

import arcpy
import os

from arcpyimmport env
env.workspace = "C:/LabData"
arcpy.env.overwriteOutput = True

In_lake = arcpy.GetParameterAsText(0)
Out_Buff = arcpy.GetParameterAsText(1)
Buffer_Distance = arcpy.GetParameterAstext(2)
in_cities = arcpy.GetParameterAsText(3)
cliped_cities = GetParameterAsText(4)
New_Table = arcpy.GetParameterAsText(5)
Join_Input = arcpy.GetParameteAsText(6)


# step 1 create a buffer around the lakes
arcpy.Buffer_analysis(In_Lake, Out_Buff, Buffer_Distance)

# Step 2 Clip all cities that fall within the buffer
arcpy.Clip_analysis( in_cities,out_Buff, clipped_cities)

# Step 3
arcpy.Statistics_analysis(clipped_cities, New_Table, statistics_fields,\
                      'Population SUM', 'CNTRY_NAME')

# Step 5
arcpy.AddField_management (New_Table, 'Country', 'TEXT')

[Here is a picture of my tool in ArcMap]1


Solution

  • Check carefully that your variable names match -- Python and ArcPy are case sensitive.

    In_Lake = arcpy.GetParameterAsText(0)  ## was In_lake
    Out_Buff = arcpy.GetParameterAsText(1)
    Buffer_Distance = arcpy.GetParameterAstext(2)
    in_cities = arcpy.GetParameterAsText(3)
    clipped_cities = GetParameterAsText(4)  ## was cliped_cities
    New_Table = arcpy.GetParameterAsText(5)
    Join_Input = arcpy.GetParameteAsText(6)
    
    # step 1 create a buffer around the lakes
    arcpy.Buffer_analysis(In_Lake, Out_Buff, Buffer_Distance)
    
    # Step 2 Clip all cities that fall within the buffer
    arcpy.Clip_analysis(in_cities, Out_Buff, clipped_cities) ## was out_Buff
    

    Unless you want to keep the lake buffer, it doesn't necessarily need to be an input parameter specified by the user. Consider instead using the in_memory workspace -- just be aware any data in it will be deleted once the tool execution is completed.

    Out_Buff = r'in_memory\lakeBuffer'
    

    A similar strategy can be used for any intermediate feature class or table that you don't really care about. However, it's sometimes useful to have those intermediate results around to verify that your tool is doing what you expect at every step.