【java实现地图经纬度逆编码】通过使用百度/高德地图的开放平台 实现经纬度与中文地址的转换(附代码方法)

导读:本篇文章讲解 【java实现地图经纬度逆编码】通过使用百度/高德地图的开放平台 实现经纬度与中文地址的转换(附代码方法),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

事件起因

在项目中有时会使用到地图编码或逆编码,比如在记录物流运输过程时,会记录这些物资的收发货地址或运输途中的地址,便可将经纬度作为一个位置指标进行获取和存储,当然具体的中文地址
地图编码:将中文地址转换为经纬度;
地图逆编码:将经纬度转变为中文地址。

环境和工具

idea2021

操作过程

一个app应用使用地图逆编码api的流程:手机端获取到定位的位置(其实是经纬度),使用该经纬度就可调用地图逆编码api从而得到 具体的中文地址。

工具类如下所示:
使用指南:直接运行里面的main方法的话,会调用高德地图提供的api中的逆地理编码将准备好的经纬度”116.23128″, “40.22077” 转换为中文地址
里面的key各位需要自己去申请一下,我后面做自己的项目可能会将这个服务的接口给关掉,里面的key就会失效,代码里面的注释有提供高德和百度地图的开放平台的网页地址,自己在平台注册即可,建议使用高德,因为高德的申请流程较为简单,百度需要多次认证

import com.alibaba.fastjson.JSONObject;

/**
 * @author qc
 * @description get CH address from lat
 * @create 2022-07-01
 */

import java.net.URL;
import java.util.Date;

import com.chinamobile.wzgj.constants.CommonConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSONObject;

public class GetAddressFromLatUtil {
    private final static Logger logger = LoggerFactory.getLogger(GetAddressFromLatUtil.class);
    public static void main(String[] args) {
        // lat 31.2990170   纬度
        //log 121.3466440    经度
        String add = GetAddressFromLatUtil.getAdd("116.23128", "40.22077");
        logger.info(add);

//        System.out.println(System.currentTimeMillis());
    }
    /**
     *根据经纬度获取省市区
     * @param log
     * @param lat
     * @return
     */
    public static String getAdd(String log, String lat ){
        //lat 小  log  大
        //注意key是在高德/百度开放平台申请的key,高德地图具体获得key的步骤请查看网址:https://developer.amap.com/api/webservice/guide/create-project/get-key
        //百度地图开放平台的网址:https://lbsyun.baidu.com/index.php 在该平台注册即可
        String key = "c391f6981647fca0cz221764f73551c2fa";
        //地理编码 : 详细中文地址转为经纬度信息 请求地址:	https://restapi.amap.com/v3/geocode/geo?parameters
        //地理逆编码:经纬度信息转中文地址信息 请求地址:https://restapi.amap.com/v3/geocode/regeo?parameters
        //第一个是高德的逆地理编码 第二个是百度的逆地理编码  均为get请求
        String urlString = "https://restapi.amap.com/v3/geocode/regeo?location="+log+","+lat+"&extensions=base&batch=false&roadlevel=0&key="+ key;
        //String urlString = "https://api.map.baidu.com/reverse_geocoding/v3/?ak="+key+"&output=json&coordtype=wgs84ll&location="+lat+","+log;

        String res = "";
        try {
            URL url = new URL(urlString);
            java.net.HttpURLConnection conn = (java.net.HttpURLConnection)url.openConnection();
            conn.setDoOutput(true);
            conn.setRequestMethod("POST");
            java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                res += line+"\n";
            }
            in.close();
            //解析结果
            JSONObject jsonObject = JSONObject.parseObject(res);
            logger.info(jsonObject.toJSONString());
            //这个是高德的
            JSONObject jsonObject1 = jsonObject.getJSONObject("regeocode");
            //这个是百度的
            //JSONObject jsonObject1 = jsonObject.getJSONObject("result");
            res =jsonObject1.getString("formatted_address");
        } catch (Exception e) {
            logger.error("获取地址信息异常{}",e.getMessage());
            return null;
        }
        System.out.println("通过API获取到具体位置:"+res);
        return res;
    }
}

直接运行里面的main方法得到的结果为:
在这里插入图片描述
上面的 代码中的getAddress()函数方法,可作为一个函数调用来使用 它有两个参数,第一个参数是经度longitude,第二个参数是纬度latitude
调用这个函数方法时,传入经纬度后它会请求得到一个json,再经过代码段try里面的内容对json进行解析和获取得到具体的中文地址 getAddress方法返回的值就只是中文地址而不是请求得到的json

结束语

若是对你有所帮助的话,希望能获得你的 点赞、评论、收藏,这将是对我很大的鼓励!!! 这对我真的很重要!!!
蟹蟹٩(‘ω’)و

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/114535.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!