This is a crosspost from stackexchange
We're using ArcMap 10.0 sp5, creating a tool in C# using ArcObjects.
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 a polygon layer in which there are three polygons (A, B, and C) Split the layer into a grid and look exclusively at one cell of that grid. Say the cell contains pieces of each polygon as well as some empty space, and that 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.
So either: A takes up 35 percent of the area of the cell, B takes up 11 percent of the area of the cell, C takes up 10 percent of the area of the cell, and 44 percent of the area is empty
or: A's area is 35 sq. m, B's area is 11 sq. m, C's area is 10 sq. m, and 44 sq. m is empty
We'd also like to keep in mind the case of overlapping polygons. Suppose C resides entirely within A (at least within the bounds of the cell).
Our ideal solution would give us: A takes up 35 percent of the area of the cell, B takes up 11 percent of the area of the cell, C takes up 10 percent of the area of the cell, but 54 percent of the area is now empty
or: A's area is 35 sq. m, B's area is 11 sq. m, C's area is 10 sq. m, and now 54 sq. m is empty
In this case, the sum of the area covered by each polygon would be greater than the total area covered by the grid cell. A and C both occupy the same area as in the first example, but their areas are not distinct.
We would either need to receive the values adding up to 110% (or 110 sq. m), or receive new percentages along the lines of: A takes up 31.8181818 percent of the area of the cell, B takes up 10 percent of the area of the cell, C takes up 9.0909091 percent of the area of the cell, and 49.0909091 percent of the area is now empty
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.
We're using ArcMap 10.0 sp5, creating a tool in C# using ArcObjects.
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 a polygon layer in which there are three polygons (A, B, and C) Split the layer into a grid and look exclusively at one cell of that grid. Say the cell contains pieces of each polygon as well as some empty space, and that 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.
So either: A takes up 35 percent of the area of the cell, B takes up 11 percent of the area of the cell, C takes up 10 percent of the area of the cell, and 44 percent of the area is empty
or: A's area is 35 sq. m, B's area is 11 sq. m, C's area is 10 sq. m, and 44 sq. m is empty
We'd also like to keep in mind the case of overlapping polygons. Suppose C resides entirely within A (at least within the bounds of the cell).
Our ideal solution would give us: A takes up 35 percent of the area of the cell, B takes up 11 percent of the area of the cell, C takes up 10 percent of the area of the cell, but 54 percent of the area is now empty
or: A's area is 35 sq. m, B's area is 11 sq. m, C's area is 10 sq. m, and now 54 sq. m is empty
In this case, the sum of the area covered by each polygon would be greater than the total area covered by the grid cell. A and C both occupy the same area as in the first example, but their areas are not distinct.
We would either need to receive the values adding up to 110% (or 110 sq. m), or receive new percentages along the lines of: A takes up 31.8181818 percent of the area of the cell, B takes up 10 percent of the area of the cell, C takes up 9.0909091 percent of the area of the cell, and 49.0909091 percent of the area is now empty
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.