package com.ruoyi.app.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class GetJvli {
    private static final double EARTH_RADIUS = 6378.137; // 6378.137为地球半径(单位:千米)


    //最优路线距离
    // Java 计算两个GPS坐标点之间的距离
    // lat1、lng1 表示A点经纬度，lat2、lng2 表示B点经纬度，计算出来的结果单位为千米
    public static JSONObject getOptimalRoute(JSONObject qingqiu) {

        try {
            String key = "AIzaSyCUdubvwBgHx-SYXvabzH-N0DHTyUXgDQc";
            String FieldMask = "routes.duration,routes.distanceMeters,routes.polyline.encodedPolyline";
            String url = "https://routes.googleapis.com/directions/v2:computeRoutes";


            Map<String, String> head = new HashMap<String, String>();
            head.put("Content-Type", "application/json");
            head.put("X-Goog-Api-Key", key);
            head.put("X-Goog-FieldMask", FieldMask);
            String rs = HttpKit.post(url, JSON.toJSONString(qingqiu), head);
            System.out.println("222222222"+rs);
            JSONObject jsonObject = JSONObject.parseObject(rs);
            return  jsonObject;
        } catch (Exception e) {
            JSONObject json = new JSONObject();
            json.put("data",null);
            return json;
        }
    }

    //直线距离
    // Java 计算两个GPS坐标点之间的距离
    // lat1、lng1 表示A点经纬度，lat2、lng2 表示B点经纬度，计算出来的结果单位为千米
    public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;      // a 是两坐标点的纬度之差
        double b = rad(lng1) - rad(lng2);  // b 是两坐标点的经度之差

        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
                Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
        s = s * EARTH_RADIUS;
        System.out.println("s = " + s + "千米"); // 单位:千米

        s = Math.round(s * 1000); // 转为米，用 Math.round() 取整
        s = s/1000; // 米转千米
        return s;
    }
    private static double rad(double d) {  return d * Math.PI / 180.0; }
}
