Я могу легко использовать Google Maps Javascript Directions/Routing API во внешнем интерфейсе браузера следующим образом:
const directionsService = new google.maps.DirectionsService();
directionsService.route({
origin: {lat: 52, lng: 45},
destination: {lat: 123, lng: 123},
optimizeWaypoints: true,
travelMode: 'DRIVING',
drivingOptions: {
trafficModel: 'optimistic'
}
})
.then((response, status) => {
console.info(response, 'google maps response');
});
И это прекрасно работает.
Однако сейчас я пытаюсь выполнить серверную работу в NodeJS, и у меня возникают большие проблемы.
Я пытаюсь использовать этот модуль: https://www.npmjs.com/package/@google/maps
И пытаюсь следовать этой документации: https://googlemaps.github.io/google-maps-services-js/index.html
К сожалению, в документации не так уж много примеров, и я пытаюсь соединить точки выполнения одного и того же запроса на бэкэнде, вот что я попробовал:
import googleMapsClient from '@google/maps';
const mapsClient = googleMapsClient.createClient({
key: process.env.GOOGLE_MAPS_API_KEY
})
mapsClient.directions.route({
origin: {lat: 40.154570, lng: -111.573910},
destination: {lat: 40.259250, lng: -111.698360},
optimizeWaypoints: true,
travelMode: 'DRIVING',
drivingOptions: {
trafficModel: 'optimistic',
}
})
.then(response => {
console.info(response, 'route response');
})
Я получаю сообщение об ошибке, указанной выше mapsClient.directions.route is not a function
Когда я пробую это:
mapsClient.geocode({
address: '1600 Amphitheatre Parkway, Mountain View, CA'
}, function(err, response) {
if (err) console.error(err.message, 'geocode error');
if (!err) {
console.info(response.json.results);
}
});
Это работает нормально, так что, по крайней мере, я правильно импортирую модуль, документация настолько запутанная, что я не уверен, как заставить службу направлений/маршрутизации работать на серверной части?





@google/maps устарел. Вам следует использовать @googlemaps/google-maps-services-js. Вы не можете следовать документации нового клиента и использовать старый.
Итак, сначала вам следует удалить старую библиотеку и установить новую:
npm remove @google/maps
npm install @googlemaps/google-maps-services-js
Функции route() нет (как сказано в сообщении об ошибке).
Directions принимает DirectionsRequest, поэтому попробуйте следующий способ:
import {Client} from "@googlemaps/google-maps-services-js";
const {Client} = require("@googlemaps/google-maps-services-js");
const client = new Client({});
client.directions({
params: {
origin: origin,
destination: destination,
mode: 'driving',
key: process.env.GOOGLE_MAPS_API_KEY
// Any other params here
},
timeout: 1000, // milliseconds
})
.then(response => {
console.info(response, 'route response');
})
Это должно сработать. Если это не так, поделитесь дополнительной информацией об отладке.