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

事件起因

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

环境和工具

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

结束语

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
利用Python和高德地图API实现经纬度地址的批量转换是可行的。首先,我们需要准备高德地图的API密钥,该密钥可以通过高德地图开发者平台申请获得。 接下来,我们可以使用Python中的requests库发送HTTP请求,通过调用高德地图地理编码接口,将经纬度转换地址。我们需要将API密钥和待转换经纬度构建为合适的URL,并发送GET请求。高德地图API将返回JSON格式的数据,其中包含有关地址信息的详细内容。 在代码中,我们可以使用for循环来遍历经纬度的列表,对每个经纬度调用地理编码接口并解析返回的JSON数据。我们可以从返回的数据中提取出地址信息,并将其保存到一个新的CSV文件中。 以下是一个简单的示例代码: ```python import requests import csv api_key = "your_api_key" def get_address(lat, lng): url = f"https://restapi.amap.com/v3/geocode/regeo?key={api_key}&location={lng},{lat}&radius=1000&extensions=all&batch=true&roadlevel=1" response = requests.get(url) data = response.json() address = data['regeocodes'][0]['formatted_address'] return address def main(): with open('input.csv', 'r') as input_file, open('output.csv', 'w', newline='') as output_file: reader = csv.reader(input_file) writer = csv.writer(output_file) writer.writerow(['经度', '纬度', '地址']) for row in reader: lat, lng = row[0], row[1] address = get_address(lat, lng) writer.writerow([lat, lng, address]) print("地址转换完成!") if __name__ == '__main__': main() ``` 在这个示例中,我们假设输入文件是一个CSV文件,其中包含经纬度数据。我们将转换后的地址保存到新的CSV文件中,其中包含经度、纬度和地址信息。 通过运行这个Python脚本,我们可以批量转换经纬度地址,并将结果保存到输出文件中。这样,我们就可以在后续的工作中方便地使用地址信息了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿,葱来了-C is coming

老板大气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值