Monday, 4 July 2016

arcgis 10.0 - Calculate polygon area inside extent


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.





No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...