Computing dominant area in polygon using ArcGIS Desktop?

INPUT:

enter image description here

After dissolving zones use following WORKFLOW:

arcpy.Intersect_analysis("GRID #;ZONE #","D:/Scratch.gdb/intersect")
arcpy.Sort_management("intersect", "D:/Scratch.gdb/sorted","Shape_Area DESCENDING")
# DELETE MINORITIES USING GRID ID 
arcpy.DeleteIdentical_management("sorted", "ID")

OUTPUT SHOWS "SORTED" AND GRID:

enter image description here

Transfer dominant zone ID to grid layer from "sorted", using join by attributes, if necessary.

Important update a year later: each zone must be a single, potentially multipart polygon. If this is not a case original zones layer must be dissolved by zone name.


Ok I think I follow the question. I attempted this with a test data set. I'm using a geodatabase so that the area is calculated (recommended). If you must use a shapefile, calculate a field with geometry for the shape_area before you do step 2. I have a polygon layer named Poly and a fishnet grid named FNET. Poly has a field (MTYPE) and values of 1 (maroon), 2 (green), or 3 (purple) (colors from the 1st screenshot).

enter image description here

Step 1. Intersect the 2 layers. Intersect Operation

Now the output from that first step gives you FID fields for each layer (in mycase it is FID_FNET and FID_Poly).

Screenshot showing how FID for each is preserved (325 is the grid cell and it has one each of 1, 2, and 3 in it). Screenshot showing how FID for each is preserved

Step 2. SUMMARIZE (sorry the screenshot looks like "Statistics" but use Summarize.

Summarize (showing table)

Step 2 (continued). Do a Summarize on FID_FNET and set it up as in this next screenshot so you are getting a maximum on the Shape_Area field ...

Parameters for Summarize

Step 3. Do a join using the output of the intersect operation and the table (join the table to the intersect) and base the join on the shape_area from the intersect output and the "Max_shape_area" from the table.

The null values can be ignored (they are the ones that were NOT maximum) or deleted (better yet). and the result using the joined table is a list of FID_FNET records that also have an FID_POLY that matches the largest (MAX) value for each grid cell!

This last screenshot shows how I set up the join. JOIN