Java后端如何实现调用百度地图判断配送地址是否超过范围

项目场景:

项目场景:在外卖类程序中计算配送距离是否超出范围(5000米)


百度地图开放平台

这里需要先注册成为百度地图的开发人员百度地图开放平台 | 百度地图API SDK | 地图开发 (baidu.com)https://lbsyun.baidu.com/进入控制台,创建自己的第一个应用程序(应用类别为服务端),获取AK(这个AK需要保存,一会儿会用到)

Java后端如何实现调用百度地图判断配送地址是否超过范围_第1张图片

 实现本功能用到了两个百度地图提供的Api

(逆地理编码 gc | 百度地图API SDK )

(webapi | 百度地图API SDK )

Java后端代码开发

1、在配置文件中添加地址信息

你的项目名称: 
  shop:
    address: 你的店铺地址
  baidu:
    ak: 刚才复制的AK

2、在实现类中注入刚才在配置类中定义的属性值

@Value("${你的项目名称.shop.address}")
    private String shopAddress;

    @Value("${你的项目名称.baidu.ak}")
    private String ak;

3、编写校验的方法(*)

/**
     * 检查客户的收货地址是否超出配送范围
     * @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("超出配送范围");
        }
    }

最后直接调用该方法就可以了

 checkOutOfRange("下单地址详细信息");

你可能感兴趣的:(java,开发语言,android)