У меня есть облачная функция, которая делает запрос к API карты Google, чтобы получить информацию о местоположении геокода с latlng. когда я делаю запрос, он показывает эту ошибку в журналах ReferenceError: google is not defined at /user_code/lib/file_name
Я не знаю, в чем причина этого, и я добавил типизированный пакет в файл package.json.
package.json
{
"name": "functions",
"scripts": {
"lint": "tslint --project tsconfig.json",
"build": "tsc",
"serve": "npm run build && firebase serve --only functions",
"shell": "npm run build && firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"main": "lib/index.js",
"dependencies": {
"@google/maps": "^0.4.6",
"@types/googlemaps": "^3.30.10",
"firebase-admin": "^5.12.1",
"firebase-functions": "^1.0.4",
"nodemailer": "^4.6.4",
"twilio": "^3.16.0"
},
"devDependencies": {
"tslint": "^5.10.0",
"typescript": "^2.9.2"
},
"private": true
}
Функция загрузки информации о местоположении
async function getAddressFromLatAndLang(location) {
const maps = require('@google/maps')
const googleMapsClient = maps.createClient({
key: 'API_KEY',
Promise: Promise
});
const latlng = new google.maps.LatLng(location.latitude, location.longitude)
const result = await googleMapsClient.geocode({ latlng: latlng }).asPromise()
console.info(result)
}
Да и я добавил это
тогда, возможно, вы могли бы попробовать определить константу карт выше функции getAddressFromLatAndLang в основном. Динамический импорт / требование может не поддерживаться.
как этот const maps = google.maps?
const maps = require('@google/maps') выше в глобальной функции перед getAddressFromLatAndLang.
Проблема не в этом, проблема в new google.maps.LatLng не может найти Google во время выполнения
Я понимаю, но вы пытаетесь потребовать модуль во время выполнения ... если проблема не в этом, дождитесь его правильной инициализации
Хорошо, я добавил его как импорт в файл, и он работает, но у меня все еще есть ошибка Google !!
дама ошибка? как ты узнал, что это сработало?
Извините, я редактирую комментарий, проверьте его. Хорошо, я добавил его, как вы сказали const над функцией, и он работает, но у меня все еще есть ошибка Google !!
та же ошибка, что и раньше?
Да, я получаю ту же ошибку во время выполнения. проблема с @ types / googlemaps, но я не мог знать, что не так






Вы пытаетесь использовать Клиентская библиотека NodeJs для веб-сервисов Google Maps.
Обратите внимание, что объект google.maps.LatLng не определен в библиотеке NodeJs, этот объект определен в Google Maps JavaScript API v3, который вы можете использовать на стороне клиента. В клиентской библиотеке NodeJs согласно документации github вы можете использовать следующие объекты как пару LatLng
A latitude, longitude pair. The API methods accept either:
- a two-item array of [latitude, longitude];
- a comma-separated string;
- an object with 'lat', 'lng' properties; or
- an object with 'latitude', 'longitude' properties.
источник: https://googlemaps.github.io/google-maps-services-js/docs/LatLng.html
Поскольку location в вашей функции имеет свойства latitude и longitude, вы можете использовать его непосредственно в
const result = await googleMapsClient.reverseGeocode({ latlng: location }).asPromise()
Обратите внимание, что для преобразования координат в адрес вы должны использовать метод reverseGeocode(). Метод geocode() служит для преобразования адресной строки в координаты.
Надеюсь, это поможет!
Спасибо за вашу помощь, которую я сделал, это пытается определить местоположение и решение для массива, но дает invalidValueError: unexpected property "latlng" at Object.validator, я не знаю, почему @xomen
Я также пробую строку с разделителем, покажите мне ту же ошибку
О, я этого не заметил, но вы должны использовать метод .reverseGeocode() для определения широты и долготы. Я обновил свой ответ. Пожалуйста, ознакомьтесь с этим методом в документации: googlemaps.github.io/google-maps-services-js/docs/…
Но вот вопрос, почему новый google.map.LatLng не работает, и я добавил пакет типов?
Потому что google.map.LatLng не является частью включенного вами пакета. google.map.LatLng определен на стороне клиента Google Maps JavaScript API, но вы используете другую библиотеку NodeJs на стороне сервера, в которой нет этого класса.
Я понимаю. в любом случае спасибо за вашу помощь, вы спасли мне день
есть ли пакет google / maps npm? не могли бы вы направить меня к URL-адресу, чтобы проверить это?