手记

【九月打卡】第3天 多端全栈项目实战

课程名称:多端全栈项目实战:商业级代驾全流程落地

课程章节:  华夏代驾全栈小程序实战

课程讲师: 神思者



课程内容:

    开通腾讯云地图


课程收获:


    https://lbs.qq.com/

    首先 进入网页开通 或者 注册

    

    创建我的应用 之后点击编辑  需要勾选 webServiceAPI 勾选白名单  以及填入自己的 appid


    

    

    在这个项目中 需要通过ajax 获取地理位置信息 后端通过 这些信息 进行计算路程 所以后端java项目也必须调用java版本的腾讯位置api 计算路程

    common子系统的application-common.yml

        

    


接下来就开始代码部分  

    我们需要封装 预估里程和时间


    


    乘客下单时 ,java项目需要预估里程和时间 

    https://lbs.qq.com/service/webService/webServiceGuide/webServiceMatrix


    这是腾讯位置的api

        

    首先我们要编写 service

        需要传书得值 分边是 起点的经纬度, 终点的经纬度  以及 出行方式 

    mode 

    计算方式,取值:
        driving:驾车
        walking:步行
        bicycling:自行车

    不同的交通工具计算的时间也不同

    

        from= 纬度 , 经度

    
    

        在service 里用hashMap存这五个需要的数据

public interface MapService {
    public HashMap estimateOrderMileageAndMinute(String mode, 
                                                 String startPlaceLatitude, 
                                                 String startPlaceLongitude,
                                                 String endPlaceLatitude, 
                                                 String endPlaceLongitude);
    }

    编写impl

    预估里程的api 以及 需要的key

//预估里程的API地址
    private String distanceUrl = "https://apis.map.qq.com/ws/distance/v1/matrix/";

    @Value("${tencent.map.key}")
    private String key;



使用 httpRequest 发送http请求 首先需要封装一下要传的值

    

HttpRequest req = new HttpRequest(distanceUrl);
req.form("mode", mode);
req.form("from", startPlaceLatitude + "," + startPlaceLongitude);
req.form("to", endPlaceLatitude + "," + endPlaceLongitude);
req.form("key", key);

    发送请求后 需要将 返回的数据 转换成json

HttpResponse resp = req.execute();
JSONObject json = JSONUtil.parseObj(resp.body());
int status = json.getInt("status");
String message = json.getStr("message");


    判断异常

   如果有异常 则需要抛出

   没有异常得话 

    接下来需要将 获得的数据进行处理 比如 返回的距离是以米为单位 我们要转换成 公里 

    时间是秒 我们也需要进行处理

JSONArray rows = json.getJSONObject("result").getJSONArray("rows");
JSONObject element = rows.get(0, JSONObject.class).getJSONArray("elements").get(0, JSONObject.class);
int distance = element.getInt("distance");
String mileage = new BigDecimal(distance).divide(new BigDecimal(1000)).toString();
int duration = element.getInt("duration");
String temp = new BigDecimal(duration).divide(new BigDecimal(60), 0, RoundingMode.CEILING).toString();
int minute = Integer.parseInt(temp);
HashMap map = new HashMap() {{
    put("mileage", mileage);
    put("minute", minute);
}};




0人推荐
随时随地看视频
慕课网APP