Saturday 30 March 2019

arcgis 10.1 - Using ArcPy FieldMappings for Spatial Join?


I'm trying to create a python script tool to use within ArcMap 10.1. I created a Model and exported it as a python script and added custom field mappings for the first Spatial Join by reading through others' example scripts, however, the resulting fields when the script is run don't join using the "; " delimiter, and the output fields are the same as the input. I currently run the script as a python tool in ArcMap 10.1.


I'm stumped at this point even after reading all articles from ESRI on the FieldMappings object and its methods. The script is as follows if anyone would like to take a look:


import arcpy

# Script arguments

Waterbodies_UTM13_20130228 = arcpy.GetParameterAsText(0)

MT_ESA_20131023 = arcpy.GetParameterAsText(1)

wbdhu8_a_mt = arcpy.GetParameterAsText(2)

Montana_Soils__2_ = arcpy.GetParameterAsText(3)

WB_HUC_Intersect_ESA_UTM13_M1 = arcpy.GetParameterAsText(4)



# Local variables:
Waterbodies_UTM13_20130228__2_ = Waterbodies_UTM13_20130228
Waterbodies_or_Wetlands_on_ESA = Waterbodies_UTM13_20130228__2_
WL_WB_Joined_with_HUC_Basins_Data = Waterbodies_or_Wetlands_on_ESA
Biological_ESA_MT_Intersect = WL_WB_Joined_with_HUC_Basins_Data
Biological_ESA_MT_Intersect_ = Biological_ESA_MT_Intersect


# Process: Select Layer By Attribute: Selects all USACE = "Yes" features

arcpy.SelectLayerByAttribute_management(Waterbodies_UTM13_20130228, "NEW_SELECTION", "\"USACE\" = 'Yes'")

# Process: Select Layer By Location: Selects all features from the USACE = "Yes" features that intersect the ESA
arcpy.SelectLayerByLocation_management(Waterbodies_UTM13_20130228__2_, "INTERSECT", MT_ESA_20131023, "", "SUBSET_SELECTION")


# FieldMappings for Spatial Join process: Create a new "fieldmappings" and add the join features' attribute table
fieldmappings = arcpy.FieldMappings()
fieldmappings.addTable(Waterbodies_UTM13_20130228)
fieldmappings.addTable(wbdhu8_a_mt)


# FieldMappings for Spatial Join process: Get the fields maps for the fields: REGION, SUBREGION, BASIN, and SUBBASIN
RegionFieldIndex = fieldmappings.findFieldMapIndex("REGION")
fieldmap1 = fieldmappings.getFieldMap(RegionFieldIndex)

SubRegionFieldIndex = fieldmappings.findFieldMapIndex("SUBREGION")
fieldmap2 = fieldmappings.getFieldMap(SubRegionFieldIndex)

BasinFieldIndex = fieldmappings.findFieldMapIndex("BASIN")
fieldmap3 = fieldmappings.getFieldMap(BasinFieldIndex)


SubBasinFieldIndex = fieldmappings.findFieldMapIndex("SUBBASIN")
fieldmap4 = fieldmappings.getFieldMap(SubBasinFieldIndex)

# FieldMappings for Spatial Join process: Set output fields and allowed field length to max (255)
field1 = fieldmap1.outputField
field2 = fieldmap2.outputField
field3 = fieldmap3.outputField
field4 = fieldmap4.outputField


field1.length = "255"
field2.length = "255"
field3.length = "255"
field4.length = "255"

fieldmap1.outputField = field1
fieldmap2.outputField = field2
fieldmap3.outputField = field3
fieldmap4.outputField = field4


# FieldMappings for Spatial Join process: Set the merge rule to join using the "; " delimiter and replace the old fieldmaps for each of the fields in the mappings object with updated one
fieldmap1.mergeRule = "Join"
fieldmap1.joinDelimiter = "; "
fieldmappings.replaceFieldMap(RegionFieldIndex, fieldmap1)

fieldmap2.mergeRule = "Join"
fieldmap2.joinDelimiter = "; "
fieldmappings.replaceFieldMap(SubRegionFieldIndex, fieldmap2)

fieldmap3.mergeRule = "Join"

fieldmap3.joinDelimiter = "; "
fieldmappings.replaceFieldMap(BasinFieldIndex, fieldmap3)

fieldmap4.mergeRule = "Join"
fieldmap4.joinDelimiter = "; "
fieldmappings.replaceFieldMap(SubBasinFieldIndex, fieldmap4)


# Process: Spatial Join: Spatially joins the HUC Basins data to the target WL or WB features (attributes are not "joined"; if a WB or WL falls on more than one basin,
# fieldmappings will concatenate attributes from select fields using "; " as a delimiter

arcpy.SpatialJoin_analysis(Waterbodies_or_Wetlands_on_ESA, wbdhu8_a_mt, WL_WB_Joined_with_HUC_Basins_Data, "JOIN_ONE_TO_ONE", "KEEP_ALL", fieldmappings, "INTERSECT")

# Process: Intersect: Intersects the temp output file from Spatial Join containing the joined WB or WL with the ESA, to create WL or WB pieces within the ESA
arcpy.Intersect_analysis([WL_WB_Joined_with_HUC_Basins_Data, MT_ESA_20131023], Biological_ESA_MT_Intersect, "ALL", "", "INPUT")

# Process: Multipart To Singlepart: Explodes all WL or WB pieces into singlepart features
arcpy.MultipartToSinglepart_management(Biological_ESA_MT_Intersect, Biological_ESA_MT_Intersect_)

# Process: Spatial Join (2): Spatially joins the exploded WL or WB features containing the HUC basins data with the Soils Data; attributes ARE "joined" and
# use "; " to deliminate all attributes from features that intersect the WL or WB features

arcpy.SpatialJoin_analysis(Biological_ESA_MT_Intersect_, Montana_Soils__2_, WB_HUC_Intersect_ESA_UTM13_M1, "JOIN_ONE_TO_ONE", "KEEP_ALL", "", "INTERSECT", "", "")

Screenshot of the error window in ArcMap: error message


Line 95:


arcpy.SpatialJoin_analysis(Waterbodies_or_Wetlands_on_ESA, wbdhu8_a_mt, WL_WB_Joined_with_HUC_Basins_Data, "JOIN_ONE_TO_ONE", "KEEP_ALL", fieldmappings, "INTERSECT")


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...