Select to view content in your preferred language

Directional buffer / offset for polygon edges based on bearing and spacing

408
2
03-20-2026 03:02 PM
chill_gis_dude
Frequent Contributor

I am trying to automate a boundary adjustment workflow in ArcGIS Pro and could use some help. Not even sure if this is possible. 

I have polygons that represent orchards, but the edges were surveyed at the tree line and the tree canopies go past that. I am trying to extend the edges of each polygon depending on the row or plant spacing of the orchard; what I think is an anisotropic buffer (uneven buffer on all sides). My polygon has row spacing, plant spacing and line bearing (the angle of the rows of the orchard) attributes.

If the edge of the polygon is parallel to the row line I want the edge to be pushed out half of the row spacing. If the edge of the polygon is perpendicular to the row linen I want the edge to be pushed out half of the plant spacing.

I have tried custom arcpy scripts and affine transform + buffer methods, but they break on irregular polygons because small vertices and corner reconstruction change the offset distance. Is there a recommended workflow in ArcGIS Pro for something like a directional / anisotropic buffer where the offset depends on edge orientation?

Here is an attempt at a drawing explaining the problem: 

IMG_9407.jpg

Tags (3)
0 Kudos
2 Replies
DanielFox1
Esri Regular Contributor

Hi @chill_gis_dude At the moment this functionality is not possible out of the box and seems like it would require some additional and advanced scripting.

If you haven't tried you might be able to split the polygon using

1. feature to line
2. Add field to calculate the line bearing
3. Classify each edge as parallel or perpendicular (

Delta =|edge\_ bearing-row\_ bearing|

if delta > 90: delta = 180 - delta

Parallel would be if Delta <45
Perpendicular would be if Delta >= 45 

4. Assign the correct offset 
- Add a field 
- If parallel. row_spacing/2
- If perpendicular. plant_spacing/2

This will give each edge its own offset distance

5. Offset each edge individually

- You could try in this instance 
arcpy.Geometry().offsetCurve() 
This should hopefully allow per feature offset distances and avoid the buffer tools reconstruction. 

Finally

6. Rebuild the polygon from the offset edges using Feature to Polygon or Dissolve

Feel free to try the above as a guideline, but I would recommend putting this into an Esri Ideas page I think it would make an excellent addition to the toolboxes already available.

chill_gis_dude
Frequent Contributor

Hi Daniel,
Thanks a lot for the reply, I really appreciate the help.

That gives me a good direction to try, and it sounds like this approach should get around the limitations I was running into with the standard tools. I’ll experiment with this workflow and see if I can get something working.

If I manage to figure out a clean solution, I’ll post it here in case it helps anyone else dealing with the same thing.

Thanks again for taking the time to write that up.

0 Kudos