使用python返回点在直线上的前后形状点或者垂足。
def cal_se(link_id, point, type):
"""
计算point在link上的前后形状点所组成的link以及垂足
:param link_id: linestring对象
:param point:point对象
:param type: 1 :返回垂足,无:返回前后形状点所组成的link
:return:
"""
c_start = link_id.project(point)
fp = link_id.interpolate(c_start)
if type == 1:
return fp
coords = list(link_id.coords)
prePoint = None
nextPoint = None
i = 0
dis_fp = link_id.project(Point(fp))
while i != len(coords):
dis_1 = link_id.project(Point(coords[i]))
if dis_fp == dis_1:
if dis_fp == 0:
prePoint = Point(coords[i])
nextPoint = Point(coords[i+1])
elif i + 1 == len(coords):
prePoint = Point(coords[i-1])
nextPoint = Point(coords[i])
else:
prePoint = Point(coords[i-1])
nextPoint = Point(coords[i+1])
break
elif dis_fp < dis_1:
prePoint = Point(coords[i-1])
nextPoint = Point(coords[i])
break
i += 1
return LineString([prePoint, nextPoint])