Получите расстояние в км между двумя адресами локальной сети, используя Google Maps API

При запуске этого кода он не дал никакого значения.
Но когда заменить значение lat lan на (37.910689 ,-97.250977),(16.110560, -94.174805) затем он возвращает результат в метрах. Он показывает пустой вывод при передаче любого другого значения локальной сети, кроме адреса США.

function location(){

$url="https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&origins=28.666585,-77.229059&destinations=28.667053%2C-77.219898&key=Api key";

$json_string = $url;
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, TRUE); // Set second argument as TRUE

//print_r($obj['rows']); // Now this will works!
$prn=$obj['rows'];
foreach($prn as $row)
{
$ele=$row['elements'];
foreach($ele as $k)
{
$dis=$k['distance'];
foreach($dis as $l=> $lvalue){
$meter= $lvalue  ;
}
}
}

return $meter ;
}

-3

Решение

Две точки, которые вы указали в своем коде, находятся в Атлантическом океане. Вы можете проверить, введя 28.667053, -77.219898 в поле поиска на https://www.google.com. Google отвечает ZERO_RESULTS, потому что он не может рассчитать расстояние между двумя точками в океане.

ОБНОВЛЕНИЕ: обратите внимание, что то, что дает API карты Google, НЕ является антенной или кратчайшим расстоянием между 2 точками или расстоянием «по прямой линии». Это расстояние езды или пешком. Так что он должен знать о 2 точках, прежде чем он сможет дать вам расстояние. Если он не знает 2 точки или не может рассчитать маршрут до 2 точек, он не даст результатов. https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&Истоки = 20.254916,76.715059&направления = 20.3127202,76.6839331 — эти точки находятся близко, но расстояние вождения / ходьбы велико. Карты Гуля дают расстояние вождения / ходьбы.

{
"destination_addresses": [
"28.667053,-77.219898"],
"origin_addresses": [
"28.666585,-77.229059"],
"rows": [
{
"elements": [
{
"status": "ZERO_RESULTS"}
]
}
],
"status": "OK"}

Google отвечает с правильным расстоянием для 2 баллов в США, например https://maps.googleapis.com/maps/api/distancematrix/json?units=metric&Истоки = 42.025819, -88,0854497&направления = 41.910088, -87,6929887

1

Другие решения

Попробуйте этот код для расчета расстояния и времени вождения.

Код:

<?php

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);

$status = "ERROR";
$dist   = 0;
$time   = 0;
if($response_a['rows'][0]['elements'][0]['status'] === 'OK') {
$dist   = $response_a['rows'][0]['elements'][0]['distance']['text'];
$time   = $response_a['rows'][0]['elements'][0]['duration']['text'];
$status = "OK";
}

return array('status' => $status, 'distance' => $dist, 'time' => $time);
}

Тестовое задание : 1. Расстояние между Мумбаи и Дели 2. Случайный неверный лат.

$dist = GetDrivingDistance(19.228825, 28.644800,72.854118, 77.216721);
var_dump($dist);
// OUTPUT : array(3) { ["status"]=> string(2) "OK" ["distance"]=> string(9) "1 386 km" ["time"]=> string(15) "22 godz. 35 min" }
$dist = GetDrivingDistance(888.228825, 28.644800,72.854118, 77.216721);
var_dump($dist);
// OUTPUT : array(3) { ["status"]=> string(5) "ERROR" ["distance"]=> int(0) ["time"]=> int(0) }

Совет : Вы можете получить более подробную информацию по var_dump($response_a) внутри функции.

PS: Убедитесь, что вы даете правильную LAT LAN.

0

По вопросам рекламы [email protected]