Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Расчет расстояния и времени до адреса


Tobolskiy

Recommended Posts

Всем привет. Возможно кто то смог реализовать подобное не используя платные сервисы гугла и яндекса.

Задача в админку вывести расстояние до адреса клиента и время, что бы можно было вывести одной строкой, а данные в скрипт подставить из переменной с адресом.

Нашел вот такой код, но он уже устарел, не работает и опять же нужно API гугла а там платно:

 

<?php
$from = "Санкт-Петергубг Ленина 5";
$to = "Выборг Ленина 20";

$from = urlencode($from);
$to = urlencode($to);

$data = file_get_contents("http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=ru-RU&sensor=false");

$data = json_decode($data);
echo "Откуда: ".$data->destination_addresses[0] . "<br/>" .
     "Куда: ". $data->origin_addresses[0] . "<br/>" .
     "Время: ". $data->rows[0]->elements[0]->distance->text . "<br/>" .
     "Путь: ".$data->rows[0]->elements[0]->duration->text;
?>

 

 

Возможно есть какие то еще варианты? Есть ключ бесплатный для Яндекса но не хватит знаний написать подобный скрипт.

Надіслати
Поділитися на інших сайтах


этот адрес http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=ru-RU&sensor=false возвращает ответ

{
   "destination_addresses" : [],
   "error_message" : "You must use an API key to authenticate each request to Google Maps Platform APIs. For additional information, please refer to http://g.co/dev/maps-no-account",
   "origin_addresses" : [],
   "rows" : [],
   "status" : "REQUEST_DENIED"
}

 

скорее всего без API key у вас не получится.

что же касается бесплатных ресурсов, скорее всего там ограничение не кол-во запросов по времени

Надіслати
Поділитися на інших сайтах

4 минуты назад, freelancer сказал:

этот адрес http://maps.googleapis.com/maps/api/distancematrix/json?origins=$from&destinations=$to&language=ru-RU&sensor=false возвращает ответ


{
   "destination_addresses" : [],
   "error_message" : "You must use an API key to authenticate each request to Google Maps Platform APIs. For additional information, please refer to http://g.co/dev/maps-no-account",
   "origin_addresses" : [],
   "rows" : [],
   "status" : "REQUEST_DENIED"
}

 

скорее всего без API key у вас не получится.

что же касается бесплатных ресурсов, скорее всего там ограничение не кол-во запросов по времени

у гугла я так понял вообще бесплатного варианта нету апи. у яндекса есть с ограничениями на кол-во запросов в месяц или год

Надіслати
Поділитися на інших сайтах


2 минуты назад, freelancer сказал:

для яндекса нашел это https://yandex.ru/routing/doc/distance_matrix/concepts/quickstart.html
но там только расстояние. вам же время(с учетом пробок) нужно

 

да пока бы хоть что то из этого придумать как решить))) в принципе пока бы хватило и расстояния, но в этом примере координаты, у меня же есть только переменная $adres

Надіслати
Поділитися на інших сайтах


12 минут назад, Tobolskiy сказал:

 

да пока бы хоть что то из этого придумать как решить))) в принципе пока бы хватило и расстояния, но в этом примере координаты, у меня же есть только переменная $adres

 

в яндексе вполне приличная песочница с примерами, расчет расстояния точно есть, насчет времени не сталкивался.

  • +1 1
Надіслати
Поділитися на інших сайтах

хотя там же есть duration

я бы попробовал так

$content = file_get_contents("https://api.routing.yandex.net/v2/distancematrix?origins=55.7538127,37.5755189|55.7539127,37.5655189&destinations=55.7489841,37.564189&mode=transit&apikey={ваш_api_ключ}");


if ($http_response_header && mb_strpos($http_response_header[0], '200 OK') > 0 ) {
    $data = json_decode($content, true);

    if(isset($data['rows'])){
        foreach ($data['rows'] as $row){
            foreach ($row['elements'] as $element) {
                if ($element['status'] == 'OK') {
                    $duration = $element['duration']['value'];
                    $distance = $element['distance']['value'];
                    var_dump($duration, $distance);
                }
            }
        }
    }
}

 

duration в секундах, distance в метрах

Надіслати
Поділитися на інших сайтах

12 минут назад, freelancer сказал:

хотя там же есть duration

я бы попробовал так


$content = file_get_contents("https://api.routing.yandex.net/v2/distancematrix?origins=55.7538127,37.5755189|55.7539127,37.5655189&destinations=55.7489841,37.564189&mode=transit&apikey={ваш_api_ключ}");


if ($http_response_header && mb_strpos($http_response_header[0], '200 OK') > 0 ) {
    $data = json_decode($content, true);

    if(isset($data['rows'])){
        foreach ($data['rows'] as $row){
            foreach ($row['elements'] as $element) {
                if ($element['status'] == 'OK') {
                    $duration = $element['duration']['value'];
                    $distance = $element['distance']['value'];
                    var_dump($duration, $distance);
                }
            }
        }
    }
}

 

duration в секундах, distance в метрах

 

а куда тут адрес вставлять?

Надіслати
Поділитися на інших сайтах


23 минуты назад, Vetroff сказал:

 

в яндексе вполне приличная песочница с примерами, расчет расстояния точно есть, насчет времени не сталкивался.

 

да, там есть вот такой вариант: https://yandex.ru/dev/maps/jsbox/2.1/route_panel_control

причем показывает на карте даже время, но я не знаю как выдернуть именно значения, без самой карты

Надіслати
Поділитися на інших сайтах


Нашел вот такой еще вариант http://jsfiddle.net/XRMxf/

тут работает, но почему то переношу на свой сервер и сразу перестает работать... не пойму. Ругается тоже на API хотя на jsfiddle.net работает без API

Змінено користувачем Tobolskiy
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.