Google Places API提供radarSearch method,可接受单一类型和区域约束。区域约束可以是latlng / radius对或latlng bounds ...
var request = {
location: latlng, // where latlng is a google.maps.LatLng
radius: 2000, // meters
type: placeType // e.g. 'restaurant' or 'gas_station', etc.
}
或
var request = {
bounds: latlngbounds, // google.maps.LatLngBounds
type: placeType // e.g. 'restaurant' or 'gas_station', etc.
}
具有上述任一请求的radarSearch将返回最多200个匹配位置。如果搜索实际匹配500个位置,则响应中仅包含500个位置中的200个位置。似乎没有明显的方法来影响返回200个位置。初步测试显示它是随机的,但可能偏向于返回离中心最远的地方。
问题是......我只对最近的 100个地方感兴趣。有没有一种支持的方法来排序500个匹配的地方并返回前200个?我尝试过使用'rankBy'属性,但它似乎被忽略了......
var request = {
bounds: latlngbounds, // google.maps.LatLngBounds
type: placeType // e.g. 'restaurant' or 'gas_station', etc.
rankby: google.maps.places.RankBy.DISTANCE,
}
确保正确响应的唯一方法是使用小区域进行初始搜索,并连续增加界限并重新搜索,直到我获得至少100个位置,但不超过200个位置。然后我可以在JS中排序并切片到100以获得我最近的100个位置。是否有更高效的算法来获得相同的结果?
Google最近弃用了'types'属性,其中可以指定多个匹配类型的数组。目前,仅支持'type'属性,其中只能指定单个搜索类型。我需要支持一些地方类型,现在必须对每个地点类型进行单独搜索并合并。此更改会显着影响我的应用程序的性能。使用上述方法,对于少数地点类型,需要1-3秒,对于每种地点类型,需要20-30秒才能进行单独搜索。
有没有更好的方法来获得最近的100'酒吧','餐馆'或'咖啡馆'?随着Google的改变,现在需要花费10倍的时间来获得结果。
欣赏任何想法!
答案 0 :(得分:0)
在没有进一步指导的情况下,我能够实施以下解决方案......
结果非常好。冷启动5-6秒,暖启动(使用缓存半径值)300-600ms。缓存还用于应用程序会话中的重复雷达搜索。这是一个比预期更好的结果,虽然是重构的投资。
祝所有阅读此内容的访客好运。希望这个额外的后续工作是有帮助的。