获取百度地图的某个经纬度最近的地名

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import org.json.JSONArray;
import org.json.JSONObject;

public class ReverseGeoCoding {
    private static final String BAIDU_MAP_API_URL = "http://api.map.baidu.com/reverse_geocoding/v3/?";
    private static final String AK = "your_ak_here"; // 替换成你自己的百度地图开发者AK

    public static String getNearestLocation(double lat, double lng) {
        try {
            // 组装请求URL
            StringBuilder sb = new StringBuilder(BAIDU_MAP_API_URL);
            sb.append("ak=").append(AK).append("&");
            sb.append("output=json&");
            sb.append("coordtype=wgs84ll&");
            sb.append("location=").append(lat).append(",").append(lng);

            // 发送HTTP请求
            URL url = new URL(sb.toString());
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);

            // 解析JSON数据
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            StringBuilder result = new StringBuilder();
            String line;
            while ((line = reader.readLine()) != null) {
                result.append(line);
            }
            reader.close();
            conn.disconnect();

            JSONObject json = new JSONObject(result.toString());
            int status = json.getInt("status");
            if (status == 0) {
                JSONObject resultObj = json.getJSONObject("result");
                JSONArray pois = resultObj.getJSONArray("pois");
                if (pois.length() > 0) {
                    JSONObject poi = pois.getJSONObject(0);
                    return poi.getString("name");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        // 测试获取某个经纬度最近的地名
        double lat = 39.915291;
        double lng = 116.403857;
        String nearestLocation = getNearestLocation(lat, lng);
        System.out.println("经度:" + lng + ",纬度:" + lat + ",最近的地名:" + nearestLocation);
    }
}

在代码中,getNearestLocation 方法接收一个经纬度坐标作为输入参数,并调用百度地图的逆地址解析 API 获取该坐标最近的地名。该方法返回一个字符串,表示最近的地名。在 main 方法中,我们输入了一个经纬度坐标,调用 getNearestLocation 方法获取最近的地名,并将结果输出到控制台。请注意,代码中的 AK 变量需要替换为你自己的百度地图开发者AK。

posted @ 2023-03-18 15:36  卷心菜的奇妙历险  阅读(51)  评论(0编辑  收藏  举报