# Calculate/Compare 3D-angle and rotation of two polygons

634
4
08-03-2017 03:25 PM
New Contributor

Hi everyone, I hope this forum can help me with a problem of one of my archaeology students. We conducted an experiment were we measured the spatial movement of artefacts after trampling of an area. Our data are two polygon layers (before/after trampling) in an arbitrary x,y,z coordinate system (Total Station data, can be georeferenced/projected). Each polygon is one artefact and consists of three data points. The two layers are related in that we shot in each point for every artefact before and exactly the same point again after excavation. I would like to automate the process of identifying movement of each artefact (each polygon). I would be interested in the change of 3D-angle and rotation of each artefact. I tried to do this in ArcScene, but I’m a bit lost. I’m also not sure whether ArcGIS is the best program to do this or whether there are easier solutions. Any help would be much appreciated.

4 Replies
MVP Esteemed Contributor

Interesting... what form is the data in now?

If you have them in X, Y, Z for the point objects for each artifact between the two time periods, I am thinking array manipulation and analysis tools may be useful (numpy and/or scipy) and could be accessed through ArcMap or Pro to provide any capabilities that Arc*'s 3D tools don't

What have you looked in

Pro 3d or

ArcMap

If you could post a sample even as text in your post it would be interesting

New Contributor

Hi Dan, thanks a lot for coming back to me so quickly. In 3D analyst, I had a look at 'slope' and 'aspect' (also 'surface aspect'). I found on this forum the suggestion to use the mean value in Zonal statistics to get the average slope of my polygon. However, both of these procedures want to have a raster file, I can create a DEM/TIN/raster from my data, select area by my created polygons and then do the means, but I'm not completely sure if this is the right approach. I also had a look at Cartography tools, 'calculate main polygon angle' and then compare the two layers outside of ArcGIS (Excel), but this gives me only 2D angles and not the angle in relation to the z-value. I'm also not completely sure whether ArcGIS calculates the same main axis when the polygon is rotated (if this makes sense).

The original data is ASCII, but at the moment it is in an excel file, an example below:

 1/4 SHELLS GRAMS LENGTH MM WIDTH MM BEFORE-JCU ID X Y Z AFTER-JCU ID X Y Z B26 3.149 31.6 22.33 27 999.567 1002.509 99.718 2475 999.541 1002.495 99.7 28 999.558 1002.495 99.718 2476 999.547 1002.513 99.696 29 999.545 1002.498 99.716 2477 999.557 1002.517 99.697 B27 2.49 32.87 23.8 33 999.761 1002.422 99.719 2457 999.766 1002.412 99.7 34 999.748 1002.423 99.717 2458 999.753 1002.42 99.695 35 999.739 1002.432 99.719 2459 999.741 1002.431 99.7 B28 4.462 43.7 23 54 999.665 1002.034 99.72 2276 999.681 1002.005 99.744 55 999.643 1002.036 99.717 2277 999.666 1002.027 99.744 56 999.63 1002.053 99.718 2278 999.653 1002.028 99.758
MVP Esteemed Contributor

read the help topics on slope and aspect for rasters... they aren't the same as what you would expect as a formulation for points and conventional mathematical treatments.

I will have a look and get back to you

Can you confirm points 27, 28, 29 represent 3 observations for shell B26 at time 0, and 2475, 2476, 2477 are those same locations (albeit shifted) for the same shell at time 1?

So can the 3 points be treated as 3 separate locations or 3 observations for the same location (from which one could determine an average? like below

``a0  # array a0 for 27, 28, 29, treated as 3 observations at one location array([[ 999.567000,  1002.509000,  99.718000],       [ 999.558000,  1002.495000,  99.718000],       [ 999.545000,  1002.498000,  99.716000]])np.average(a0, axis=0)array([ 999.556667,  1002.500667,  99.717333])‍‍‍‍‍‍‍‍``
New Contributor