Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Не работает DirectionServece Google Apps Script (https://javascript.ru/forum/misc/64507-ne-rabotaet-directionservece-google-apps-script.html)

Johnny1500 16.08.2016 14:11

Не работает 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);  
   
  }
 })
 
  
}

Manyasha 16.08.2016 14:26

Johnny1500, здравствуйте.
Цитата:

Сообщение от Johnny1500 (Сообщение 425620)
Хотя я подключил Google Maps Directions API в консоли

это как?
Ваш код работает:
<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>

Johnny1500 16.08.2016 15:57

Проблема в этом:

<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&signed_in=true"></script>

У меня ContainerBound скрипт связанный с листом GoogleSheet и нет отдельной HTML-страницы. Можно ли получить ссылку на объект внутри функции? Т.е. у меня есть одна функция, я хочу с помощью google.maps высчитать расстояние между городами, приравнять к переменной, а переменную приравнять к значению ячейки на листе.

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

Manyasha 17.08.2016 14:07

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];
  }
}

Johnny1500 18.08.2016 13:39

Цитата:

Сообщение от Manyasha
вот так получилось:

Спасибо, помогло.

Johnny1500 29.08.2016 14:26

Все же можно ли определить расстояние между городами через службу 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.