kiểm tra liên kết này , nó làm tôi sử dụng hàm sau để tính khoảng cách đến các đoạn đường.
Trong PHP:
function point_to_line_segment_distance($startX,$startY, $endX,$endY, $pointX,$pointY) {
// list($distanceSegment, $x, $y) = point_to_line_segment_distance($startX,$startY, $endX,$endY, $pointX,$pointY);
// Adapted from Philip Nicoletti's function, found here: http://www.codeguru.com/forum/printthread.php?t=194400
$r_numerator = ($pointX - $startX) * ($endX - $startX) + ($pointY - $startY) * ($endY - $startY);
$r_denominator = ($endX - $startX) * ($endX - $startX) + ($endY - $startY) * ($endY - $startY);
$r = $r_numerator / $r_denominator;
$px = $startX + $r * ($endX - $startX);
$py = $startY + $r * ($endY - $startY);
$s = (($startY-$pointY) * ($endX - $startX) - ($startX - $pointX) * ($endY - $startY) ) / $r_denominator;
$distanceLine = abs($s) * sqrt($r_denominator);
$closest_point_on_segment_X = $px;
$closest_point_on_segment_Y = $py;
if ( ($r >= 0) && ($r <= 1) ) {
$distanceSegment = $distanceLine;
}
else {
$dist1 = ($pointX - $startX) * ($pointX - $startX) + ($pointY - $startY) * ($pointY - $startY);
$dist2 = ($pointX - $endX) * ($pointX - $endX) + ($pointY - $endY) * ($pointY - $endY);
if ($dist1 < $dist2) {
$closest_point_on_segment_X = $startX;
$closest_point_on_segment_Y = $startY;
$distanceSegment = sqrt($dist1);
}
else {
$closest_point_on_segment_X = $endX;
$closest_point_on_segment_Y = $endY;
$distanceSegment = sqrt($dist2);
}
}
return array($distanceSegment, $closest_point_on_segment_X, $closest_point_on_segment_Y);
}
Sau đó, bạn có thể sử dụng các hàm chiếu để tính khoảng cách, tôi đang sử dụng công thức trên để tính thời gian tại thời điểm đó với tốc độ trung bình và nó hoạt động rất tốt.
Nếu bạn muốn có một thư viện PHP tốt để tính khoảng cách giữa các tọa độ trong PHP, hãy xem lớp GeoCalc