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):
If we imagine splitting that layer into a grid:
Looking exclusively at one cell of the grid:
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).
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:
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.
- Create a fishnet of the desired cell size and extent (to handle multiple grid cells at a time)
- Union the fishnet with the polygon feature class
- Calculate the area of all resultant features
- 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)
- Sum the area of all features in the cell
- Compute the percentage for each feature based on the calculated sum from 5.