# Calculating 3d polygons' surface area using ArcGIS Desktop?

I've got a polygon feature class with Z values enabled. The polygon entities represent billboards. I'm looking for a way to measure the front surface area of this entities - i.e the area of the billboards from one side.

Can I do this using a Geoprocessing tool?

Some snapshots

Polygon in ArcMap

Polygon in ArcScene

• Have you tried using trigonometry in Python? If so, please edit the question to contain your Python code. – Vince Jul 24 '16 at 15:00
• How do they look like on a map? Just line? – FelixIP Jul 25 '16 at 4:34
• So they are triangles? – FelixIP Jul 26 '16 at 4:41
• – Mr. Che Dec 28 '17 at 12:38
• what do you call "front" in your description ? the nearly vertical side or the nearly horizontal one? – radouxju Dec 30 '17 at 14:54

First, copy and paste the defs in the accepted answer of the post that you mentioned to the python interpreter of ArcMap. And then run a cursor on the shapes to calculate the 3D area, such as:

``````for row in arcpy.SearchCursor("Billboard Layer on My Table of Content"):
area_array=[[j.X,j.Y,j.Z] for i in row.Shape.getPart() for j in i]
print row.OBJECTID, area(area_array)
``````

This routine just prints the ID and the area of the feature but it can be used to record areas into a new field as well by `UpdateCursor`. Intentionally, I have exemplified the old cursor approach, otherwise there are much more efficient utilities in arcpy's `data access` module (i.e., `arcpy.da`)

If you have 3D Analyst, this works - for individual polygons:

1. Create a TIN using your polygon
2. Use Add Surface Information with your polygon as input feature class and the corresponding TIN as input surface. Check "SURFACE_AREA" as output property.

The 3D area is then added in a new field to your polygon feature class' attribute table.

You can automate this with Python or ModelBuilder if you have a large number of polygons or need to repeat the process.