查看: 104|回复: 0

高德地图获取俩个点的最佳距离

[复制链接]

1

主题

6

帖子

6

积分

新手上路

Rank: 1

积分
6
发表于 2023-1-8 11:49:54 | 显示全部楼层 |阅读模式
1.高德地图获取两个点的行车距离并计算俩个点之间车费是多少
1)需要去高德申请key值
2)根据位置获取经纬度,需要省市区详细地址
3)根据获取到的经纬度获取两个点之间的距离
4)计算俩个点之间的车费
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class GetDistance {
    //高德地图 key
    private static final String KEY = "申请的key值";

    public static void main(String[] args){
        String start = "";
        String end = "";

        String startLonLat = getLonLat(start);
        String endLonLat = getLonLat(end);

        System.out.println(startLonLat);
        System.out.println(endLonLat);
        Double dis = getDistance(startLonLat,endLonLat);
        System.out.println(dis);

        System.out.println(Transportfare(dis));
    }

    /**
     * 根据地址 转换经纬度
     * @param address
     * @return
*/
public static String getLonLat(String address){
        //返回输入地址address的经纬度信息, 格式是 经度,纬度
        String queryUrl = "http://restapi.amap.com/v3/geocode/geo?key="+KEY+"&address="+address;
        String queryResult = getResponse(queryUrl);  //高德接品返回的是JSON格式的字符串

        JSONObject jo = JSONObject.fromObject(queryResult);
        JSONArray ja = jo.getJSONArray("geocodes");
        return JSONObject.fromObject(ja.getString(0)).get("location").toString();
    }

    /**
     * 高德地图 距离测量
     * @param startLonLat
     * @param endLonLat
     * @return
*/
public static Double getDistance(String startLonLat, String endLonLat){
        //返回起始地startAddr与目的地endAddr之间的距离,单位:米
        Double result = new Double(0);
        String queryUrl = "http://restapi.amap.com/v3/distance?key="+KEY+"&origins="+startLonLat+"&destination="+endLonLat;

        String queryResult = getResponse(queryUrl);
        JSONObject jo = JSONObject.fromObject(queryResult);
        JSONArray ja = jo.getJSONArray("results");
        //获取距离 /米
        Long distance = Long.parseLong(JSONObject.fromObject(ja.getString(0)).get("distance").toString());
        //距离转换 /千米
        result = Double.parseDouble(String.format("%.2f", (distance.doubleValue() / 1000)));
        System.out.println("公里数:"+result);
        return result;
    }

    /**
     * 计算交通费
     * @param distance 距离
     * @return
*/
public static Double Transportfare(Double distance){
        Double charge = new Double(0);
        //计算交通费
        if(distance != 0) {
            if (distance > 3) {
                BigDecimal initialFee = new BigDecimal(distance).subtract(new BigDecimal(3)).multiply(new BigDecimal(1.9));//三公里外总价钱
                System.out.println("initialFee = " + initialFee);
                BigDecimal cost = new BigDecimal(9).add(new BigDecimal(String.valueOf(initialFee)));
                System.out.println("cost = " + cost);
                charge = Double.parseDouble(String.format("%.2f", cost));
                System.out.println("charge = " + charge);
            } else {
                charge = Double.parseDouble(String.format("%.2f", new BigDecimal(9)));
                System.out.println("charge = " + charge);
            }
        }
        return charge;
    }

    /**
     * 解析数据
     * @param serverUrl
     * @return
*/
public static String getResponse(String serverUrl){
        //用JAVA发起http请求,并返回json格式的结果
        StringBuffer result = new StringBuffer();
        try {
            URL url = new URL(serverUrl);
            URLConnection conn = url.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            String line;
            while((line = in.readLine()) != null){
                result.append(line);
            }
            in.close();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result.toString();
    }
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表