Получить расстояние через Google api

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

Поэтому для решения данной проблемы я обратился к гуглу. Гугл дает бесплатный функционал в рамках 200 с чем то баксов, т.е. если ваши запросы к google api не превышают этой суммы, то вы можете использовать этот функционал бесплатно. Запросы вы можете выполнять по идее на любом удобном для вас языке программирования, у меня это php.

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

	function fetchUrl($url, $postFields = array()){
		$ch = curl_init($url);
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);		
		if(!empty($postFields)) {
			curl_setopt($ch, CURLOPT_POST, true);		
			curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
		}		
		$response = array();
		$response['html']     = curl_exec($ch);
		$response['err']      = curl_errno($ch);
		$response['errmsg']   = curl_error($ch);
		$response['header']   = curl_getinfo($ch);
		curl_close($ch);
		return $response;
	}
	
	$start = urlencode("Воронеж Новосибирская 13");
	$dop = urlencode("via:Воронеж Ленинский 1|via:Воронеж Перхоровича 5");
	$end = urlencode("Воронеж Московский проспект 82");

	
	$googleMaps = fetchUrl("https://maps.googleapis.com/maps/api/directions/json?origin=".$start."&destination=".$end."&waypoints=".$dop."&key=Ваш ключ&language=ru");				
	$json = json_decode($googleMaps["html"], true);
	print_r($json);	

Функция fetchUrl выполняет запрос к сайту.
Переменная $start - это начальная точка.
Переменная $dop - это промежуточные точки. Обратите внимание, что вначале добавляется via:, а между промежуточноми точками стоит знак |.
Переменная $end - это конечная точка.
В $json будет массив с данными в котором можно найти информацию по движению по этим точкам, информация о километраже содержится тут - $json["routes"][0]["legs"][0]["distance"]

В заключении скажу, что не стоит доверять на 100% доверять данным, которые вы получаете от google api, как показал мой опыт, некоторые точки гугл почему-то не определяет и возвращает пустой результат.

Комменатрии
Добавить комментарий