php - gratis - google maps api javascript
Consigue una distancia de conducción entre dos puntos utilizando la API de Google Maps (4)
Estoy tratando de obtener una distancia de conducción entre dos puntos con la API de Google Maps. Ahora, tengo un código que obtiene la distancia directa:
Esta función obtiene lat y lng:
function get_coordinates($city, $street, $province)
{
$address = urlencode($city.'',''.$street.'',''.$province);
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false®ion=Poland";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response);
$return = array(''lat'' => $response_a->results[0]->geometry->location->lat, ''long'' => $long = $response_a->results[0]->geometry->location->lng);
return $return;
}
Esta función calcula la distancia entre dos puntos según el lat & lng:
function getDistanceBetweenPoints($lat1, $lon1, $lat2, $lon2) {
$theta = $lon1 - $lon2;
$miles = (sin(deg2rad($lat1)) * sin(deg2rad($lat2))) + (cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)));
$miles = acos($miles);
$miles = rad2deg($miles);
$miles = $miles * 60 * 1.1515;
$kilometers = $miles * 1.609344;
return $kilometers;
}
Esta función imprime la distancia por kilómetros:
function get_distance($lat1, $lat2, $long1, $long2)
{
/* These are two points in New York City */
$point1 = array(''lat'' => $lat1, ''long'' => $long1);
$point2 = array(''lat'' => $lat2, ''long'' => $long2);
$distance = getDistanceBetweenPoints($point1[''lat''], $point1[''long''], $point2[''lat''], $point2[''long'']);
return $distance;
}
Uso:
$coordinates1 = get_coordinates(''Katowice'', ''Korfantego'', ''Katowicki'');
$coordinates2 = get_coordinates(''Tychy'', ''Jana Pawła II'', ''Tyski'');
echo ''Distance: <b>''.round(get_distance($coordinates1[''lat''], $coordinates2[''lat''], $coordinates1[''long''], $coordinates2[''long'']), 1).''</b> km'';
Pero este código obtiene distancia directa. Necesito distancia de conducción. ¿Cómo puedo obtener distancia de conducción con la API de google maps?
¡Gracias por tu ayuda!
¡La matriz de distancia API hará el trabajo, entonces no es necesario calcular las coordenadas usando la dirección y luego la Distancia!
Aquí está la API
https://maps.googleapis.com/maps/api/distancematrix/json?origins=orginaddress&destinations=destinationaddress&key=YOUR_API_KEY
Código PHP:
<div class="">
<?php echo $response_a[''rows''][0][''elements''][0][''distance''][''text'']; ?>
</div>
Bien, encontré la solución usando la matriz de distancia: https://developers.google.com/maps/documentation/distancematrix/#DistanceMatrixRequests
Esta función obtiene lat & lng de ciudad, dirección, provincia:
function get_coordinates($city, $street, $province)
{
$address = urlencode($city.'',''.$street.'',''.$province);
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false®ion=Poland";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response);
$status = $response_a->status;
if ( $status == ''ZERO_RESULTS'' )
{
return FALSE;
}
else
{
$return = array(''lat'' => $response_a->results[0]->geometry->location->lat, ''long'' => $long = $response_a->results[0]->geometry->location->lng);
return $return;
}
}
Esta función calcula la distancia de conducción y la duración del tiempo de viaje:
function GetDrivingDistance($lat1, $lat2, $long1, $long2)
{
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=".$lat1.",".$long1."&destinations=".$lat2.",".$long2."&mode=driving&language=pl-PL";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
$dist = $response_a[''rows''][0][''elements''][0][''distance''][''text''];
$time = $response_a[''rows''][0][''elements''][0][''duration''][''text''];
return array(''distance'' => $dist, ''time'' => $time);
}
Uso:
$coordinates1 = get_coordinates(''Tychy'', ''Jana Pawła II'', ''Śląskie'');
$coordinates2 = get_coordinates(''Lędziny'', ''Lędzińska'', ''Śląskie'');
if ( !$coordinates1 || !$coordinates2 )
{
echo ''Bad address.'';
}
else
{
$dist = GetDrivingDistance($coordinates1[''lat''], $coordinates2[''lat''], $coordinates1[''long''], $coordinates2[''long'']);
echo ''Distance: <b>''.$dist[''distance''].''</b><br>Travel time duration: <b>''.$dist[''time''].''</b>'';
}
Regreso:
Distancia: 11,2 km Duración del viaje: 15 minutos
Este es el método que obtuve. En él, puede introducir cualquier distancia manual de sesiones o base de datos.
$ch = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=orginaddress&destinations=destinationaddress&key=YOUR_API_KEY";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
//print_( $response_a );
Ahora la parte difícil era cómo mostrar la distancia. Bueno, con la investigación, obtuve esta respuesta:
$origin = urlencode($_SESSION[''source1'']);
$destination = urlencode($_SESSION[''dest1'']);
$url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=$origin&destinations=$destination&key=Your api key;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response, true);
?>
Puede imprimir este resultado en cualquier lugar. Está funcionando para mí.
Puedes hacerlo usando la API de matriz de distancia de Google:
// $details = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=Seattle&destinations=San+Francisco&mode=driving&sensor=false";
//you can also pass latitude/longitude values in origins
$details = "http://maps.googleapis.com/maps/api/distancematrix/json?origins=41.43206,-81.38992&destinations=San+Francisco&mode=driving&sensor=false";
$json = file_get_contents($details);
$details = json_decode($json, TRUE);
echo "<pre>"; print_r($details); echo "</pre>";
Aquí está el enlace de la API de matriz de distancia de Google: - https://developers.google.com/maps/documentation/distancematrix/?csw=1