Multipart to Singlepart (Data Management)

Separates (explodes) multipart features into separate singlepart features.


Illustration

Multipart to Singlepart illustration

Usage tips

Syntax

MultipartToSinglepart_management (in_features, out_feature_class)
Parameter Explanation Datatype
Input Features (Required)

Each of the input feature's part(s) will be copied as individual features in the output feature class. If the input feature class is multipoint, the output feature class will contain points.

Feature Layer
Output Feature Class (Required)

The feature class that will contain the results.

Feature Class
Data types for geoprocessing tool parameters

Script Example

# Purpose: Break all multipart features into singlepart features, and generate a report of which features were separated.

# Create the geoprocessor
import arcgisscripting
gp = arcgisscripting.create()

# Create variables for the input and output feature classes
inFeatureClass = "c:/gdb.mdb/vegetation"
outFeatureClass = "c:/gdb.mdb/vegetation_singlepart"

# Use error trapping in case a problem occurs when running the tool
try:
    # Add a field to the input (if not already present), this will be used as a unique identifier
    if not gp.ListFields(inFeatureClass,"tmpUID").Next():
        gp.AddField(inFeatureClass, "tmpUID","double")

    # Determine what the name of the Object ID is
    fields = gp.listfields(inFeatureClass, "","oid")  
    OidFieldName = fields.next().name

    # Calculate the tmpUID to the OID since this is a Personal GDB, wrap the Field inside []
    exp = "[" + OidFieldName + "]"
    gp.CalculateField(inFeatureClass, "tmpUID", exp)

    # Run the tool to create a new fc with only singlepart features
    gp.MultipartToSinglepart(inFeatureClass,outFeatureClass)

    # Check if there is a different number of features in the output than there was in the input
    if (gp.GetCount(inFeatureClass) == (gp.GetCount(outFeatureClass))):
        print "The number of features in the input is the same as in the output, so no multipart features were found"
    else:
        # If there is a difference, print out the FID of the input features which were multipart
        gp.Frequency(outFeatureClass, outFeatureClass + "_freq", "tmpUID")

        # Use a search cursor to go through the table, and print the tmpUID
        print "Below is a list of the FIDs of all the multipart features from " + inFeatureClass
        rows = gp.SearchCursor(outFeatureClass + "_freq", "[FREQUENCY] > 1")
        row = rows.next()
        while row:
            print int(row.tmpUID)
            row = rows.next()

except:
    # If an error occurred, print out the error message
    print "Error occurred"
    print gp.GetMessages()

See Also

  • Dissolve (Data Management)
  • Topology error fixes