• 快递、外卖、网购自动定位及模糊检索收/发件地址功能实现


    概述

    目前快递、外卖、团购、网购等行业 :为了简化用户在收发件地址填写时的体验感,使用辅助定位及模糊地址检索来丰富用户的体验 本次demo分享给大家;让大家理解辅助定位及模糊地址检索的功能实现过程,以及开发出自己理想的作品

    详细

    概述:

        后台基于 SpringBoot+Fastjson+RestTemplate+BaiduMaP-Api

        前端基于 Html5+Jquery+Css+BaiduMap-SDK

        运行环境 Jdk1.8+Https

        Demo旨在帮助广大猿友们理解地址填写过程中辅助定位功能的实现

    实现过程:

    1、百度地图sdk 申请应用key(开发版本,免费)

        1.1、需要申请服务端和浏览器端两个key

    image.png

        1.2、服务端key需要的权限

       

    image.png

            1.3、浏览器端key需要权限

    image.png

    2、移动端构造地图Canvas 及调用定位sdk 获取经纬度

    1. <div id='allmap'></div>
    2. // 百度地图API功能 初始化
    3. var map = new BMapGL.Map("allmap");
    4. //初始化经纬度
    5. var lng =114.311581;
    6. var lat =30.598466;
    7. var city = "北京";
    8. map.centerAndZoom(new BMapGL.Point(lng, lat), 15); //地图级别1-21
    9. map.enableScrollWheelZoom(true);
    10. var geolocation = new BMapGL.Geolocation();
    11. geolocation.enableSDKLocation();

    3、调后台经纬度解析附近地址接口

    1. var getLocationsByLngLat = function (lng, lat) {
    2. $.ajax({
    3. url: "/resolve/getLocationsByLngLat/" + lng + "/" + lat ,
    4. type: "get",
    5. dataType: "json",
    6. success: function (res) {
    7. console.log(res)
    8. debugger;
    9. if(res != null && res.results != null){
    10. city = res.results[0].city;
    11. }
    12. extracted(res);
    13. }
    14. });
    15. }

    4、调用后台地址检索接口

    1. //地址检索
    2. var getLocationsBySpace = function (space, city) {
    3. $.ajax({
    4. url: "/resolve/getLocationsByLngLat/" + lng + "/" + lat + "/" + space + "/" + city,
    5. type: "get",
    6. dataType: "json",
    7. success: function (res) {
    8. console.log(res)
    9. debugger;
    10. extracted(res);
    11. }
    12. });
    13. }

    5、样式实现css

    1. ul {
    2. padding-left: 5px;
    3. border-bottom: 0.5px #CDC9C9 solid;
    4. padding-bottom: 3px;
    5. }
    6. li {
    7. list-style: none;
    8. }
    9. ul span {
    10. display: inline-block;
    11. float: right;
    12. position: relative;
    13. right: 10px;
    14. bottom: 22px;
    15. }

    6、服务端常量配置

    1. String = ;
    2. String = ;
    3. String = ;
    4. String = ;

    7、RestTemplate get请求封装

    1. JSON get(String uri,Map<String,Object> params){
    2.     (params.isEmpty()){
    3.         ;
    4.     }
    5.     StringBuilder sb = StringBuilder();
    6.     sb.append(uri);
    7.     sb.append();
    8.     (String key: params.keySet()){
    9.         sb.append(key);
    10.         sb.append();
    11.         sb.append(params.get(key));
    12.         sb.append();
    13.     }
    14.     .debug(,sb.toString());
    15.     ResponseEntity<String> res = .getForEntity(sb.toString(),String.);
    16.     JSON json = JSON.(res.getBody());
    17.    json;
    18. }

    8、两个点(经纬度)之间距离计算

    1. String range(lon1, lat1, lon2, lat2) {
    2.     distance = mathDistance(lon1, lat1, lon2, lat2); System..println(distance);
    3.     range=;
    4.     (distance > ) {
    5.         range = () Math.(distance / ); }
    6.     (range>&& range <){
    7.         range+; }(range>=){
    8.         ()Math.(range / )+; }{
    9.         +;
    10.     }
    11. }

     

    9、restfull 风格接口

     

    1. ()
    2. JSON getLocationsByLngLat(lng, lat) {
    3.     Map<StringObject> params = generateLngLat(lng, lat);
    4.     JSONObject res = ;
    5.     {
    6.         res = (JSONObject) .get(ParamsConstants., params);
    7.         JSONArray results = res.getJSONArray();
    8.         JSONArray results1 = JSONArray();
    9.         (results.size() > ) {
    10.             (i = ; i < results.size(); i++) {
    11.                 JSONObject result = generateResult(lng, lat, results, i);
    12.                 results1.add(result);
    13.             }
    14.         }
    15.         res.put(,results1);
    16.     } (Exception e) {
    17.         .info(+ e.getMessage());
    18.     }
    19.     res;
    20. }

    项目结构:

    image.png

  • 相关阅读:
    消息中间件---RabbitMQ
    js对象相关操作
    Redis的最佳实践?看完不心动,算我输!!
    Eclipse WEB项目在IDEA中使用
    12.整数转罗马数字
    LNMP创建论坛
    dpdk 多进程模型对 pmd 驱动实现的要求
    信号系统之连续信号处理
    智云通CRM:做销售一定要慎说六种话,不然快成交的订单也会跑?
    Scrum Master证书(CSM)题目总结!
  • 原文地址:https://blog.csdn.net/hanjiepo/article/details/132955752