Java实现通过经纬度调用腾讯地图接口获取行政地区信息

Java实现调用腾讯地图接口获取行政地区信息

本文主要是实现通过从前端传回的经纬度,调用腾讯地图的接口,解析获取经纬度所在的行政地区信息(获取国家,省份,城市以及对应的代码)。

开始之前做好如下准备:

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.8.0</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.54</version>
		</dependency>

以下是代码:

package com.njpp.wxxcx.util;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSONObject;

/**
 * 根据经纬度获取城市信息
 */
public class AddressUtils {

    // key
    private static final String KEY = "需要自己申请";

    /**
     * @Description: 通过经纬度获取位置
     * @Param: lng:经度
     * @Param: lat:纬度
     */
    public static Map<String, Object> getLocation(String lng, String lat) {

        Map<String, Object> resultMap = new HashMap<String, Object>();

        // 参数解释:lng:经度,lat:维度。KEY:腾讯地图key,get_poi:返回状态。1返回,0不返回
        String urlString = "http://apis.map.qq.com/ws/geocoder/v1/?location=" + lat + "," + lng + "&key=" + KEY + "&get_poi=1";
        String result = "";
        try {
            URL url = new URL(urlString);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setDoOutput(true);
            // 腾讯地图使用GET
            conn.setRequestMethod("GET");
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line;
            // 获取地址解析结果
            while ((line = in.readLine()) != null) {
                result += line + "\n";
            }
            in.close();
        } catch (Exception e) {
            e.getMessage();
        }

        // 转JSON格式
        JSONObject jsonObject = JSONObject.parseObject(result).getJSONObject("result");
        // 获取地址(行政区划信息) 包含有国籍,省份,城市
        JSONObject adInfo = jsonObject.getJSONObject("ad_info");
        resultMap.put("nation", adInfo.get("nation"));//国   籍
        resultMap.put("nationCode", adInfo.get("nation_code"));//国家代码
        resultMap.put("province", adInfo.get("province"));//省   份
        resultMap.put("provinceCode", adInfo.get("adcode"));//省份代码
        resultMap.put("city", adInfo.get("city"));//城   市
        resultMap.put("cityCode", adInfo.get("city_code"));//城市代码
        return resultMap;
    }

    public static void main(String[] args) {

        // 测试
        String lng = "111.546112";//经度
        String lat = "24.378622";//维度
        Map<String, Object> map = getLocation(lng, lat);
        System.out.println(map);
        System.out.println("国   籍:" + map.get("nation"));
        System.out.println("国家代码:" + map.get("nationCode"));
        System.out.println("省   份:" + map.get("province"));
        System.out.println("省份代码:" + map.get("provinceCode"));
        System.out.println("城   市:" + map.get("city"));
        System.out.println("城市代码:" + map.get("cityCode"));
    }
}

运行结果如下所示:

{province=广西壮族自治区, nation=中国, city=贺州市, provinceCode=451103, cityCode=156451100, nationCode=156}
国   籍:中国
国家代码:156
省   份:广西壮族自治区
省份代码:451103
城   市:贺州市
城市代码:156451100

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的代码和结果,可以看出这段Java代码是通过经纬度获取行政区划的功能。代码中使用了百度地图的API来实现这个功能。首先,代码中定义了一个私有方法`getTownByLonAndLat`,该方法接收经度和纬度作为参数,并返回一个JSON对象,该对象包含了获取到的行政区划信息。在方法内部,首先创建了一个`Map`对象来存储请求参数,然后设置了一些必要的参数,如百度开放平台的API Key、输出格式为JSON、返回乡镇级数据等。接下来,将经纬度添加到参数中,并构建了请求URL。最后,通过调用`HttpUtil.getResult`方法发送HTTP请求,并将返回的结果解析为JSON对象。最终,从JSON对象中获取到了行政区划信息,并返回。 根据提供的运行结果,可以看出该方法成功获取到了行政区划信息。结果中包含了国籍、国家代码、省份、省份代码、城市和城市代码等信息。根据结果,经纬度所对应的行政区划是中国广西壮族自治区贺州市。 因此,这段Java代码可以通过经纬度获取行政区划信息。\[1\]\[2\] #### 引用[.reference_title] - *1* [Java 根据百度经纬度(坐标) 获取中国街道、街道编码](https://blog.csdn.net/qq_32407233/article/details/121395724)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java实现通过经纬度调用腾讯地图接口获取行政地区信息](https://blog.csdn.net/qq_26383975/article/details/108868061)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值