Ionic 3中如何按营业时间/评分筛选谷歌Places餐厅?
关于Google Places餐厅筛选的问题解答
嘿,我来帮你搞定这两个Google Places筛选的问题!
问题1:是否有办法按营业时间筛选谷歌地图(Google Places)中的餐厅?
当然可以!Google Places API提供了直接的参数支持筛选当前正在营业的餐厅,另外如果需要更精细的营业时间筛选(比如特定日期/时段),可以通过获取场所详情后自行处理:
- 快速筛选当前营业:使用
open_now布尔参数,在搜索请求中设置为true,API会直接返回当前正在营业的场所。 - 精细时段筛选:如果要筛选“周一11点-13点营业”这类特定时段的餐厅,需要先通过
getDetails接口获取每个场所的opening_hours详情(包含weekday_text或periods字段),然后自己编写逻辑判断是否符合你的时段要求。
问题2:在Ionic 3中,是否有办法通过营业时间(筛选当前营业open_now)或评分来筛选谷歌Places中的餐厅?
完全可以!结合你提供的代码片段,我帮你修改一下,实现这两个筛选功能:
1. 筛选当前营业的餐厅(open_now)
直接在你的request对象中添加open_now: true参数即可,API会自动帮你过滤:
getTypes(latLng) { let loading = this.loadingCtrl.create({ content: 'Procurando...' }); loading.present(); var service = new google.maps.places.PlacesService(this.map); let request = { location: latLng, radius: this.isKM, type: [this.item], open_now: true // 新增:筛选当前正在营业的餐厅 }; return new Promise((resolve, reject) => { service.nearbySearch(request, function (results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { loading.dismiss(); resolve(results); } else { loading.dismiss(); reject(status); } }); }); }
2. 按评分筛选餐厅
Google Places的nearbySearch接口没有直接的评分阈值筛选参数,但我们可以在获取结果后,用数组的filter方法自行过滤出符合评分要求的餐厅(比如只保留评分≥4.0的):
getTypes(latLng) { let loading = this.loadingCtrl.create({ content: 'Procurando...' }); loading.present(); var service = new google.maps.places.PlacesService(this.map); let request = { location: latLng, radius: this.isKM, type: [this.item], open_now: true // 可选:同时保留当前营业筛选 }; return new Promise((resolve, reject) => { service.nearbySearch(request, function (results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { // 过滤出评分≥4.0的餐厅,同时排除没有评分的场所 const filteredByRating = results.filter(place => place.rating && place.rating >= 4.0); loading.dismiss(); resolve(filteredByRating); } else { loading.dismiss(); reject(status); } }); }); }
额外提示
- 注意部分餐厅可能没有公开评分,所以过滤时要先判断
place.rating是否存在,避免出现undefined报错。 - 如果需要按评分排序,可以在
request中添加rankby: 'rating'(注意使用rankby时不能同时设置radius,需要改用location结合rankby),这样结果会按评分从高到低排列。
内容的提问来源于stack exchange,提问作者João Mello
相关产品推荐
相关产品推荐

