Bir .NET aracı geliştirmeyi gerektirmeyen bir çözüm arıyorsanız, tam olarak neyin peşinde olduğunuzu başarmak için aşağıdaki python komut dosyasını kullanabilirsiniz. Ben tam olarak aynı ihtiyacı vardı ve çözüm olarak aşağıdaki komut dosyası yazdı. 4 parametreli bir ArcCatalog aracı olarak yapılandırın veya parametreleri yorumlayın ve sabit kodlu değişkenleri açın ve doğrudan çalıştırın.
# CreateLineFromNearestVertexToFeature.py
# Author: Jeff Berry
# Description: Creates a line between the nearest vertext on source features
# to the nearest feature in target feature class.
# ---------------------------------------------------------------------------
# Import arcpy module
import arcpy
from arcpy import env
# Local variables:
# 1. SourceFC - Feature Class
# 2. TargetFC - Feature Class
# 3. Output_gdb - Geodatabase
# 4. Output_fc - String
SourceFC = arcpy.GetParameterAsText(0)
TargetFC = arcpy.GetParameterAsText(1)
Output_gdb = arcpy.GetParameterAsText(2)
Output_fc = arcpy.GetParameterAsText(3)
## Alternatively setup hardcoded variables
##SourceFC = "Buildings"
##TargetFC = "WaterMains"
##Output_gdb = "D:\\New File Geodatabase.gdb"
##Output_fc = "lines_output"
SourceFeaturePoints = "SrcFtrPoints"
arcpy.env.workspace = Output_gdb
# Process: Feature Vertices To Points
arcpy.FeatureVerticesToPoints_management(SourceFC, SourceFeaturePoints, "ALL")
# Process: Near
arcpy.Near_analysis(SourceFeaturePoints, TargetFC, "1000 Feet", "LOCATION", "NO_ANGLE")
# Process: Create Feature Class...
#arcpy.CreateFeatureclass_management(Output_gdb, Output_fc, "POLYLINE", "", "DISABLED", "DISABLED", "", "", "0", "0", "0")
rows = arcpy.SearchCursor(SourceFeaturePoints)
lstIDs = []
for row in rows:
lstIDs.append(row.ORIG_FID)
uniqueOBJIDS = set(lstIDs)
newLineList = []
shapeName = arcpy.Describe(SourceFeaturePoints).shapeFieldName
for objID in uniqueOBJIDS:
rows = arcpy.SearchCursor(SourceFeaturePoints, "\"NEAR_DIST\" = (SELECT MIN( \"NEAR_DIST\") FROM SrcFtrPoints WHERE \"ORIG_FID\" = " + str(objID) + ")")
for row in rows:
arrayLine = arcpy.Array()
ftr = row.getValue(shapeName)
pointStart = ftr.firstPoint
pointEnd = arcpy.Point(row.NEAR_X, row.NEAR_Y)
arrayLine.add(pointStart)
arrayLine.add(pointEnd)
plyLine = arcpy.Polyline(arrayLine)
newLineList.append(plyLine)
arcpy.CopyFeatures_management(newLineList, Output_fc)
arcpy.Delete_management(SourceFeaturePoints, "FeatureClass")
del rows
del row
del SourceFeaturePoints
del Output_fc
del Output_gdb
arcpy.ClearEnvironment("workspace")