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….'
<SPAN class="keyword token">import</SPAN> numpy <SPAN class="keyword token">as</SPAN> np <SPAN class="keyword token">import</SPAN> arcpy <SPAN class="keyword token">def</SPAN> <SPAN class="token function">angles_poly</SPAN><SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">,</SPAN> inside<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">,</SPAN> in_deg<SPAN class="operator token">=</SPAN><SPAN class="token boolean">True</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">"""Sequential angles from a poly* shape """</SPAN> a <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">.</SPAN>getPart<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN> a <SPAN class="operator token">=</SPAN>np<SPAN class="punctuation token">.</SPAN>asarray<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">.</SPAN>X<SPAN class="punctuation token">,</SPAN> i<SPAN class="punctuation token">.</SPAN>Y<SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">for</SPAN> j <SPAN class="keyword token">in</SPAN> a <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> j<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">if</SPAN> len<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token"><</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">return</SPAN> None <SPAN class="keyword token">elif</SPAN> len<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">==</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># **** check</SPAN> ba <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">-</SPAN> a<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">return</SPAN> np<SPAN class="punctuation token">.</SPAN>arctan2<SPAN class="punctuation token">(</SPAN><SPAN class="operator token">*</SPAN>ba<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> angles <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">if</SPAN> np<SPAN class="punctuation token">.</SPAN>allclose<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">[</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># closed loop</SPAN> a <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> r <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> tuple<SPAN class="punctuation token">(</SPAN>range<SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">,</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> r <SPAN class="operator token">=</SPAN> tuple<SPAN class="punctuation token">(</SPAN>range<SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>a<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN>len<SPAN class="punctuation token">(</SPAN>r<SPAN class="punctuation token">)</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> p0<SPAN class="punctuation token">,</SPAN> p1<SPAN class="punctuation token">,</SPAN> p2 <SPAN class="operator token">=</SPAN> a<SPAN class="punctuation token">[</SPAN>r<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">[</SPAN>r<SPAN class="punctuation token">[</SPAN>i<SPAN class="operator token">+</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">,</SPAN> a<SPAN class="punctuation token">[</SPAN>r<SPAN class="punctuation token">[</SPAN>i<SPAN class="operator token">+</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN> ba <SPAN class="operator token">=</SPAN> p1 <SPAN class="operator token">-</SPAN> p0 bc <SPAN class="operator token">=</SPAN> p1 <SPAN class="operator token">-</SPAN> p2 cr <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>cross<SPAN class="punctuation token">(</SPAN>ba<SPAN class="punctuation token">,</SPAN> bc<SPAN class="punctuation token">)</SPAN> dt <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>dot<SPAN class="punctuation token">(</SPAN>ba<SPAN class="punctuation token">,</SPAN> bc<SPAN class="punctuation token">)</SPAN> ang <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>arctan2<SPAN class="punctuation token">(</SPAN>np<SPAN class="punctuation token">.</SPAN>linalg<SPAN class="punctuation token">.</SPAN>norm<SPAN class="punctuation token">(</SPAN>cr<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> dt<SPAN class="punctuation token">)</SPAN> angles<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>ang<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">if</SPAN> in_deg<SPAN class="punctuation token">:</SPAN> angles <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>degrees<SPAN class="punctuation token">(</SPAN>angles<SPAN class="punctuation token">)</SPAN> angle <SPAN class="operator token">=</SPAN> np<SPAN class="punctuation token">.</SPAN>sum<SPAN class="punctuation token">(</SPAN>angles<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># ---- change to np.min</SPAN> <SPAN class="keyword token">return</SPAN> angle __esri_field_calculator_splitter__ angles_poly<SPAN class="punctuation token">(</SPAN>!Shape!<SPAN class="punctuation token">)</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
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
Les membres connectés peuvent publier, suivre les mises à jour, et plus encore. Nouveau ici ? Inscrivez-vous gratuitement.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.