ознайомтесь із цим посиланням , для мене було використано наступну функцію для обчислення відстаней до відрізків рядків.
На 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);
}
Потім ви можете використовувати функції проекції для обчислення відстаней, я використовую вищевказану формулу для обчислення часу в цій точці з урахуванням середньої швидкості, і вона працює дуже добре.
Якщо ви хочете, щоб хороша бібліотека PHP розраховувала відстані між координатами в PHP, перегляньте клас GeoCalc