Español
Continue in the app
Be The First To Get Support Updates
Want to know about the latest technical content and software updates?

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.

Imagen que muestra una salida del script utilizado para crear un efecto similar al de la herramienta Crear paralelo.

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.
  1. 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.
  2. Agregue un campo Ancho a la entidad de línea clonada.
    1. 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.
    2. Asigne al campo el nombre Ancho y establezca cualquier tipo de datos numérico (largo, corto) como tipo de datos.
    3. Rellene el campo Ancho con un valor para determinar el ancho de la línea paralela respecto de la entidad de línea.
  3. Abra una consola de Python o la ventana de Python en ArcGIS Pro.
  4. Importe los módulos necesarios.
import os, arcpy, math
  1. Especifique el espacio de trabajo.
infc=r'<Feature/Shapefile_Path>' workspace = os.path.dirname(infc) edit = arcpy.da.Editor(workspace)
  1. Inicie la edición en la entidad.
edit.startEditing(False,True) edit.startOperation()
  1. 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
  1. 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))
  1. 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