puzhibing
2023-10-30 d4c3427bbd111f4a005c77a9cc1f131b455fc6cf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.ruoyi.shop.util.map;
 
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.shop.util.map.vo.TencentDistanceMatrix;
import com.ruoyi.shop.util.map.vo.TencentDistanceMatrixElements;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * 地图工具
 * @author zhibing.pu
 * @Date 2023/10/30 9:44
 */
public class MapUtil {
 
    private static final String tencentKey = "FATBZ-V3AWH-7IJDS-WC7NC-QXY3Q-TQFDJ";
 
 
    /**
     * 距离矩阵计算-腾讯
     * @param form  起点经纬度-lat,lng,[header],[roadtype],[speed],[accuracy],[timestamp]|lat,lng,[header],[roadtype],[speed],[accuracy],[timestamp]…
     * @param to    终点经纬度-lat,lng;lat,lng…
     * @param mode  计算方式,取值:driving:驾车 walking:步行 bicycling:自行车
     * @return
     */
    public static R<List<TencentDistanceMatrix>> tencentDistanceMatrix(String form, String to, String mode){
        String url = "https://apis.map.qq.com/ws/distance/v1/matrix";
        HttpRequest get = HttpUtil.createGet(url)
                .form("key", tencentKey)
                .form("from", form)
                .form("to", to)
                .form("mode", mode);
        HttpResponse execute = get.execute();
        JSONObject jsonObject = JSON.parseObject(execute.body());
        Integer status = jsonObject.getInteger("status");
        String message = jsonObject.getString("message");
        if(0 == status){
            JSONObject result = jsonObject.getJSONObject("result");
            JSONArray rows = result.getJSONArray("rows");
            List<TencentDistanceMatrix> list = new ArrayList<>();
            for (int i = 0; i < rows.size(); i++) {
                TencentDistanceMatrix tencentDistanceMatrix = new TencentDistanceMatrix();
 
                JSONObject jsonObject1 = rows.getJSONObject(i);
                JSONArray elements = jsonObject1.getJSONArray("elements");
                List<TencentDistanceMatrixElements> elementsList = new ArrayList<>();
                for (int j = 0; j < elements.size(); j++) {
                    JSONObject jsonObject2 = elements.getJSONObject(j);
                    TencentDistanceMatrixElements elements1 = new TencentDistanceMatrixElements();
                    elements1.setDistance(jsonObject2.getInteger("distance"));
                    elements1.setDuration(jsonObject2.getInteger("duration"));
                    elementsList.add(elements1);
                }
                tencentDistanceMatrix.setElements(elementsList);
                list.add(tencentDistanceMatrix);
            }
            return R.ok(list);
        }
        return R.fail(message);
    }
 
 
}