5 votos

¿Haciendo Buffer como Offset en ArcPy?

Me gustaría hacer un buffer de una polilínea y obtener como salida un polígono con los mismos ángulos como la polilínea, teniendo no arcos, como buffers del ordinario.

he probado el FLAT opción en ArcPy, pero ha aplicado sólo el ambos extremos.

enter image description here

5voto

CodeSlave Puntos 7133

Usted podría tratar de la Plana-final de la línea de amortiguamiento de la herramienta. Lo hice para un propósito específico para el cual funciona bien. A veces me combinar el resultado para crear un polígono. La herramienta debería funcionar bien con 10.0. No lo he probado en la versión 10.1.

EDITAR: Hay un par de parámetros que se pueden establecer; distancia, en inglete o biselados, extender la línea termina. (para mis propósitos me necesarias para extender la línea termina así hice que una opción) Porque fue hecho para el propósito específico que usted debe ser consciente de que de no resolver cruce de líneas (como mencioné en mi comentario anterior). Si alguien está interesado me puede ilustrar lo que esto se parece. Básicamente, resultante de cruzar las líneas tienen que ser resueltos manualmente antes de la creación de un polígono o polígonos va a resultar en una geometría simple.

Yo quisiera añadir algunos efectos visuales para mostrar lo que básicamente esto: enter image description here Resultado: enter image description here Como resultado de polígono (también el uso de una herramienta personalizada para que): enter image description here

4voto

kwutchak Puntos 232

He realizado una función en ArcPy para compensar una polilínea. Esta es la función de mi script ArcPy y el resultado:

enter image description here

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)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X