[GIS] Calculate polygon area inside extent

arcgis-10.0arcobjectsareacpolygon

We're using ArcMap 10.0 sp5, creating a tool in c# using the ArcObjects sdk.

Is there a built in function or simple set of steps that calculates the area of each feature of a polygon layer within a specific extent? What we want to do is calculate the area inside a set of bounds for each of the polygon layer’s features that reside within those bounds (defined by minimum and maximum X and Y). This process would be repeated multiple times, as we traverse a grid. Ideally, the function would also return the area not occupied by any features.

For example, consider this polygon layer in which there are 3 polygons (red, blue, and geen):
three polygons. one red, one green, and one blue

If we imagine splitting that layer into a grid:

same three polygons, with a gridded overlay

Looking exclusively at one cell of the grid:

grid with one cell highlighted, arrow indicating a second image which is a close-up view of the cell. The cell contains pieces from all the red and green polygons, as well as the entire blue polygon. There is space not occupied by any of the polygons. The polygons do not overlap.

We would like to get a measurement of the area that each feature occupies within that cell, along with a measurement of the “empty” area of the cell. The measurements could be in actual area (square feet, square meters, etc.) or merely a percentage of the area of the grid cell (as shown below).

close up of grid cell, showing percentages on each polygon piece and a percentage on the empty space. Red is 35 percent, green is 11 percent, blue is 10 percent, and the empty space is 44 percent

Note: these percents are for demonstration purposes only and are not necessarily to scale.

We'd also like to keep in mind the case of overlapping polygons. Consider this alternate polygon layer in which the blue polygon resides entirely within the red polygon:

close up of grid cell, this time with the blue polygon completely inside the piece of the red polygon. The image shows percentages on each polygon piece and a percentage on the empty space. Red is 35 percent, green is 11 percent, blue is 10 percent, but the empty space is now 54 percent

In this case, the sum of the area covered by each polygon would be greater than the area covered by the grid cell. As shown in the illustration above, red and blue both occupy the same percentage area as in the first example, but their areas are not distinct. In this case we would need to receive the values adding up to 110%, or a new set of percentages along the lines of:

  • Red = 31.8181818%
  • Green = 10%
  • Blue = 9.0909091%
  • Empty = 49.0909091%

We could either calculate the percentage as a fraction of the total polygon areas (including the "empty" polygon) or as a fraction of the grid cell area.

If a function exists that performs the calculations described above, we would need to know exactly what the result of that calculation gives us.

Our current thought is to follow the workflow below, but we wanted to see if anyone had better ideas.

  1. Create a fishnet of the desired cell size and extent (to handle multiple grid cells at a time)
  2. Union the fishnet with the polygon feature class
  3. Calculate the area of all resultant features
  4. Traverse the resultant features (by grid cell) to read the area of each unioned feature manually. (In this case, features without an FID from the original polygon layer would be the area not occupied by any features)
  5. Sum the area of all features in the cell
  6. Compute the percentage for each feature based on the calculated sum from 5.

Best Answer

I realize that this an answer to an older thread but if you've upgraded to 10.1, check out the Tabulate Intersections tool in the Analysis toolbox (ArcInfo level).

I don't think it handles empty spaces but in theory you could create a bounding box polygon, clip out your original data, merge the clip with your original data and assign the clip with dummy attribute(s) that are easily filtered.

Related Question