#Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) #Get a list of the featureclasses in the input folder source_fc = "H:/temp_D/testt" Entity = "H:/temp_D/test" outputfolder = "H:/temp_D" gp.Toolbox = "Data Management" # convert a featureclass to a layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", Entity, "GID", "KEEP_ALL") # convert a layer to a featureclass gp.CopyFeatures_management ("source_lyr", source_fc) gp.FeatureClassToShapefile_conversion(source_fc, outputfolder) # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
Solved! Go to Solution.
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##01 July 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Set the input workspace workingfolder= "H:/temp_D/test" gp.Workspace = workingfolder #Set the output workspace outputfolder= "H:/temp_D" outWorkspace= outputfolder source_fc = "H:/temp_D/testt/A_grid.shp" #Get a list of the featureclasses in the input folder fcs = gp.ListFeatureClasses() gp.Toolbox = "Data Management" # Make a FeatureClass layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # A counter to separate the first time through the loop from all other times counter = 0 # Loop through every item in the list that was just generated for fc in fcs: if counter == 0: # set up first Layer for AddJoin gp.AddJoin_management("source_lyr", "GID", fc, "GID", "KEEP_ALL") else: # set up second and following Layers for AddJoin gp.AddJoin_management("source_lyr", "A_grid.GID", fc, "GID", "KEEP_ALL") counter += 1 # convert a layer to a featureclass out_name = gp.Describe("source_lyr").name out_name = gp.ValidateTableName(out_name, outputfolder) out_shape = outputfolder + "/" + out_name + ".shp" gp.CopyFeatures_management ("source_lyr", out_shape) # delete Field (need to clean up with a lot more ID fields that the code you have below since now there are 50 GID values.) fieldList = gp.ListFields(out_shape) for field in fieldList: if field.name[1:4] == "ID_": gp.deletefield (out_shape, field.name) # Don't bother removing 50 joins, just kill the layer # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
System: Vista, ArcGIS 9.3
Hello,
I wrote a python code to AddJoin a grid shapefile (File A) to a bird range shapefile (File B).
They have a field in common (GID).
However, the error message is
ERROR 000732: Input Features: Dataset H:/temp_D/testt does not exist or is not supported
Failed to execute (MakeFeatureLayer).
Please kindly advise how to modify the code.
Thank you.
(The file location is
"H:/temp_D/testt/grid.shp"
"H:/temp_D/test/birdrange.shp")#Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) #Get a list of the featureclasses in the input folder source_fc = "H:/temp_D/testt" Entity = "H:/temp_D/test" outputfolder = "H:/temp_D" gp.Toolbox = "Data Management" # convert a featureclass to a layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", Entity, "GID", "KEEP_ALL") # convert a layer to a featureclass gp.CopyFeatures_management ("source_lyr", source_fc) gp.FeatureClassToShapefile_conversion(source_fc, outputfolder) # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()
It they match two or more bird ranges, a join won't handle that. In that case you would have to convert your grid and bird range shapefiles into two feature classes within a single File geodatabase, and then use the Make Query Table tool instead to deal with the one to many or many to many relationship. Or else consider using the Spatial Join tool instead with the One to Many option and a small negative tolerance or the One to One option and some merge rules to join up multiple bird range values into summary fields or list fields.
Right now you code only does one join, which will only join one grid to one bird range. So what do you really intend to do here?
=> a quick response.
just as you said, I made a try of a grid to one bird range to see if the code is basically right.
The loop did not start yet.
By the way, for model builder, I copied the whole process of AddJoin for 10 times and ran it for 10 joins simultaneously.
Thank you always for the in-time and clear explanation.
################################################## ######################## ##AddJoin feature layers to a feature layer ##Elaine Kuo ##30 June 2013 ################################################## ####################### #Import standard library modules import arcgisscripting import os #Create the Geoprocessor object gp = arcgisscripting.create(9.3) gp.QualifiedFieldNames = "UNQUALIFIED" #Get a list of the featureclasses in the input folder source_fc = r"H:/temp_D/testt/A_grid.shp" Entity = r"H:/temp_D/test/geoc0283.shp" output_fc = r"H:/temp_D/test/grid_rng.shp" gp.Toolbox = "Data Management" # convert a featureclass to a layer gp.MakeFeatureLayer_management (source_fc, "source_lyr") # have Layers for AddJoin gp.AddJoin_management("source_lyr", "GID", Entity, "GID", "KEEP_ALL") # convert a layer to a featureclass gp.CopyFeatures_management ("source_lyr", output_fc) # delete Field gp.deletefield (output_fc, "FID_1; GID_1") # Remove the join gp.RemoveJoin("source_lyr", "geoc0283") # clear memory of layers gp.Delete("source_lyr") gp.AddMessage(gp.GetMessages()) print gp.GetMessages()