方法
ArcGIS Pro には [平行の作成] ツールがありますが、ArcPy からは使用できません。この代わりに、Python スクリプトを使用して、以下の画像のような効果を作成することができます。 パイプライン、道路、高速道路に関連するワークフローには、スクリプトが便利かつ効率的かもしれません。
この記事では、平行なフィーチャを描画する Python スクリプトを使用する手順を示します。
注意: このスクリプトはラインの交差には機能しません。
import os, arcpy, math
infc=r'<Feature/Shapefile_Path>' 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)
以下に完全なスクリプトを示します。
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)
ArcGIS の専門家からヘルプを受ける
Esri Support アプリのダウンロード