After trying many times, i wrote this script. It finally solved my problems which i just want to correct the wrong vertex and remain the right ones. Only the wrong vertex coordinates in point table.
import arcpy
from arcpy import env
env.overwriteOutput = True
env.workspace = "E:\\test"
points = "point.shp"
lines = "merge_line.shp"
point_id_field = 'station_id'
points_cursor = arcpy.da.SearchCursor(points, [point_id_field, 'SHAPE@X','SHAPE@Y'])
points_dict={}
for points_row in points_cursor:
station_id = points_row[0]
x = points_row[1]
y = points_row[2]
points_dict[str(int(station_id))] = str(x),str(y)
with arcpy.da.UpdateCursor(lines,["From_id","To_id","OID@","SHAPE@"]) as update_cursor:
for update_row in update_cursor:
print("Feature{0}:".format(update_row[2]))
from_id = update_row[0]
to_id = update_row[1]
if from_id in points_dict.keys() and to_id not in points_dict.keys():
print from_id
geometry = update_row[3]
pts = geometry.getPart(0)
n = len(pts)
pt_array1 = arcpy.Array()
for i in xrange(n):
if i == 0:
frompoint1 = pts.getObject(i)
print frompoint1.X, frompoint1.Y
frompoint1.X = points_dict[from_id][0]
frompoint1.Y = points_dict[from_id][1]
print frompoint1.X ,frompoint1.Y
pt_array1.add(frompoint1)
elif i == 1:
topoint1 = pts.getObject(i)
print topoint1.X,topoint1.Y
pt_array1.add(topoint1)
new_polyline_geometry = arcpy.Polyline(pt_array1)
update_row[3] = new_polyline_geometry
update_cursor.updateRow(update_row)
elif from_id in points_dict.keys() and to_id in points_dict.keys():
print from_id, to_id
geometry = update_row[3]
pts = geometry.getPart(0)
n = len(pts)
pt_array2 = arcpy.Array()
for i in xrange(n):
if i == 0:
frompoint2 = pts.getObject(i)
print frompoint2.X, frompoint2.Y
frompoint2.X = points_dict[from_id][0]
frompoint2.Y = points_dict[from_id][1]
print frompoint2.X ,frompoint2.Y
pt_array2.add(frompoint2)
elif i == 1:
topoint2 = pts.getObject(i)
print topoint2.X, topoint2.Y
topoint2.X = points_dict[to_id][0]
topoint2.Y = points_dict[to_id][1]
print topoint2.X, topoint2.Y
pt_array2.add(topoint2)
new_polyline_geometry = arcpy.Polyline(pt_array2)
update_row[3] = new_polyline_geometry
update_cursor.updateRow(update_row)
elif to_id in points_dict.keys() and from_id not in points_dict.keys():
print to_id
geometry = update_row[3]
pts = geometry.getPart(0)
n = len(pts)
pt_array3 = arcpy.Array()
for i in xrange(n):
if i == 0:
frompoint3 = pts.getObject(i)
print frompoint3.X,frompoint3.Y
pt_array3.add(frompoint3)
if i == 1:
topoint3 = pts.getObject(i)
print topoint3.X, topoint3.Y
topoint3.X = points_dict[to_id][0]
topoint3.Y = points_dict[to_id][1]
print topoint3.X, topoint3.Y
pt_array3.add(topoint3)
new_polyline_geometry = arcpy.Polyline(pt_array3)
update_row[3] = new_polyline_geometry
update_cursor.updateRow(update_row)