首页 > 编程语言 >java使用百度地图接口校验收货地址是否超出配送范围

java使用百度地图接口校验收货地址是否超出配送范围

时间:2024-06-03 21:01:33浏览次数:13  
标签:map java 收货 jsonObject 校验 location lat lng result

1.地理编码

API服务地址:

https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation

        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);
        //接收并解析来自 API 的响应,将其转换为 JSON 对象。        
        JSONObject jsonObject = JSON.parseObject(shopCoordinate);
        //检查响应中的 status 字段是否为 "0"。如果不是 "0",则表示地理编码失败,抛出一个 OrderBusinessException 异常,异常信息为 "店铺地址解析失败"。
        if(!jsonObject.getString("status").equals("0")){
            throw new OrderBusinessException("店铺地址解析失败");
        }

2.数据解析

        //它从 JSON 对象中获取名为 "result" 的子对象,然后再从 "result" 对象中获取名为 "location" 的子对象。这个 "location" 对象包含了地理编码结果中的经纬度信息。
        JSONObject location = jsonObject.getJSONObject("result").getJSONObject("location");
        //分别从 "location" 对象中获取名为 "lat" 和 "lng" 的字段值,这些字段分别代表了纬度和经度的值。
        String lat = location.getString("lat");
        String lng = location.getString("lng");

3.店铺经纬度坐标

        String shopLngLat = lat + "," + lng;
        //将收货地址添加到map中
        map.put("address",address);

4.获取用户收货地址的经纬度坐标

        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;

5.驾车路线规划

API服务地址:

https://api.map.baidu.com/direction/v2/driving?origin=40.01116,116.339303&destination=39.936404,116.452562&ak=您的AK

 

        String json = HttpClientUtil.doGet("https://api.map.baidu.com/directionlite/v2/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("超出配送范围");
        }
{
  "status": 0,
  "message": "ok",
  "result_type": "poi_type",
  "results": [
    {
      "name": "中国工商银行24小时自助银行(北京府学路支行)",
      "location": {
        "lat": 40.227332,
        "lng": 116.263379
      },
      "address": "北京市昌平区府学路福地家园7号楼07号1-2层",
      "province": "北京市",
      "city": "北京市",
      "area": "昌平区",
      "street_id": "22e11407287926b4d5b74e09",
      "detail": 1,
      "uid": "22e11407287926b4d5b74e09"
    },
  ]
}
{
  "status": 0,
  "message": "成功",
  "type": 2,
  "result": {
    "restriction": "",
    "total": 1,
    "navi_restype": 0,
    "session_id": "{\"codr\":\"202406036204704S907X587TD2005SE0|0_40.00547995022,116.33267814409_39.930670852142,116.44599163213_6\",\"loc\":\"nj\"}@668",
    "routes": [
      {
        "origin": {
          "lng": 116.339966,
          "lat": 40.011176
        },
        "destination": {
          "lng": 116.452349,
          "lat": 39.936597
        },
        "tag": "拥堵少",
        "mrsl": "\"g\":\"14_1\",\"p\":\"1\",\"label\":\"8\",\"s\":\"0\",\"seq\":\"0\"",
        "route_md5": "c2dd1791b0b0f5034997b24c29838c71",
        "traffic_light": 14,
        "distance": 17847,
        "duration": 1869,
        "taxi_fee": 52,
        "has_guidance": false,
        "steps": [
          {
            "leg_index": 0,
            "link_num": 1,
            "road_name": "无名路",
            "direction": 0,
            "distance": 136,
            "duration": 28,
            "road_type": 6,
            "toll": 0,
            "toll_distance": 0,
            "adcodes": "110000",
            "traffic_condition": [
              {
                "status": 0,
                "geo_cnt": 1,
                "distance": 137.02
              }
            ],
            "path": "116.339966,40.011176;116.339905,40.012407",
            "start_location": {
              "lng": 116.339966,
              "lat": 40.011176
            },
            "end_location": {
              "lng": 116.339905,
              "lat": 40.012407
            }
          },
       ]
}

标签:map,java,收货,jsonObject,校验,location,lat,lng,result
From: https://blog.csdn.net/qq_42435861/article/details/139423695

相关文章

  • 关于java类型转换题目
    publicclasstest2{publicstaticvoidmain(String[]args){System.out.println(zh(123));df();ca();longToInt();ByteToShort();booleanToString();conversion();FloatToDouble();IntToCha......
  • java 线程池 Executors原生三大方法
    packagecom.chen.pool;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassTest1{publicstaticvoidmain(String[]args){//平时我们创建一些类使用工具类操作s//总数可以管理//线程池Executors原生三大方法......
  • 【精品毕设】基于JavaEE的线上考试系统设计实现(包含源码和论文)
    摘 要随着计算机技术的迅猛发展,学校教学和管理的信息化发展也有长足的进步,这就要求各个环节都均衡发展,从软硬件双方面把学校建设成一流的信息管理、教育教学的平台。本文设计开发的考试管理系统也是其中重要的一个方面。该系统本着减轻教师工作负担、提高工作效率、优化学生......
  • java毕业设计之网上书城系统(ssm项目源码+LW+PPT)
    1项目介绍本系统主要包括管理员和用户;主要包括:个人中心、用户管理、图书类型管理、热卖图书管理、管理员管理、系统管理、订单管理等功能的管理系统。2、项目技术项目后端框架:Java+ssm项目前端框架:vue2,ssm3、开发环境ssm+vue环境说明:环境说明:开发语言:java框架:ssm......
  • java毕业设计之校园旧书交易交换平台(ssm项目源码+LW+PPT)
    1项目介绍本系统主要包括以下功能模块:主页、个人中心、学生管理、发布人管理、书籍分类管理、书籍信息管理、交易信息管理、交换信息管理、系统管理等模块,通过这些模块的实现能够基本满足日常校园旧书交易交换的操作。2、项目技术项目后端框架:Java+ssm项目前端框架:vue......
  • java毕业设计之影院管理系统(ssm项目源码+LW+PPT)
    1项目介绍本系统主要针对管理员和用户角色,主要包括:个人中心,电影信息管理,电影类型管理,系统管理,订单管理等功能的界面。2、项目技术项目后端框架:Java+ssm项目前端框架:vue2,ssm3、开发环境ssm+vue环境说明:环境说明:开发语言:java框架:ssm,vueJDK版本:JDK1.8数据库:mysql......
  • Java 多线程的创建
    Java多线程的创建Java元的JVM允许程序运行多个线程,使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类线程的创建方式有两种,一者为继承Thread类,一者为实现Runnable接口实现方式之一:继承Thread类实现步骤Java通过继承Thread类来创建并启动多线程......
  • java 中byte的取值范围
    众所周知,java中byte的取值范围-128~127,那么为什么呢?java中二进制是采用补码运算的,其中最高位0代表正数1代表负数。正数的正码,反码,补码相同,负数补码=反码+1。举例:-10正码:10001010反码:11110101补码:11110110一字节byte占8bit位。那么正数范围为00000000~0111111......
  • 从零手写实现 nginx-01-为什么不能有 java 版本的 nginx?
    前言大家好,我是老马。很高兴遇到你。作为一个java开发者,工作中一直在使用nginx。却发现一直停留在使用层面,无法深入理解。有一天我在想,为什么不能有一个java版本的nginx呢?一者是理解nginx的设计灵魂,再者java开发者用java语言的服务器不是更加自然吗。于是动手开......
  • Java的冷知识你知道吗?
    1、方法参数不能超过255个在Java中,方法的参数数量是有限制的,最多不能超过255个。这个知识点可能对于大多数程序员来说并不常用,因此即使是经验丰富的Java开发者也可能不清楚这一点。2、Java中的自动装箱与拆箱自动装箱是Java5引入的新特性,它允许将基本数据类型自动转换成对应......