基于 高德 + Windvane 的H5选址工具,纵享丝滑,对高德选址组件说:走你

3,701 阅读5分钟

一、背景

1.1 需求

**多个产品和业务方反应:**高德的选址组件不好用,跟demo一样,能不能换一个?

秉承着,作为一名即将优秀的程序员不能 Say NO 的原则,我接了下来

1.2 现有方案缺失

于是我查看了菜鸟可能涉及选址的多个App,发现基本还是使用的高德选址组件。

个别的项目里有简单的选址功能,无法满足业务需求,且耦合性太强无法通用 (如果已经有了,那可能是我没找到 勿怪)

二、业务中分析痛点

对于一般业务需求这个选址还是没毛病的 以下只针对特殊业务需求,对高德选址组件的客观分析

  • 1.由于使用的是1.3版本,每次拖动加载会留白
  • 2.业务可能处在乡村,高德获取周边无法显示想要的位置供选择
  • 3.选某一中周边后,用户无感知就回退了
  • 4.样式是真的有一丢丢小丑,leader说像个demo
  • 5.高德的H5自动定位加载慢
  • 6.选址手段单一,必须选址周边才能返回数据,偏差大
  • 7.头部默认自带的返回箭头也是产品业务的吐槽点
  • 8.部分拖拽的周边信息不完善,返回参数太少

三、技术方案

这一版目前优先支持端上 openPage 跨页面选址

3.1 依旧基于高德进行封装,完善上面对于业务中存在的问题

  • 高德版本选择的最新的2.0版本
  • 接口都采用web服务Api
  • Inputtips 接口用于输入查询
  • Geo 接口用于地址解析
  • Around 接口用于获取周边,使用 v5 2.0的接口
  • Regeo 接口用于坐标解析
  • AMap.Geolocation + Windvane 兜底定位
  • AMap.Marker 自定义标签
  • 选址完成通信问题待定多方案
  • 所有接口做埋点 接入Arms做监控

3.2 优先考虑多个App的支持,Windvane bridge 做统一收口

  • exitPage 统一退出当前容器
  • getLocation 获取经纬度
  • nativePostMsgToJs 触发一个返回的事件并传参

四、针对问题 - 实现过程

4.1 由于使用的是1.3版本,每次拖动加载会留白

果断使用的最新的2.0的版本,自带预加载,拖拽起来更丝滑

4.2 由于业务可能处在乡村,高德获取周边无法显示想要的位置供选择

针对这个情况,拖拽时候动态解析当前坐标点地理位置信息,并插入到周边数据中且为选中状态

4.3 选某一中周边后,用户无感知就回退了

针对这情况,底部给了确认按钮,所有操作结束确认后返回信息

4.4 样式是真的有一丢丢小丑,leader说像个demo

这也是决定自己写一套的重要原因,并请UED帮设计界面

4.5 高德的H5自动定位加载慢

在乡村弱网情况,高德H5定位比较慢,回到当前位置加载也慢。 这边借助端上能力,做了GPS定位 转成火星坐标(解决部分安卓不准问题),GPS定位异常时,用了高德PC定位用来做了兜底

4.6 选址手段单一,必须选址周边才能返回数据,偏差大

针对单一的选址,我这边提供了4中选址操作,支持了不同业务方需求

    1. 顶部搜索直接定位
    1. 选择周边定位
    1. 返回当前位置定位
    1. 拖拽任意位置定位

4.7 头部默认自带的返回箭头也是产品业务的吐槽点

高德的回退只是针对搜索的回退,与用户预期不一致,与顶部回退有歧义,果断避免

4.8 部分拖拽的周边信息不完善,返回参数太少

高德返回的 location address name ,这满足不了现在的需求。 部分周边的数据存在缺失情况,针对这种情况,单独用坐标进行了解析,并把缺失的数据补全

五、体验优化

5.1 顶部 inputtips 查询的部分地理信息,不在底部周边around接口信息里

产生原因: 由于周边接口默认只显示的写字楼、学校、小区,且只有前三个参数生效,针对顶部详细的搜索,不在三个类型内的周边就不会显示

解决方案:

  • 针对顶部搜索和拖拽确定的位置,先进行坐标解析,和周边获取
  • 去周边里查是否有这个位置,存在就默认选中
  • 周边里不存在的位置,将解析的数据添加到周边的数据顶部,且默认选中

这样就保证了,用户通过各种操作定位的点都有一个选中地理信息,让用户感知并做调整

5.2 回到当前位置优化 + 兜底

  • 考虑到用户群体可能年纪偏大,并不都知道这个按钮作用,直接用文字按钮显示
  • 优先使用bridge 对当前定位,bridge失效时,使用高德的PC定位(测试中发现PC比H5响应速度更快)

虽然只是按钮变成文字按钮,无疑也是对用户体验细致考虑 bridge 与 高德定位的并用,也是对异常情况的兜底考虑

六、第一版 效果

由于目前需求方都是在App上,第一版主要针对端上做支撑

支持传入参数:

返回的参数:

七、后期完善计划

7.1. 提供多套主题样式

7.2. 页面功能可自定义选择

7.3. 支持原生H5

已支持,提供了一个完整的demo,觉得不错的来点 star 呗

GitHub地址: https://github.com/babybrotherzb

7.4. 支持PC端选址

八、扫码体验 不限App

目前已经支持对外接入,第一版仅限App端

九、最新GitHub源码共享

应广大社区同学要求,最近理了一份纯H5版本的源码,样式可自行更改。

有问题的同学可以留言。

GitHub地址: https://github.com/babybrotherzb

demo 效果如下,map-site ,觉得不错的来点 star 呗

image.png