如何在新版Nearby Search中设置FieldMask及相关技术问题
Google Places V1 Nearby Search 相关问题解答
问题1:如何使用v1.PlacesClient的searchNearby方法设置FieldMask?
FieldMask需要通过请求头X-Goog-FieldMask指定,直接在requestOptions的headers中配置即可,按需选择需要返回的字段。修改你的代码示例如下:
const requestOptions = { timeout: 1000, headers: { // 按需指定要返回的字段,多个字段用逗号分隔 'X-Goog-FieldMask': 'places.displayName,places.formattedAddress,places.location,places.rating' } } const placesNearbyResponse = await placesClient.searchNearby(requestParams, requestOptions);
如果多个请求需要统一的FieldMask,也可以在实例化PlacesClient时全局设置,但更推荐按需配置,适配不同请求的字段需求。
另外注意你原代码里的一个错误:radius应该属于circle对象的属性,而不是和circle同级,否则请求会失效,已在后续完整代码中修正。
问题2:是否可以使用@googlemaps/google-maps-services-js替代v1.PlacesClient?尝试使用该库时,它始终调用旧版Nearby Search。
不行。@googlemaps/google-maps-services-js目前主要封装的是旧版Places Web Service接口,没有对新版Places V1 API提供支持,所以默认只会调用旧版Nearby Search。如果要使用新版接口,必须用你当前正在用的@googlemaps/places包(即v1.PlacesClient),这是官方针对新版Places V1推出的专属客户端。
问题3:v1.PlacesClient是否适用于后端/服务器端应用,还是仅适用于前端应用?
v1.PlacesClient完全支持后端/服务器端应用。它基于gRPC实现,适配Node.js环境,在服务器端使用时:
- 可以妥善保管API密钥,避免暴露到前端
- 不受浏览器跨域限制,能灵活处理复杂的请求逻辑
- 适合批量请求、数据预处理等后端场景
修正后的完整代码片段
// 导入Places库 import places from '@googlemaps/places'; // 实例化客户端 const placesClient = new places.v1.PlacesClient({ apiKey: process.env.GOOGLE_MAPS_API_KEY! }); const requestParams = { locationRestriction: { circle: { center: { latitude: 48.1351253, longitude: 11.5819806, }, radius: 3000, // 修正:radius归属到circle对象内 }, }, includedTypes: ['restaurant'], // 限制结果为指定类型的地点 language: 'en', // 指定响应语言 maxResultCount: 20, // 返回的最大结果数 }; // 添加FieldMask请求头 const requestOptions = { timeout: 1000, headers: { 'X-Goog-FieldMask': 'places.displayName,places.formattedAddress,places.location,places.rating' } } const placesNearbyResponse = await placesClient.searchNearby(requestParams, requestOptions);
内容的提问来源于stack exchange,提问作者Nir
相关产品推荐
相关产品推荐

