Рассчитать расстояние до дороги от широты источника и долготы до пункта назначения

Я использовал следующий код, но это дает мне воздушное расстояние от источника до места назначения, но мне нужно расстояние до дороги, пожалуйста, помогите мне, ребята, с этим.

Эта работа, но это воздушное расстояние, но мне нужно расстояние от улицы / дороги.

$center_lat =$_POST['lat'];

//19.159519;//
$center_lng =$_POST['lng'];//72.995782;//
$radius = '3963.0';
$range=$_POST['range'];
//echo $center_lng;
// Set the active mySQL database
$db_selected = mysql_select_db("mapdb", $connection);

// Search the rows in the markers table
$query = sprintf("SELECT name,lat, lng, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM hospitals HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20",
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($center_lng),
  mysql_real_escape_string($center_lat),
  mysql_real_escape_string($radius));
$result = mysql_query($query);

if (!$result) {
  die("Invalid query: " . mysql_error());
}
 else
 { 
  echo "Done";
 }
 // header('Content-type: application/json');
//$output = array();
$i=0;

 while($row = mysql_fetch_assoc($result)) {
     if($range > 0 )
      {
        $theta = $center_lng - $row['lng'];
        $distance = (sin(deg2rad($center_lat)) * sin(deg2rad($row['lat']))) + (cos(deg2rad($center_lat)) * cos(deg2rad($row['lat'])) * cos(deg2rad($theta)));   
        $distance = acos($distance);
        $distance = rad2deg($distance);
        $distance = $distance * 60 * 1.1515;
        $distance = $distance *1.609344;
        if($range > round($distance,2))
        {
            $info[$i] = "\"".$row['lat']."&".$row['lng']."@".$row['name'];
            $i=$i+1;            
        }
        $myTwitterResult1 = array($info);
    }
    else
    {   
        $info[$i] = "\"".$row['lat']."&".$row['lng']."@".$row['name'];
        $i=$i+1;
        $myTwitterResult1 = array($info);
    }
}
    $myJSONTweets = json_encode($myTwitterResult1);
    echo $myJSONTweets;

2 ответа

Решение

Если вы отображаете карту Google (ознакомьтесь с Условиями использования)

Используйте веб-сервис " Направления" или веб-сервис " Матрица расстояний"

Если вы используете Google Maps API v3 для отображения карты, оба имеют одинаковые сервисы в API.

Эта функция может помочь вам

function distance($lat1, $lon1, $lat2, $lon2, $unit)
 {
  $angle = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) *        cos(deg2rad($lat2)) * cos(deg2rad($angle));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
   return ($miles * 1.609344);
} else if ($unit == "N") {
  return ($miles * 0.8684);
} else {
    return $miles;
  }
 }
echo distance(32.9697, -96.80322, 29.46786, -98.53506, "K") . " Kilometers<br>";

больше информации здесь

Другие вопросы по тегам