是否支持携带多个圆形/边界框位置过滤器的autosuggest请求及实现方法
多位置过滤器Autosuggest请求的可行性说明
你示例中直接把多组圆形/边界框过滤参数用分号拼接、甚至带换行传入in参数的写法,无法被原生Autosuggest接口直接识别,但完全可以通过自定义逻辑实现多范围过滤的同等效果。
原生接口的固有逻辑限制
- 通用Autosuggest服务的
in参数默认设计为单值入参,仅支持传入单个圆形范围、单个边界框范围,或是单个预定义的命名过滤区域。 - 原生参数解析逻辑会把你拼接的整串分号、换行字符识别为单个非法参数值,直接返回参数校验失败,不会自动拆分识别多组范围。
可落地的实现方式
1. 后端代理封装实现
这是性能和体验最优的实现方案,不需要改动前端的参数传递习惯:
- 前端可以完全按照你示例的格式传值:既可以把多组圆形的经纬度、半径用分号拼接塞到
in参数里,也可以直接传预定义的命名圆标识,比如ONE-CIRCLE;ANOTHER-CIRCLE - 后端服务接收到请求后,先清洗参数里的换行、多余空白字符,再按分号把整串值拆分为独立的单组过滤单元,比如将
59.33563802356494,18.067049995800794;r=15000;82.35453453543,17.456456456;r=15000拆成两个独立的圆形过滤参数 - 如果是命名类的过滤器,后端提前维护好命名标识到实际坐标、范围半径的映射表,拆分标识后解析为真实的过滤范围
- 后端携带每个单组范围单独调用底层Autosuggest接口,收集所有接口的返回结果,按地点唯一ID去重、按照关键词匹配度排序后,再统一返回给前端
- 边界框多过滤器的实现逻辑和圆形完全一致,拆分多组边界框坐标后逐次调用接口合并结果即可
2. 前端并行请求实现
如果没有可控的后端服务,纯前端也可以实现同等效果:
- 前端先把需要用到的多个过滤范围拆分为独立的单值参数,在用户输入触发自动补全时,并行发起多个单范围的Autosuggest请求
- 前端本地收集所有请求的返回结果,按地点唯一ID去重、按照关键词匹配度排序后,渲染到自动补全的下拉列表
- 实现时要做好请求节流和取消逻辑,避免用户输入变动时累积大量冗余请求,拖慢页面响应速度
注意事项
- 禁止直接将未拆分的多值参数直接发给原生Autosuggest接口,所有多范围解析逻辑必须在服务端或前端中间层完成
- 合并多范围返回结果时,要做好重复值过滤,避免同一个地点在下拉列表中重复展示
内容的提问来源于stack exchange,提问作者Niklas Sundberg
相关产品推荐
相关产品推荐

