I plan to run a scheduled server job on a feature class in an Oracle 18c/10.7.1 geodatabase.
The job would:
- Truncate the rows in an existing feature class
- Generate new rows from a geoprocessing tool (FeatureVerticesToPoints / midpoints)
- Insert/append the geoprocessing rows into the feature class
Note: I would like to do this without needing to temporarily store any sort of intermediate results in a temporary feature class/GDB.
I've gotten part-way there:
import arcpy
conn = "Database Connections\\DEV.sde\\"
input_lines = "OWNER.ROAD"
existing_fc = "OWNER.SCHED_ROAD_MIDPOINT"
arcpy.TruncateTable_management(conn + existing_fc)
arcpy.FeatureVerticesToPoints_management(conn + input_lines, conn + existing_fc, "MID")
#arcpy.Append_management(, , "TEST", "", "")
Question:
I'm not sure how to use FeatureVerticesToPoints_management
as the input in the append process.
Is there a way to append/insert geoprocessing results into an existing feature class using ArcPy?
Answer
I've built on @user2856's answer:
- Loop through a list that has 3 rows. Each row has an input FC, target FC, and an ID field.
- For each row in the list:
- Truncate the target FC
- Populate the target FC with midpoints from the input FC (target FC fields are: SHAPE, MIDPOINT_X, and MIDPOINT_Y)
- Populate the ID field in the target FC
Caution! The target FCs will get truncated! All records in the target FCs will be deleted.
import arcpy
conn = "Database Connections\\\\"
#This script only works for polyline feature classes (not polygons or points).
#Caution! The target FCs will get truncated! All records in the target FCs will be deleted.
# INPUT FC TARGET FC ID FIELD (for both the input FC and the target FC)
lstFC = [\
[".", ".S_SIDEWLK_MIDPOINT", "SDW_ID" ],\
["." , ".S_SEWER_MIDPOINT" , "SEWER_ID" ],\
["." , ".S_ROAD_MIDPOINT" , "ROAD_ID" ],\
]
def ReloadMidpoints():
for fc in lstFC:
inputFC = conn + (fc)[0]
targetFC = conn + (fc)[1]
idField = (fc)[2]
arcpy.TruncateTable_management(targetFC)
print "<" + targetFC + "> has been truncated."
with arcpy.da.SearchCursor(inputFC, ['SHAPE@', idField]) as s_rows:
with arcpy.da.InsertCursor(targetFC, ['SHAPE@', idField, "MIDPOINT_X","MIDPOINT_Y"]) as i_rows:
for row in s_rows:
Midpoint = row[0].positionAlongLine(0.50,True).firstPoint
rowVals = [(Midpoint.X,Midpoint.Y),s_rows[1],Midpoint.X,Midpoint.Y]
i_rows.insertRow(rowVals)
print "<" + targetFC + "> has been reloaded with midpoints that were generated from <" + (inputFC) + ">."
print ""
ReloadMidpoints()
print "Complete."
No comments:
Post a Comment