私はポイントレイヤー(電力送電構造物)と送電線レイヤーを持っています。ポイントレイヤーはラインレイヤーの上にあり、ラインレイヤーは常に方向が変わるため、ポイントレイヤーのラベル付けが時々難しいです。私がやりたいのは、ポイントレイヤーをラインレイヤーに対して垂直にラベル付けすることです。<\/P>
<\/P>
どなたか答えをお持ちでしょうか?<\/P><\/BODY><\/HTML>
It would be important to know what software you are using (and the version). Are you using desktop (Pro or ArcMap) or ArcGIS Online?
In case of Desktop, you could create a script to generate a field with the rotation based on the bisector. A few years ago I created a tool to define service areas of transmission tower applying the rotation based on the bisector (the green polygons in the image below):
The rotation determined by the tool could be written to the transmission towers and those can be used to define the rotation of the label. See the code below. The angles are determined on lines 51, 73 and 93.
<SPAN class="keyword token">import</SPAN> arcpy <SPAN class="keyword token">def</SPAN> <SPAN class="token function">main</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">import</SPAN> os arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN> <SPAN class="comment token"># input fc</SPAN> fc <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># r'C:\...\data.gdb\Torres'</SPAN> fld_label <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># 'LABEL'</SPAN> fld_orden <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># 'orden'</SPAN> buf <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameter<SPAN class="punctuation token">(</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># 20m servidumbre</SPAN> fc_out <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>GetParameterAsText<SPAN class="punctuation token">(</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># poligonos de servidumbre</SPAN> <SPAN class="comment token"># spatial reference</SPAN> sr <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Describe<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>spatialReference <SPAN class="comment token"># dicts, listado para orden</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Generar dictionarios con coordenadas, labels y orden...'</SPAN><SPAN class="punctuation token">)</SPAN> flds <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>fld_orden<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'SHAPE@'</SPAN><SPAN class="punctuation token">)</SPAN> dct_crds <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">:</SPAN> r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN> flds<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">}</SPAN> flds <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>fld_orden<SPAN class="punctuation token">,</SPAN> fld_label<SPAN class="punctuation token">)</SPAN> dct_lbl <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">{</SPAN>r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">:</SPAN> r<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">for</SPAN> r <SPAN class="keyword token">in</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>fc<SPAN class="punctuation token">,</SPAN> flds<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">}</SPAN> <SPAN class="comment token"># create list of points and order list</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Ordenar torres...'</SPAN><SPAN class="punctuation token">)</SPAN> lst_ptgs <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN>pntg <SPAN class="keyword token">for</SPAN> orden<SPAN class="punctuation token">,</SPAN> pntg <SPAN class="keyword token">in</SPAN> sorted<SPAN class="punctuation token">(</SPAN>dct_crds<SPAN class="punctuation token">.</SPAN>items<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">]</SPAN> lst_orden <SPAN class="operator token">=</SPAN> sorted<SPAN class="punctuation token">(</SPAN>dct_crds<SPAN class="punctuation token">.</SPAN>keys<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># create output featureclass</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Crear featureclass de salida...'</SPAN><SPAN class="punctuation token">)</SPAN> ws<SPAN class="punctuation token">,</SPAN> fc_name <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>split<SPAN class="punctuation token">(</SPAN>fc_out<SPAN class="punctuation token">)</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>CreateFeatureclass_management<SPAN class="punctuation token">(</SPAN>ws<SPAN class="punctuation token">,</SPAN> fc_name<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"POLYGON"</SPAN><SPAN class="punctuation token">,</SPAN> None<SPAN class="punctuation token">,</SPAN> None<SPAN class="punctuation token">,</SPAN> None<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># add fields</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddField_management<SPAN class="punctuation token">(</SPAN>fc_out<SPAN class="punctuation token">,</SPAN> fld_label<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"TEXT"</SPAN><SPAN class="punctuation token">,</SPAN> None<SPAN class="punctuation token">,</SPAN> None<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">50</SPAN><SPAN class="punctuation token">)</SPAN> flds_out <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="string token">'SHAPE@'</SPAN><SPAN class="punctuation token">,</SPAN> fld_label<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># empty lists for output features</SPAN> lst_puntos <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> lst_lineas <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> lst_poligonos <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># start insert cursor</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Recorrer torres...'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">with</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>InsertCursor<SPAN class="punctuation token">(</SPAN>fc_out<SPAN class="punctuation token">,</SPAN> flds_out<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">as</SPAN> curs<SPAN class="punctuation token">:</SPAN> <SPAN class="comment token"># first polygon</SPAN> <SPAN class="keyword token">if</SPAN> len<SPAN class="punctuation token">(</SPAN>lst_ptgs<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">>=</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN> pntg_1 <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> pntg_2 <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> angle_12 <SPAN class="operator token">=</SPAN> getAngle<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> pntg_2<SPAN class="punctuation token">)</SPAN> cut_line <SPAN class="operator token">=</SPAN> createPerpendicularCutLine<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> angle_12<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># create polygon</SPAN> polygon <SPAN class="operator token">=</SPAN> createServidumbre<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> cut_line<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># generate and insert output row</SPAN> lbl1 <SPAN class="operator token">=</SPAN> dct_lbl<SPAN class="punctuation token">[</SPAN>lst_orden<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">' - procesar: {0}'</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>lbl1<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> curs<SPAN class="punctuation token">.</SPAN>insertRow<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>polygon<SPAN class="punctuation token">,</SPAN> lbl1<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># intermediate polygons</SPAN> <SPAN class="keyword token">for</SPAN> i <SPAN class="keyword token">in</SPAN> range<SPAN class="punctuation token">(</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">,</SPAN> len<SPAN class="punctuation token">(</SPAN>lst_ptgs<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="comment token"># read points</SPAN> pntg_a <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN>i <SPAN class="operator token">-</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> pntg_1 <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN> pntg_2 <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN>i <SPAN class="operator token">+</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># get angles and bearings</SPAN> angle_1a <SPAN class="operator token">=</SPAN> getAngle<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> pntg_a<SPAN class="punctuation token">)</SPAN> angle_12 <SPAN class="operator token">=</SPAN> getAngle<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> pntg_2<SPAN class="punctuation token">)</SPAN> bearing_l <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN>angle_1a <SPAN class="operator token">+</SPAN> angle_12<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN> <SPAN class="comment token"># create cut lines</SPAN> cut_line <SPAN class="operator token">=</SPAN> createCutLine<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> bearing_l<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># cut polygon</SPAN> polygon <SPAN class="operator token">=</SPAN> createServidumbre<SPAN class="punctuation token">(</SPAN>pntg_1<SPAN class="punctuation token">,</SPAN> cut_line<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># generate and insert output row</SPAN> lbl1 <SPAN class="operator token">=</SPAN> dct_lbl<SPAN class="punctuation token">[</SPAN>lst_orden<SPAN class="punctuation token">[</SPAN>i<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">]</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">' - procesar: {0}'</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>lbl1<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> curs<SPAN class="punctuation token">.</SPAN>insertRow<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>polygon<SPAN class="punctuation token">,</SPAN> lbl1<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># last polygon</SPAN> <SPAN class="keyword token">if</SPAN> len<SPAN class="punctuation token">(</SPAN>lst_ptgs<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">>=</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">:</SPAN> pntg_1 <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN>len<SPAN class="punctuation token">(</SPAN>lst_ptgs<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">-</SPAN> <SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN> pntg_2 <SPAN class="operator token">=</SPAN> lst_ptgs<SPAN class="punctuation token">[</SPAN>len<SPAN class="punctuation token">(</SPAN>lst_ptgs<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">-</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="comment token"># get angles and bearings</SPAN> angle_21 <SPAN class="operator token">=</SPAN> getAngle<SPAN class="punctuation token">(</SPAN>pntg_2<SPAN class="punctuation token">,</SPAN> pntg_1<SPAN class="punctuation token">)</SPAN> cut_line <SPAN class="operator token">=</SPAN> createPerpendicularCutLine<SPAN class="punctuation token">(</SPAN>pntg_2<SPAN class="punctuation token">,</SPAN> angle_21<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># cut polygon</SPAN> polygon <SPAN class="operator token">=</SPAN> createServidumbre<SPAN class="punctuation token">(</SPAN>pntg_2<SPAN class="punctuation token">,</SPAN> cut_line<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># generate and insert output row</SPAN> lbl1 <SPAN class="operator token">=</SPAN> dct_lbl<SPAN class="punctuation token">[</SPAN>lst_orden<SPAN class="punctuation token">[</SPAN>len<SPAN class="punctuation token">(</SPAN>lst_ptgs<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> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">' - procesar: {0}'</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>lbl1<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> curs<SPAN class="punctuation token">.</SPAN>insertRow<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>polygon<SPAN class="punctuation token">,</SPAN> lbl1<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>AddMessage<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'Listo...'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">def</SPAN> <SPAN class="token function">createServidumbre</SPAN><SPAN class="punctuation token">(</SPAN>pntg<SPAN class="punctuation token">,</SPAN> cut_line<SPAN class="punctuation token">,</SPAN> servidumbre<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="string token">''' Create rectangle using the cutline and the size of the servidumbre '''</SPAN> angle_cut_line <SPAN class="operator token">=</SPAN> getAngleLine<SPAN class="punctuation token">(</SPAN>cut_line<SPAN class="punctuation token">)</SPAN> tmp_pntg1 <SPAN class="operator token">=</SPAN> pntg<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle_cut_line<SPAN class="punctuation token">,</SPAN> servidumbre <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> tmp_pntg2 <SPAN class="operator token">=</SPAN> pntg<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle_cut_line <SPAN class="operator token">+</SPAN> <SPAN class="number token">180</SPAN><SPAN class="punctuation token">,</SPAN> servidumbre <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token"># create corner points</SPAN> pntg1a <SPAN class="operator token">=</SPAN> tmp_pntg1<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle_cut_line <SPAN class="operator token">-</SPAN> <SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN> servidumbre <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> pntg1b <SPAN class="operator token">=</SPAN> tmp_pntg1<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle_cut_line <SPAN class="operator token">+</SPAN> <SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN> servidumbre <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> pntg2a <SPAN class="operator token">=</SPAN> tmp_pntg2<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle_cut_line <SPAN class="operator token">+</SPAN> <SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN> servidumbre <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> pntg2b <SPAN class="operator token">=</SPAN> tmp_pntg2<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle_cut_line <SPAN class="operator token">-</SPAN> <SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN> servidumbre <SPAN class="operator token">/</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> polygon <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Polygon<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>Array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>pntg1a<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg1b<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg2a<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg2b<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg1a<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> polygon <SPAN class="keyword token">def</SPAN> <SPAN class="token function">getAngleLine</SPAN><SPAN class="punctuation token">(</SPAN>line<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> pntg1 <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>PointGeometry<SPAN class="punctuation token">(</SPAN>line<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> line<SPAN class="punctuation token">.</SPAN>spatialReference<SPAN class="punctuation token">)</SPAN> pntg2 <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>PointGeometry<SPAN class="punctuation token">(</SPAN>line<SPAN class="punctuation token">.</SPAN>lastPoint<SPAN class="punctuation token">,</SPAN> line<SPAN class="punctuation token">.</SPAN>spatialReference<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> getAngle<SPAN class="punctuation token">(</SPAN>pntg1<SPAN class="punctuation token">,</SPAN> pntg2<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">def</SPAN> <SPAN class="token function">createPerpendicularCutLine</SPAN><SPAN class="punctuation token">(</SPAN>pntg<SPAN class="punctuation token">,</SPAN> angle<SPAN class="punctuation token">,</SPAN> dist<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> pntg_cut_1 <SPAN class="operator token">=</SPAN> pntg<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle <SPAN class="operator token">-</SPAN> <SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN> dist <SPAN class="operator token">*</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> pntg_cut_2 <SPAN class="operator token">=</SPAN> pntg<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>angle <SPAN class="operator token">+</SPAN> <SPAN class="number token">90</SPAN><SPAN class="punctuation token">,</SPAN> dist <SPAN class="operator token">*</SPAN> <SPAN class="number token">2.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> cut_line <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Polyline<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>Array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>pntg_cut_1<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg_cut_2<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> cut_line <SPAN class="keyword token">def</SPAN> <SPAN class="token function">createCutLine</SPAN><SPAN class="punctuation token">(</SPAN>pntg<SPAN class="punctuation token">,</SPAN> bearing1<SPAN class="punctuation token">,</SPAN> buf<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> bearing2 <SPAN class="operator token">=</SPAN> bearing1 <SPAN class="operator token">+</SPAN> <SPAN class="number token">180</SPAN> pntg_cut_1 <SPAN class="operator token">=</SPAN> pntg<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>bearing1<SPAN class="punctuation token">,</SPAN> buf <SPAN class="operator token">*</SPAN> <SPAN class="number token">10.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> pntg_cut_2 <SPAN class="operator token">=</SPAN> pntg<SPAN class="punctuation token">.</SPAN>pointFromAngleAndDistance<SPAN class="punctuation token">(</SPAN>bearing2<SPAN class="punctuation token">,</SPAN> buf <SPAN class="operator token">*</SPAN> <SPAN class="number token">10.0</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN> cut_line <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Polyline<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>Array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>pntg_cut_1<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg_cut_2<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">return</SPAN> cut_line <SPAN class="keyword token">def</SPAN> <SPAN class="token function">createLine</SPAN><SPAN class="punctuation token">(</SPAN>pntg1<SPAN class="punctuation token">,</SPAN> pntg2<SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">return</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>Polyline<SPAN class="punctuation token">(</SPAN>arcpy<SPAN class="punctuation token">.</SPAN>Array<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>pntg1<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">,</SPAN> pntg2<SPAN class="punctuation token">.</SPAN>firstPoint<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> sr<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">def</SPAN> <SPAN class="token function">getAngle</SPAN><SPAN class="punctuation token">(</SPAN>pntg1<SPAN class="punctuation token">,</SPAN> pntg2<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">return</SPAN> pntg1<SPAN class="punctuation token">.</SPAN>angleAndDistanceTo<SPAN class="punctuation token">(</SPAN>pntg2<SPAN class="punctuation token">,</SPAN> method<SPAN class="operator token">=</SPAN><SPAN class="string token">'PLANAR'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">if</SPAN> __name__ <SPAN class="operator token">==</SPAN> <SPAN class="string token">'__main__'</SPAN><SPAN class="punctuation token">:</SPAN> main<SPAN class="punctuation token">(</SPAN><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></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><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></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><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>
Desktop 10.5.1 or ArcGIS Pro 2.1.1
I am not a big time programmer.
Is it possible for you to share a sample of the data? I could have a look if I can adjust the script to what you need. The result would be an additional field with the rotation in the point layer.
I have to look into it, but it might be possible. Which layer do you want? Points or Lines.
It could (or should) be both. Or if the points follow the order (sequence) of the line one could determine the angles of the lines based on only the points. Otherwise, one has to determine the angles of both line parts based on the line. It also matter is the line is a single line, or each segment from tower to tower is a feature. Would be could to see the data to understand those aspects, since it determines how the code should be changed.
Hi, @XanderBakker !
Could I get a help with this script?
I have the same queastion as @Paul 😕
Hi @GIS_Rookie ,
Then I suppose I have to reply with a question similar to the one I asked Paul. Do you have a sample of data that you can share? That will help understand what you have and what you are looking for.
Hi @XanderBakker !
I am trying to run your script and I have some questions.
Thank you and would greatly appreciate any help!
Hi @MarcoConopio1 ,
The error is pointing to the use of a field that does not exist in the featureclass. Can you check that the fields with names assigned to the variables "fld_orden" and "fld_label" exist in your featureclass?
Hi, @XanderBakker . Thanks a lot for your script, it’s very useful.
I am having an issue with angles as when my ‘ANGLE2’ field gets populated the only value I get is: -116.907208734888 (for every row).I am basically trying to draw a short line that will mark 1 km along the road. I have created points along the road, and now trying to label them with ‘___’.I want this labels to be perpendicular to the road.I have added two fields to my points shapefile (‘Pole’ with values as ‘___’ (data type: text), and “ANGLE2” with empty values (data type: double)).
Please take a look at the attached file for a visual explanation.
I will appreciate any advise, thanks!
サインインしたメンバーは投稿、更新のフォローなどができます。初めてですか?無料アカウントを登録してください。
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.