PROCÉDURE

créer des entités parallèles de façon similaire à l’outil Copie parallèle dans ArcGIS Pro avec Python

Last Published: October 16, 2020

Résumé

Même si ArcGIS Pro possède l’outil Créer des entités parallèles, l’outil n’est pas disponible via ArcPy. Vous pouvez en revanche utiliser un script Python pour créer un effet similaire, comme illustré sur l’image ci-dessous. Un script peut se révéler utile et efficace pour les processus associés aux pipelines, routes et autoroutes.

Image illustrant une sortie du script utilisé pour créer un effet similaire à celui de l’outil Créer des entités parallèles.

Cet article explique comment utiliser un script Python qui dessine des entités parallèles.

Procédure

Remarque : Ce script ne fonctionne pas sur les intersections de lignes.
  1. Créez un clone de l’entité linéaire. Reportez-vous à ArcGIS Pro : copier et coller à l’aide du Presse-papiers ou à ArcGIS Pro : copier des entités (Gestion des données) pour plus d’informations.
  2. Ajoutez un champ de largeur au clone de l’entité linéaire.
    1. Utilisez Add Field (Ajouter un champ) dans la vue des champs du clone de l’entité linéaire. Pour plus d’informations, reportez-vous à la rubrique ArcGIS Pro : vue des champs.
    2. Nommez le champ Width (Largeur) et définissez le type de données sur l’un des types numériques (long, court).
    3. Renseignez le champ de largeur de façon à déterminer la largeur de la ligne parallèle à partir de l’entité linéaire.
  3. Ouvrez une console Python ou la fenêtre Python dans ArcGIS Pro.
  4. Importez les modules nécessaires.
import os, arcpy, math
  1. Spécifiez l’espace de travail.
infc=r'<Feature/Shapefile_Path>' workspace = os.path.dirname(infc) edit = arcpy.da.Editor(workspace)
  1. Commencez la mise à jour de l’entité.
edit.startEditing(False,True) edit.startOperation()
  1. Définissez une nouvelle fonction pour créer la ligne parallèle.
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. Lancez un nouveau curseur afin que le clone de l’entité linéaire se transforme en ligne parallèle.
with arcpy.da.UpdateCursor(infc,("Shape@","Width")) as cursor: for shp,w in cursor: twoLines=CopyParallel(shp,w) cursor.updateRow((twoLines,w))
  1. Supprimez le curseur et arrêtez la mise à jour pour libérer le fichier de verrouillage sur l’entité.
del cursor edit.stopOperation() edit.stopEditing(True)

Voici le script complet :

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)

ID d’article:000024330

Obtenir de l’aide auprès des experts ArcGIS

Contacter le support technique

Télécharger l’application Esri Support

Accéder aux options de téléchargement

Informations associées

En savoir plus sur ce sujet