I would like to make a buffer for a polyline and get as Output a Polygon with the same angles as the polyline, having not arcs, like in ordinary buffers.
i tried the FLAT
option in ArcPy, but it's applied to just the both ends.
I would like to make a buffer for a polyline and get as Output a Polygon with the same angles as the polyline, having not arcs, like in ordinary buffers.
i tried the FLAT
option in ArcPy, but it's applied to just the both ends.
You could try the Flat-end line buffer tool. I made it for a specific purpose for which it works fine. I sometimes merge the result to create a polygon from. The tool should work fine with 10.0. Have not tested in 10.1.
EDIT: There is a few parameters that can be set; distance, mitered or beveled, extend line ends. (for my purposes I needed to extend the line ends so i made that an option) Because it was made for specific purpose you should be aware that it does not resolve crossing lines (as I mentioned in my comment above). If anyone is interested I can illustrate what this looks like. Basically, resulting crossing lines have to be resolved manually before creating a polygon or polygon will result in a non-simple geometry.
I thought I would add some visuals to show what this basically does: Result: Result as polygon (also use a custom tool for that):
I have made a function in ArcPy to offset a polyline. Here's the function from my ArcPy script and the result:
def offset(layer_in , layer_out , distance ):
arcpy.Select_analysis(layer_in , "line_offset")
arcpy.SplitLine_management("line_offset", "line_offset_split")
arcpy.Buffer_analysis("line_offset_split", "line_offset_split_buf", distance ,"FULL","FLAT","NONE")
arcpy.FeatureVerticesToPoints_management("line_offset","line_offset_points", "ALL")
arcpy.AddField_management("line_offset_points" , "X" , "DOUBLE" )
arcpy.AddField_management("line_offset_points" , "Y" , "DOUBLE" )
arcpy.CalculateField_management("line_offset_points", "X" , "!Shape.lastpoint.X!","PYTHON_9.3")
arcpy.CalculateField_management("line_offset_points", "Y" , "!Shape.lastpoint.Y!","PYTHON_9.3")
arcpy.Intersect_analysis(["line_offset_split_buf" ], "line_offset_split_buf_intersect" , "")
arcpy.SpatialJoin_analysis("line_offset_split_buf_intersect" , "line_offset_points" , "line_offset_split_buf_intersect_sj","JOIN_ONE_TO_ONE" , "KEEP_COMMON" , "" , "INTERSECT")##
rows = arcpy.UpdateCursor("line_offset_split_buf_intersect_sj")
for row in rows :
x = row.getValue("X")
y = row.getValue("Y")
polyOuter = arcpy.Array()
feat = row.Shape
part = feat.getPart(0)
for pt in iter(lambda:part.next(),None) : # iter stops on null pt
polyOuter.append(arcpy.Point( 2*x - pt.X ,2*y - pt.Y) )
row.setValue("Shape" , arcpy.Polygon(polyOuter))
rows.updateRow (row)
arcpy.Append_management("line_offset_split_buf_intersect_sj","line_offset_split_buf","NO_TEST")
arcpy.Dissolve_management("line_offset_split_buf", "line_offset_split_buf_disolv", "ID" , "", "SINGLE_PART")## the field is set to not dissolve all polygons
arcpy.Generalize_edit("line_offset_split_buf_disolv", "0.001")
arcpy.Select_analysis("line_offset_split_buf_disolv" , layer_out)