首页 > 其他分享 >调用百度API实现经纬度转换

调用百度API实现经纬度转换

时间:2024-01-12 12:00:28浏览次数:42  
标签:map String 经纬度 API org apache import null 百度

百度API官网  登入后点击控制台,选择应用管理、我的应用、创建应用,等应用创建成功后复制访问应用AK的值;

 

经纬度转换工具类

      <dependency>
          <groupId>org.apache.httpcomponents</groupId>
          <artifactId>httpclient</artifactId>
          <version>4.5.5</version>
      </dependency>
      <dependency>
          <groupId>commons-httpclient</groupId>
          <artifactId>commons-httpclient</artifactId>
          <version>3.1</version>
      </dependency>

      <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>fastjson</artifactId>
          <version>1.2.83</version>
      </dependency>
import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Component;

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





/**
 * @Description : 百度地图地址解析
 * @Author : Bruce Lee
 * @CreateTime : 2024/1/12
 */

@Component
public class GetAddressUtil {
    private static final  String AK = "e5A5xSv2kfWsVexvXQsvhCCkqa99PGjq";
    //由于接口请求有时候无法得到响应,故循环调用五次
    public static Map<String,String> getMap(String address){
        Map<String,String> map = null;
        for(int i=0;i<5;i++){
            map =getGeocoderLatitude(address);
            if(map!= null){
                break;
            }
        }
        return map;
    }
    /**
     * 返回输入地址的经纬度坐标
     * key lng(经度),lat(纬度)
     */
    public static Map<String,String> getGeocoderLatitude(String address){
        BufferedReader in = null;
        try {
            //将地址转换成utf-8的16进制
            address = URLEncoder.encode(address, "UTF-8");
            URL tirc = new URL("http://api.map.baidu.com/geocoder?address="+ address +"&output=json&key="+ AK);
            in = new BufferedReader(new InputStreamReader(tirc.openStream(),"UTF-8"));
            String res;
            StringBuilder sb = new StringBuilder("");
            while((res = in.readLine())!=null){
                sb.append(res.trim());
            }
            String str = sb.toString();
            Map<String,String> map = null;
            if(StringUtils.isNotEmpty(str)){
                int lngStart = str.indexOf("lng\":");
                int lngEnd = str.indexOf(",\"lat");
                int latEnd = str.indexOf("},\"precise");
                if(lngStart > 0 && lngEnd > 0 && latEnd > 0){
                    String lng = str.substring(lngStart+5, lngEnd);
                    String lat = str.substring(lngEnd+7, latEnd);
                    map = new HashMap<String,String>();
                    map.put("lng", lng);
                    map.put("lat", lat);
                    return map;
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    //经纬度转地址
    public static String getAddressByLngAndLat(String lat,String lng){
        String location = lat+","+lng;
        String url="http://api.map.baidu.com/reverse_geocoding/v3/?ak="+AK+"&output=json&coordtype=bd09ll&location="+location;
        String res=acquire(url);

        //获取详细地址
           String addressLocation= JSON.parseObject(res).getJSONObject("result").getString("formatted_address");
        //获取省份
//        String province="";
//        if(res.contains("province")){
//            province= JSON.parseObject(res).getJSONObject("result").getJSONObject("addressComponent").getString("province");
//        }


        // System.out.println(addressLocation);
        return addressLocation;

    }
    //Http处理函数
    public static String acquire(String url){
        CloseableHttpClient httpClient= HttpClientBuilder.create().build();
        HttpGet httpGet=new HttpGet(url);
        CloseableHttpResponse response=null;
        try {
            response=httpClient.execute(httpGet);
            HttpEntity responseEntity=response.getEntity();
            if (responseEntity!=null){
                return EntityUtils.toString(responseEntity);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                if(httpClient!=null){
                    httpClient.close();
                }
                if (response!=null){
                    response.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}

 

 

参考地址

【1】https://blog.csdn.net/duan196_118/article/details/114595445

【2】百度地图API服务文档

标签:map,String,经纬度,API,org,apache,import,null,百度
From: https://www.cnblogs.com/ReturnOfTheKing/p/17960463

相关文章

  • Apipost接口自动化测试如何操作
    Apipost提供可视化的API自动化测试功能,使用Apipost研发人员可以设计、调试接口,测试人员可以基于同一数据源进行测试,Apipost接口自动化功能在上次更新中进行了逻辑调整,带来更好的交互操作、更多的控制器选择,同时新增同步接口模式选择、测试数据选择功能。添加接口使用Apipost,研发......
  • API文档、API自动化测试神器:Apipost
    在数字化时代,API已成为企业和开发者实现数据互通、应用集成的重要桥梁。然而,随着API数量的不断增加,API设计、调试、文档和测试等工作也变得越来越复杂。为了解决这一痛点,一款名为Apipost的API协同研发工具应运而生,它为API开发者提供了一站式解决方案。成功案例许多知名的公司和团队......
  • 27-K8 CRD:如何根据需求自定义你的 API?
    随着使用的深入,你会发现Kubernetes中内置的对象定义,比如Deployment、StatefulSet、Configmap,可能已经不能满足你的需求了。你很希望在Kubernetes定义一些自己的对象,一来可以通过kube-apiserver提供统一的访问入口,二来可以像其他内置对象一样,通过kubectl命令管理这些自定......
  • 28-面向 K8 编程:如何通过 Operator 扩展 Kubernete API?
    你好,我是正范。在上一讲,我们学习了如何通过一个YAML文件来定义一个CRD,即扩展API。这种扩展API跟Kubernetes内置的其他API同等地位,都可以通过kubectl或者REST接口访问,在使用过程中不会有任何差异。但只是定义一个CRD并没有什么作用。虽说kube-apiserver会将其数......
  • 想要数据去伪存真?不知道数据的真假?企查查开放平台的API来告诉你
    企查查开放平台使用说明:数据接入与应用实践在数字化时代,企业信息的透明度和可获取性对于商业决策至关重要。企查查开放平台作为一个提供企业数据服务的平台,为用户提供了便捷的数据接入方式和丰富的信息查询功能。本文将详细介绍如何使用企查查开放平台,以及如何将其应用于实际业务......
  • 网站如何接入百度商桥?
    网站如何接入百度商桥?百度商桥是百度旗下一款在线沟通的产品,访客无需登录即可在线咨询网站相关的信息,是网站管理员和访客建立有效沟通一个很好的工具,接下来我们说下如何接入。 第一步:先下载百度商桥软件,注册登陆。 第二步:绑定站点。登录软件界面,点击基础设置 -> 选择站点......
  • 2023 百度之星决赛题解
    T4传信游戏建反向边,从入度为\(0\)的结点开始搜T5喵喵卫士,全靠你了\(\star\)考虑暴力枚举每个点的深度,发现只要知道相邻两层的深度就能用组合数算方案数,自然想到按层DP,把上一层的点数记到状态里赛时做法按深度从小到大DP的话想要记录每个点是否被用过,以保证深度达到上......
  • 【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
    前言: 在之前的项目中,我们已经使用OpenVINOTMCSharpAPI部署PaddleOCR全系列模型,但随着PaddleOCRv4版本发布以及OpenVINOCSharpAPI版本迭代,上一版本的项目已经不再适用。因此在推出的最新项目中,已经完成了对PaddleOCRv4的匹配,并且采用了最新版本的OpenVINOTMCSha......
  • 2024 年的 API 管理新动向
    本文译自:WhatWillBetheAPIManagementTrendsfor2024?原文链接:https://thenewstack.io/what-will-be-the-api-management-trends-for-2024/原文作者:KennHussey预计到2030年末,API管理 市场的规模将增长六倍,这一增长主要受到一个核心理念的推动:API完全控制了数字世界。随......
  • Gateway API 实践之(一)FSM Gateway 中的故障注入策略
    在之前的文章中,我们快速体验了FSMGateway-一个开源的K8sGatewayAPI的实现。在即将发布的FSM1.2中,FSMGateway将会带来更多的功能:故障注入策略限流策略会话保持策略负载均衡算法熔断策略访问控制策略健康检查策略TLS上游策略...后面我们会推出系列的文章来介绍这些功......