要使用高德地图API来计算两个城市之间的距离,你需要首先在高德开放平台上注册并获取API密钥(AK)。以下是一个使用Java调用高德地图API来计算两个城市之间距离的示例代码。

步骤 1: 获取高德地图API密钥

访问高德开放平台(https://lbs.amap.com/),注册并创建应用,然后获取API密钥(AK)。

步骤 2: Java代码实现

org.json库来解析JSON响应。请确保你的项目中包含了org.json库

maven项目在pom文件中引入

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20231013</version>
</dependency>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONArray;
import org.json.JSONObject;

/**
 * description: DistanceCalculator
 * date: 2024/6/19 3:16 PM
 *
 * @author: zhang jie
 */

public class DistanceCalculator {
    public static String geocode(String address1, String address2, String apiKey) {
        try {
            // 计算第一个地址的经纬度
            String origins = getLocationByAddress(address1, apiKey);
            if (origins == null) {
                return "找不到结果";
            }

            // 计算第二个地址的经纬度
            String destination = getLocationByAddress(address2, apiKey);
            if (destination == null) {
                return "找不到结果";
            }

            // 计算两个经纬度之间的距离
            String distance = getDistance(origins, destination, apiKey);
            if (distance == null) {
                return "找不到结果";
            }

            return address1 + " 到 " + address2 + " 的距离 " + distance + " 米";
        } catch (Exception e) {
            e.printStackTrace();
            return "请求过程中出现错误";
        }
    }

    private static String getLocationByAddress(String address, String apiKey) throws Exception {
        String urlString = String.format(
                "https://restapi.amap.com/v3/geocode/geo?address=%s&key=%s",
                address, apiKey);
        JSONObject responseJson = new JSONObject(sendGetRequest(urlString));
        if (!"1".equals(responseJson.getString("status"))) return null;
        JSONArray geocodes = responseJson.getJSONArray("geocodes");
        return geocodes.getJSONObject(0).getString("location");
    }

    private static String getDistance(String origins, String destination, String apiKey) throws Exception {
        String urlString = String.format(
                "https://restapi.amap.com/v3/distance?origins=%s&destination=%s&output=json&key=%s",
                origins, destination, apiKey);
        JSONObject responseJson = new JSONObject(sendGetRequest(urlString));
        if (!"1".equals(responseJson.getString("status"))) {
            return null;
        }
        JSONArray results = responseJson.getJSONArray("results");
        return results.getJSONObject(0).getString("distance");
    }

    private static String sendGetRequest(String urlString) throws Exception {
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String inputLine;
        StringBuilder response = new StringBuilder();
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
        in.close();
        return response.toString();
    }

    public static void main(String[] args) {
        String address1 = "成都市";
        String address2 = "巴中市";
        String apiKey = "YOUR_AMAP_API_KEY"; // 使用你的高德地图API密钥替换
        System.out.println(geocode(address1, address2, apiKey));
    }
}

注意事项

  • 确保你的API密钥安全,不要在公共代码库中暴露它。
  • 使用高德地图API可能涉及费用,请查看高德开放平台的定价信息。
  • 本示例仅用于演示如何使用Java调用外部API,实际应用中需要处理更多的异常情况和错误处理。