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

本文介绍了如何在快递、外卖等行业中通过SpringBoot、Fastjson等技术,配合BaiduMapSDK实现辅助定位和模糊地址检索功能,包括后台接口、前端调用、地图初始化和经纬度处理等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西安未央

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值