我有一个云功能,该功能向Google Map API发出请求以从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.log(result)
}
答案 0 :(得分:1)
您尝试将NodeJs client library用于Google Maps Web服务。
请注意,google.maps.LatLng
对象未在NodeJs库中定义,该对象在Google Maps JavaScript API v3中定义,您可以在客户端使用它。在根据github文档的NodeJs客户端库中,您可以将以下对象用作LatLng对
经度和纬度对。 API方法接受以下任一方法:
- [纬度,经度]的两个项目的数组;
- 用逗号分隔的字符串;
- 具有'lat','lng'属性的对象;或
- 具有“纬度”,“经度”属性的对象。
来源:https://googlemaps.github.io/google-maps-services-js/docs/LatLng.html
由于函数中的location
具有属性latitude
和longitude
,您可以直接在
const result = await googleMapsClient.reverseGeocode({ latlng: location }).asPromise()
请注意,要解析坐标以进行寻址,必须使用reverseGeocode()
方法。 geocode()
方法用于将地址字符串解析为坐标。
我希望这会有所帮助!