답변:
이것은 분석 기하학의 문제이며 해결책은 1998 년 Paul Bourke ( 점과 선 사이의 최소 거리) 에 의해 주어졌습니다 . 점에서 선 또는 선분까지의 최단 거리는이 점에서 선분까지의 직각입니다. 그의 알고리즘의 여러 버전은 파이썬 에서 점에서 선분까지의 거리를 측정하는 것과 같이 파이썬을 포함한 다양한 언어로 제안되었습니다 . 그러나 많은 다른 것들이 있습니다 ( 점층과 선 모양 사이의 가장 가까운 이웃 과 같은 )
# basic example with PyQGIS
# the end points of the line
line_start = QgsPoint(50,50)
line_end = QgsPoint(100,150)
# the line
line = QgsGeometry.fromPolyline([line_start,line_end])
# the point
point = QgsPoint(30,120)
def intersect_point_to_line(point, line_start, line_end):
''' Calc minimum distance from a point and a line segment and intersection'''
# sqrDist of the line (PyQGIS function = magnitude (length) of a line **2)
magnitude2 = line_start.sqrDist(line_end)
# minimum distance
u = ((point.x() - line_start.x()) * (line_end.x() - line_start.x()) + (point.y() - line_start.y()) * (line_end.y() - line_start.y()))/(magnitude2)
# intersection point on the line
ix = line_start.x() + u * (line_end.x() - line_start.x())
iy = line_start.y() + u * (line_end.y() - line_start.y())
return QgsPoint(ix,iy)
line = QgsGeometry.fromPolyline([point,intersect_point_to_line(point, line_start, line_end)])
결과는
문제에 대한 솔루션을 쉽게 적용 할 수 있습니다. 모든 선 세그먼트를 반복하여 세그먼트 끝점을 추출하고 함수를 적용하십시오.