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

发布时间:2022-02-16
技术:SpringBoot+Fastjson+RestTemplate+Https+BaiduMap-SDK+Html5+Jquery+Css

概述

目前快递、外卖、团购、网购等行业 :为了简化用户在收发件地址填写时的体验感,使用辅助定位及模糊地址检索来丰富用户的体验 本次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 获取经纬度

<script type="text/javascript"
       src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=你的key"></script>
<div id='allmap'></div>

// 百度地图API功能 初始化
var map = new BMapGL.Map("allmap");
//初始化经纬度
var lng =114.311581;
var lat =30.598466;
var city = "北京";
map.centerAndZoom(new BMapGL.Point(lng, lat), 15); //地图级别1-21
map.enableScrollWheelZoom(true);
var geolocation = new BMapGL.Geolocation();
geolocation.enableSDKLocation();

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

var getLocationsByLngLat = function (lng, lat) {

    $.ajax({
        url: "/resolve/getLocationsByLngLat/" + lng + "/" + lat ,
        type: "get",
        dataType: "json",
        success: function (res) {
            console.log(res)
            debugger;
            if(res != null && res.results != null){
                city = res.results[0].city;

            }
            extracted(res);
        }

    });
}

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

//地址检索
var getLocationsBySpace = function (space, city) {

    $.ajax({
        url: "/resolve/getLocationsByLngLat/" + lng + "/" + lat + "/" + space + "/" + city,
        type: "get",
        dataType: "json",
        success: function (res) {
            console.log(res)
            debugger;
            extracted(res);
        }
    });
}

5、样式实现css

ul {
    padding-left: 5px;
    border-bottom: 0.5px #CDC9C9 solid;
    padding-bottom: 3px;
}

li {
    list-style: none;

}

ul span {
    display: inline-block;
    float: right;
    position: relative;
    right: 10px;
    bottom: 22px;
}


6、服务端常量配置

String = ;

String = ;

String = ;

String = ;


7、RestTemplate get请求封装

JSON get(String uri,Map<String,Object> params){

    (params.isEmpty()){
        ;
    }
    StringBuilder sb = StringBuilder();
    sb.append(uri);
    sb.append();
    (String key: params.keySet()){
        sb.append(key);
        sb.append();
        sb.append(params.get(key));
        sb.append();
    }
    .debug(,sb.toString());

    ResponseEntity<String> res = .getForEntity(sb.toString(),String.);
    JSON json = JSON.(res.getBody());
   json;

}


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


String range(lon1, lat1, lon2, lat2) {
    distance = mathDistance(lon1, lat1, lon2, lat2); System..println(distance);
    range=;
    (distance > ) {
        range = () Math.(distance / ); }
    (range>&& range <){
        range+; }(range>=){
        ()Math.(range / )+; }{
        +;
    }

}

9、restfull 风格接口

()
JSON getLocationsByLngLat(lng, lat) {
    Map<String, Object> params = generateLngLat(lng, lat);
    JSONObject res = ;
    {
        res = (JSONObject) .get(ParamsConstants., params);

        JSONArray results = res.getJSONArray();
        JSONArray results1 = JSONArray();
        (results.size() > ) {
            (i = ; i < results.size(); i++) {
                JSONObject result = generateResult(lng, lat, results, i);
                results1.add(result);
            }
        }

        res.put(,results1);


    } (Exception e) {
        .info(+ e.getMessage());
    }

    res;
}


项目结构:

image.png







本实例支付的费用只是购买源码的费用,如有疑问欢迎在文末留言交流,如需作者在线代码指导、定制等,在作者开启付费服务后,可以点击“购买服务”进行实时联系,请知悉,谢谢
手机上随时阅读、收藏该文章 ?请扫下方二维码