Не работает 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, время: 23:08. |