Не работает DirectionServece Google Apps Script
Привет, всем
Недавно начал изучать Javascript. Написал вот код в Google Apps Script для определения расстояния между городами и времени пути. Однако уже в строке var directionsService = new google.maps.DirectionsService() появляется ошибка Объект google не определен. Хотя я подключил Google Maps Directions API в консоли. В чем может быть ошибка? Подскажите, пожалуйста. Вот код: function determineRoutsef() { var directionsService = new google.maps.DirectionsService(); var request = { origin:"Москва", destination:"Екатеринбург", travelMode: google.maps.TravelMode.DRIVING }; directionsService.route(request, function(result, status) { if (status == google.maps.DirectionsStatus.OK) { var routes = result.routes; var leg = routes[0].legs; var lenght = leg[0].distance.text; Logger.log(lenght); var duration = leg[0].duration.text; Logger.log(duration); } }) } |
Johnny1500, здравствуйте.
Цитата:
Ваш код работает: <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> <script> function determineRoutsef() { var directionsService = new google.maps.DirectionsService(); var request = { origin:"Москва", destination:"Екатеринбург", travelMode: google.maps.TravelMode.DRIVING }; directionsService.route(request, function(result, status) { if (status == google.maps.DirectionsStatus.OK) { var routes = result.routes; var leg = routes[0].legs; var lenght = leg[0].distance.text; //Logger.log(lenght); var duration = leg[0].duration.text; //Logger.log(duration); alert(lenght + "\n" + duration); } }) } determineRoutsef() </script> |
Проблема в этом:
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script> У меня ContainerBound скрипт связанный с листом GoogleSheet и нет отдельной HTML-страницы. Можно ли получить ссылку на объект внутри функции? Т.е. у меня есть одна функция, я хочу с помощью google.maps высчитать расстояние между городами, приравнять к переменной, а переменную приравнять к значению ячейки на листе. Знаю, что мои рассуждения крайне нубские, но и Javascript для меня новый язык. |
Johnny1500,
вот так получилось: function getGoogleData(address1, address2) { var url = "http://maps.googleapis.com/maps/api/directions/json?origin=" url+=address1 url+="&destination=" url+=address2 var response = UrlFetchApp.fetch(url); if (response.getResponseCode() == 200){ var data = JSON.parse( response.getContentText() ); var lenght = data.routes[0].legs[0].distance.text; var duration = data.routes[0].legs[0].duration.text; return [lenght, duration]; } } |
Цитата:
|
Все же можно ли определить расстояние между городами через службу DirectionsService Google, а не UrlFetch?
Как я понимаю должна работать программа: 1) На листе GoogleSheet запускается estimateViaDistance 2) Создается шаблон из Index.html 3) Получается ссылка на Googlemaps 4) Через скриплет запускается функция determineRoutes. Но у меня выскакивает ошибка "Объект google не определен", хотя Google Maps Directions API я в Developers Console подключил и учетные данные создал (Browser Key). В чем может быть причина? Подскажите, пожалуйста. Вот код: function onOpen(e) { SpreadsheetApp.getUi() .createMenu('Distance and time') .addItem('Estimate via DistanceService', 'estimateViaDistance') .addToUi(); } function determineRoutes() { var directionsService = new google.maps.DirectionsService; var request = { origin:"Москва", destination:"Екатеринбург", travelMode: google.maps.TravelMode.DRIVING }; directionsService.route(request,function(result, status){ if(status == google.maps.DirectionsStatus.OK){ var routes = result.routes; var leg = routes[0].legs; var lenght = leg[0].distance.text; Logger.log(lenght); var duration = leg[0].duration.text; Logger.log(duration); } }); } function estimateViaDistance(){ return HtmlService.createTemplateFromFile('Index.html') .evaluate() .setSandboxMode(HtmlService.SandboxMode.IFRAME); } Index.html: <!DOCTYPE html> <html> <head> <base target="_top"> </head> <body> <script src="https://maps.googleapis.com/maps/api/js?key=ПОЛУЧЕННЫЙ_КЛЮЧ&signed_in=true"async defer></script> <?!=determineRoutes();?> </body> </html> |
Часовой пояс GMT +3, время: 19:33. |