🎼个人主页:【Y小夜】

😎作者简介:一位双非学校的大三学生,编程爱好者,

专注于基础和实战分享,欢迎私信咨询!

🎆入门专栏:🎇【MySQL,Java基础,Rust】

🎈热门专栏:🎊【Python,Javaweb,Springboot】 

感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️

目录

账户注册

文件配置

代码开发

优势


账户注册

首先登入百度地图开发者平台

百度地图-百万开发者首选的地图服务商,提供专属的行业解决方案

分别点击,应用管理——》我的应用——》创建应用

应用类型应该选择服务端

白名单记得要填,不然会不允许通过

可以暂时先填 0.0.0.0/0

文件配置

application.yml配置外卖商家店铺地址和百度地图的AK:

代码开发

改造OrderServiceImpl,注入上面的值

    @Value("${sky.shop.address}")
    private String shopAddress;

    @Value("${sky.baidu.ak}")
    private String ak;

 编写校验方法

/**
     * 检查客户的收货地址是否超出配送范围
     * @param address
     */
    private void checkOutOfRange(String address) {
        Map map = new HashMap();
        map.put("address",shopAddress);
        map.put("output","json");
        map.put("ak",ak);

        //获取店铺的经纬度坐标
        String shopCoordinate = HttpClientUtil.doGet("https://api.map.baidu.com/geocoding/v3", map);

        JSONObject jsonObject = JSON.parseObject(shopCoordinate);
        if(!jsonObject.getString("status").equals("0")){
            throw new OrderBusinessException("店铺地址解析失败");
        }

        //数据解析
        JSONObject location = jsonObject.getJSONObject("result").getJSONObject("location");
        String lat = location.getString("lat");
        String lng = location.getString("lng");
        //店铺经纬度坐标
        String shopLngLat = lat + "," + lng;

        map.put("address",address);
        //获取用户收货地址的经纬度坐标
        String userCoordinate = HttpClientUtil.doGet("https://api.map.baidu.com/geocoding/v3", map);

        jsonObject = JSON.parseObject(userCoordinate);
        if(!jsonObject.getString("status").equals("0")){
            throw new OrderBusinessException("收货地址解析失败");
        }

        //数据解析
        location = jsonObject.getJSONObject("result").getJSONObject("location");
        lat = location.getString("lat");
        lng = location.getString("lng");
        //用户收货地址经纬度坐标
        String userLngLat = lat + "," + lng;

        map.put("origin",shopLngLat);
        map.put("destination",userLngLat);
        map.put("steps_info","0");

        //路线规划
        String json = HttpClientUtil.doGet("https://api.map.baidu.com/directionlite/v1/driving", map);

        jsonObject = JSON.parseObject(json);
        if(!jsonObject.getString("status").equals("0")){
            throw new OrderBusinessException("配送路线规划失败");
        }

        //数据解析
        JSONObject result = jsonObject.getJSONObject("result");
        JSONArray jsonArray = (JSONArray) result.get("routes");
        Integer distance = (Integer) ((JSONObject) jsonArray.get(0)).get("distance");

        if(distance > 5000){
            //配送距离超过5000米
            throw new OrderBusinessException("超出配送范围");
        }
    }

然后进行调用就可以了!

优势

  1. 提升用户体验

    • 丰富的地理位置服务:百度地图API提供了地图展示、地理位置查询、路径规划、地理编码等多种功能,这些功能可以极大地丰富Web应用的地理位置服务,提高用户体验。
    • 实时性与准确性:通过调用百度地图API,开发者可以实时获取用户的地理位置信息,包括经纬度、省份、城市等,这些信息准确且实时更新,有助于提供更精准的服务。
  2. 简化开发流程

    • 快速集成:SpringBoot作为一款快速开发框架,可以帮助开发人员快速构建Web应用,并集成百度地图API,从而实现地图展示、地理位置查询、路径规划等功能,简化了开发流程。
    • 统一响应类:在SpringBoot项目中,可以定义统一的响应类来封装API返回结果,使得代码更加清晰和简洁,便于维护和扩展。
  3. 提高开发效率

    • 减少重复劳动:通过调用百度地图API,开发者可以避免手动编写复杂的地理位置处理逻辑,减少了重复劳动,提高了开发效率。
    • 专注于业务逻辑:SpringBoot采用约定大于配置的原则,使得开发人员可以更加专注于业务逻辑的实现,而无需关注复杂的技术细节。
  4. 增强系统稳定性

    • 缓存技术:为了应对网络延迟和API调用频率限制等问题,可以采用缓存技术来存储常用的地理位置数据,从而提高系统的稳定性和性能。
    • 错误处理机制:在调用百度地图API时,可以设置合理的错误处理机制,当API调用失败或返回错误数据时,能够及时捕获并处理异常,确保系统的稳定运行。
  5. 促进技术创新与应用

    • 结合新技术:SpringBoot与百度地图API的结合,不仅可以实现基本的地理位置服务,还可以结合其他新技术(如人工智能、机器学习等)进行更高级的地理位置分析和处理,推动技术创新和应用的发展。
    • 拓展应用场景:基于百度地图开放平台的实现,可以拓展出更多应用场景,如物流跟踪、智能导航、位置推荐等,为开发者提供更多创新机会。

更多推荐