Java调用高德地图API根据经纬度获取区县

 

在开发中,有时候需要根据经纬度来获取对应的区县信息,这可以通过调用高德地图的API来实现。本篇文章将介绍如何使用Java代码调用高德地图API来根据经纬度获取区县信息。

前提条件

首先,你需要注册一个高德地图开发者账号,并获取到API Key。API Key 将用于向高德地图发送请求以获取区县信息。

首页 | 高德控制台

代码实现

以下是一个使用 Java 代码调用高德地图 API 的示例代码:

package com.sgnbs.web.utils;


import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;

@Slf4j
public class GeoLocationToAddress {

    private static final String API_URL = "https://restapi.amap.com/v3/geocode/regeo";
    private static final String KEY = "YOUR_API_KEY_HERE";

    public static String getProvinceCityDistrict(double longitude, double latitude) {
        String parameters = "?key=" + KEY;
        parameters += "&location=" + longitude + "," + latitude;
        parameters += "&extensions=all";
        parameters += "&output=JSON";
        
        String urlString = API_URL + parameters;
        StringBuilder res = new StringBuilder();
        
        try {
            log.info("Amap API Request URL: " + urlString);
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("GET");
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
            String line;
            while ((line = in.readLine()) != null) {
                res.append(line);
            }
            in.close();

            log.info("Map API Response: " + res);
            
            JSONObject json = JSONObject.parseObject(res.toString());
            if ("1".equals(json.getString("status"))) {
                JSONObject regeocode = json.getJSONObject("regeocode");
                JSONObject addressComponent = regeocode.getJSONObject("addressComponent");
                String province = addressComponent.getString("province");
                String city = addressComponent.getString("city");
                String district = addressComponent.getString("district");
                
                return "City:" + city + ", District:" + district;
            } else {
                log.info("Map API Response Error: " + json.getString("info"));
            }
        } catch (Exception e) {
            log.info("Error getting address information");
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        double longitude = 123.429441;
        double latitude = 41.83544;
        String addressInfo = getProvinceCityDistrict(longitude, latitude);
        String[] parts = addressInfo.split(", "); // 拆分成 "City:大连市" 和 "District:甘井子区"
        String city = "";
        String district = "";
        for (String part : parts) {
            if (part.startsWith("City:")) {
                city = part.substring("City:".length()); // 获取 "市"
            } else if (part.startsWith("District:")) {
                district = part.substring("District:".length()); // 获取 "区"
            }
        }
        System.out.println(longitude+","+latitude+"的城市区县为:"+addressInfo);
        System.out.println("City: " + city);
        System.out.println("District: " + district);
    }
}

请注意将 YOUR_API_KEY_HERE 替换为你实际的 API Key。

总结

通过以上代码,你可以轻松地使用 Java 调用高德地图 API 来获取经纬度对应的区县信息。这对于许多需要根据地理位置信息获取相关数据的场景是非常有用的。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用高德地图的 Web 服务 API 中的地理编码接口和逆地理编码接口来获取经纬度对应的海拔高度信息。 以下是一个示例代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class AMapAPI { public static void main(String[] args) { try { String url = "https://restapi.amap.com/v3/geocode/regeo?key=YOUR_KEY&location=经度,纬度&extensions=all"; // YOUR_KEY 需要替换为高德地图开发者平台申请的 Web 服务 API 的 KEY; // 经度和纬度需要替换为实际的值。 URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); // 解析 JSON 数据,获取海拔高度信息。 String result = response.toString(); int indexStart = result.indexOf("\"elevations\":[") + "\"elevations\":[".length(); int indexEnd = result.indexOf("]", indexStart); String elevations = result.substring(indexStart, indexEnd); System.out.println("海拔高度(单位:米):" + elevations); } catch (IOException e) { e.printStackTrace(); } } } ``` 需要注意的是,该接口有频率限制和调用次数限制,需要根据开发者平台的规定进行调用。同时,由于该接口需要访问互联网,因此需要保证网络连接正常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值