Bu bağlantıyı kontrol edin , çizgi segmentlerine olan mesafeleri hesaplamak için aşağıdaki işlevi kullanmamı sağladı.
PHP dilinde:
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);
}
Daha sonra mesafeleri hesaplamak için projeksiyon işlevlerini kullanabilirsiniz, ortalama bir hız verilen bu noktada zamanı hesaplamak için yukarıdaki formülü kullanıyorum ve gerçekten iyi çalışıyor.
İyi bir PHP kütüphanesinin PHP koordinatları arasındaki mesafeleri hesaplamasını istiyorsanız, GeoCalc sınıfına göz atın