Sunday, 2 April 2017

Creating line (closest vertex to line) using ArcGIS Desktop?


I'm using ArcInfo 10 SP3.


I am working in reorganising our utility data. Two years ago, we have started collecting Private Service water line. We still have a lot of them to extract from old Record Drawings.


I was wondering if there was a way to create line that would join our building footprints to the WaterMain line?


I would like to use the the building vertex closest to the Water main as a starting point.


enter image description here




Answer



If you are looking for a solution that does not require developing a .NET tool, you can use the python script below to accomplish exactly what you are after. I had exactly the same need and wrote the following script as the solution. Configure it as an ArcCatalog tool with the 4 parameters, or comment out the parameters and uncomment the hardcoded variables and run it directly.


# 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")

No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...