Cómo: Crear entidades paralelas similares a la herramienta Copiar paralelo en ArcGIS Pro con Python
Resumen
Aunque ArcGIS Pro tiene la herramienta Crear paralelo, la herramienta no está disponible a través de ArcPy.Como alternativa, se puede utilizar un script de Python para crear un efecto similar, como se ve en la siguiente imagen. Un script puede ser útil y eficiente para flujos de trabajo relacionados con tuberías, carreteras y autopistas.

Este artículo proporciona pasos para utilizar un script de Python que dibuja entidades paralelas.
Procedimiento
Nota: Este script no funciona en intersecciones de línea.
- Cree un clon de la entidad de línea. Consulte ArcGIS Pro: Copiar y pegar entidades con el portapapeles o ArcGIS Pro: Copiar entidades (Administración de datos) para obtener más información.
- Agregue un campo Ancho a la entidad de línea clonada.
- Utilice Agregar campo en la vista Campos de la entidad de línea clonada. Consulte ArcGIS Pro: Vista Campos para obtener más información.
- Asigne al campo el nombre Ancho y establezca cualquier tipo de datos numérico (largo, corto) como tipo de datos.
- Rellene el campo Ancho con un valor para determinar el ancho de la línea paralela respecto de la entidad de línea.
- Abra una consola de Python o la ventana de Python en ArcGIS Pro.
- Importe los módulos necesarios.
import os, arcpy, math
- Especifique el espacio de trabajo.
infc=r'<Feature/Shapefile_Path>' workspace = os.path.dirname(infc) edit = arcpy.da.Editor(workspace)
- Inicie la edición en la entidad.
edit.startEditing(False,True) edit.startOperation()
- Defina una nueva función para crear la línea paralela.
def CopyParallel(plyP,sLength): part=plyP.getPart(0) lArray=arcpy.Array() rArray=arcpy.Array() for ptX in part: dL=plyP.measureOnLine(ptX) ptX0=plyP.positionAlongLine (dL-0.01).firstPoint ptX1=plyP.positionAlongLine (dL+0.01).firstPoint dX=float(ptX1.X)-float(ptX0.X) dY=float(ptX1.Y)-float(ptX0.Y) lenV=math.hypot(dX,dY) sX=-dY*sLength/lenV sY=dX*sLength/lenV leftP=arcpy.Point(ptX.X+sX,ptX.Y+sY) lArray.add(leftP) rightP=arcpy.Point(ptX.X-sX, ptX.Y-sY) rArray.add(rightP) array = arcpy.Array([lArray, rArray]) section=arcpy.Polyline(array) return section
- Inicie un nuevo cursor para actualizar la entidad de línea clonada para que se convierta en la línea paralela.
with arcpy.da.UpdateCursor(infc,("Shape@","Width")) as cursor: for shp,w in cursor: twoLines=CopyParallel(shp,w) cursor.updateRow((twoLines,w))
- Elimine el cursor y detenga la edición para liberar el archivo de bloqueo en la entidad.
del cursor edit.stopOperation() edit.stopEditing(True)
A continuación, se muestra el script completo:
import os, arcpy, math infc=r'C:\Users\User\Desktop\Work\Sample\Test_Shapefile.shp' workspace = os.path.dirname(infc) edit = arcpy.da.Editor(workspace) edit.startEditing(False,True) edit.startOperation() def CopyParallel(plyP,sLength): part=plyP.getPart(0) lArray=arcpy.Array() rArray=arcpy.Array() for ptX in part: dL=plyP.measureOnLine(ptX) ptX0=plyP.positionAlongLine (dL-0.01).firstPoint ptX1=plyP.positionAlongLine (dL+0.01).firstPoint dX=float(ptX1.X)-float(ptX0.X) dY=float(ptX1.Y)-float(ptX0.Y) lenV=math.hypot(dX,dY) sX=-dY*sLength/lenV sY=dX*sLength/lenV leftP=arcpy.Point(ptX.X+sX,ptX.Y+sY) lArray.add(leftP) rightP=arcpy.Point(ptX.X-sX, ptX.Y-sY) rArray.add(rightP) array = arcpy.Array([lArray, rArray]) section=arcpy.Polyline(array) return section with arcpy.da.UpdateCursor(infc,("Shape@","Width")) as cursor: for shp,w in cursor: twoLines=CopyParallel(shp,w) cursor.updateRow((twoLines,w)) del cursor edit.stopOperation() edit.stopEditing(True)
Información relacionada
Última modificación: 10/15/2020
Id. de artículo: 000024330
Software: ArcGIS Pro 2.6.2, 2.6.1, 2.6, 2.5.2, 2.5.1, 2.5, 2.4.3, 2.4.2, 2.4.1, 2.4, 2.3.3, 2.3.2, 2.3.1, 2.3, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2