Nếu bạn đang tìm kiếm một giải pháp không yêu cầu phát triển công cụ .NET, bạn có thể sử dụng tập lệnh python bên dưới để thực hiện chính xác những gì bạn đang theo đuổi. Tôi có cùng một nhu cầu và viết kịch bản sau đây là giải pháp. Định cấu hình nó như một công cụ ArcCatalog với 4 tham số hoặc nhận xét các tham số và bỏ ghi chú các biến được mã hóa cứng và chạy trực tiếp.
# 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")