当前位置:   article > 正文

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

收件地址地图定位选择接口

概述

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/290441
推荐阅读
相关标签
  

闽ICP备14008679号