I would like to have an information about the minimum angle in every polygon in my database. Is there a way to evaluate it automatically? I need this information to find polygons which have very sharp angles, which might indicate that those polygons have to be corrected. some example of the polygon which I am looking for is presented in the attached image.
If memory serves... but you will have to change the 'angle = np.sum ….' line to 'angle = np.min….'
import numpy as np import arcpy def angles_poly(a, inside=True, in_deg=True): """Sequential angles from a poly* shape """ a = a.getPart() a =np.asarray([[i.X, i.Y] for j in a for i in j]) if len(a) < 2: return None elif len(a) == 2: # **** check ba = a - a return np.arctan2(*ba[::-1]) else: angles =  if np.allclose(a, a[-1]): # closed loop a = a[:-1] r = (-1,) + tuple(range(len(a))) + (0,) else: r = tuple(range(len(a))) for i in range(len(r)-2): p0, p1, p2 = a[r[i]], a[r[i+1]], a[r[i+2]] ba = p1 - p0 bc = p1 - p2 cr = np.cross(ba, bc) dt = np.dot(ba, bc) ang = np.arctan2(np.linalg.norm(cr), dt) angles.append(ang) if in_deg: angles = np.degrees(angles) angle = np.sum(angles) # ---- change to np.min return angle __esri_field_calculator_splitter__ angles_poly(!Shape!)
It is a '*.cal' file so the __esri_field_calculator_splitter__ line should split everything into the code block and expression line when you load it.
NOTE... haven't test this in a while