Ini adalah masalah geometri analitik dan solusinya diberikan oleh Paul Bourke pada tahun 1998 ( Jarak Minimum antara Titik dan Garis ). Jarak terpendek dari titik ke garis atau segmen garis adalah tegak lurus dari titik ini ke segmen garis. Beberapa versi algoritmanya telah diajukan dalam berbagai bahasa termasuk Python seperti dalam Mengukur jarak dari titik ke segmen garis dalam Python. tetapi ada banyak lainnya (seperti tetangga terdekat antara layer titik dan layer garis dengan Shapely)
# 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)])
dan hasilnya
Mengadaptasi solusi untuk masalah Anda itu mudah, cukup lewati semua segmen garis, ekstrak titik akhir segmen dan terapkan fungsinya.