百度地图API根据地址查出经纬度java实现

本文介绍了如何利用百度地图API在Java中实现根据地址查询经纬度的功能。首先,讲述了在百度地图开发平台上创建应用并获取AK的过程,接着详细解释了Geocoding API的使用,包括根据地址获取经纬度和根据经纬度获取地址的示例代码。文章强调了URL编码的重要性以及API调用的注意事项,如频率限制和地址唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需求场景

之前开发中对数据加工的时候,需要知道数据的地市、区县的名称。但是大部分数据只有地址和企业名称,并没有其他特殊的标志。根据地址来处理地市州的话,有明显的市州的信息的话还能根据码表进行匹配。但是还存在没有地市和区县的情况。在这种情形下,我第一想到的是根据地图开放API来获取对应信息。(谷歌和百度)

二、关于百度地图API

百度地图经过多年的发展,在当前大数据背景下对于地址信息的处理能力应当是不错的。要申请百度地图API接口,首先得注册一个百度账号。登录到百度地图开发平台:http://lbsyun.baidu.com/

首先在开API控制台创建一个应用

创建应用的时候需要选择服务端、安卓等。因为我是服务端开发,选择服务端即可。然后应用对IP有限制规则(防止恶意访问),页面底部也有对IP等信息

创建成功之后又一个AK,这个是访问API的唯一口令(如果设置了IP则还有IP)

以上就是关于百度API 的简要使用规则,如果要进行更深层次的操作你的账户还需要绑定百度开发者中心。(需要进行开发者认证)

三、根据百度API处理实际问题

根据百度API给出的实际功能,需要使用Geocoding API进行操作。具体操作如下:

1.熟悉API

API首先给出了根据地址查出经纬度的实例:

http://api.map.baidu.com/geocoder/v2/?address=北京市海淀区上地十街10号&output=json&ak=E4805d16520de693a3fe707cd

我们先明确的我们需要访问的服务地址是:

http://api.map.baidu.com/geocoder/v2/

然后必要的参数是ak,address是我们需要查询的地址,输出根据json输出(可选xml)。具体的介绍可以看API文档说明

第二个功能则是根据经纬度来获取地址信息

http://api.map.baidu.com/geocoder/v2/?location=39.983424,116.322987&output=json&ak=您的ak

可以看到必要参数是location,这里注意的是经纬度的顺序。必要参数也是ak

返回的数据格式详见API手册

2.实际应用示例代码

[java]  view plain  copy
  1. public class Tests {   
  2.   
  3.     /**  
  4.      * @param addr  
  5.      * 查询的地址  
  6.      * @return  
  7.      * @throws IOException  
  8.      */   
  9.     public String[] getCoordinate(String addr) throws IOException {   
  10.         String lng = null;//经度  
  11.         String lat = null;//纬度  
  12.         String address = null;   
  13.         try {   
  14.             address = java.net.URLEncoder.encode(addr, "UTF-8");   
  15.         }catch (UnsupportedEncodingException e1) {   
  16.             e1.printStackTrace();   
  17.         }   
  18.         //System.out.println(address);  
  19.         String url = "http://api.map.baidu.com/geocoder/v2/?output=json&ak=您的ak&address="+address;  
  20.         URL myURL = null;   
  21.   
  22.         URLConnection httpsConn = null;   
  23.         try {  
  24.             myURL = new URL(url);   
  25.         } catch (MalformedURLException e) {   
  26.             e.printStackTrace();   
  27.         }   
  28.         InputStreamReader insr = null;  
  29.         BufferedReader br = null;  
  30.         try {   
  31.             httpsConn = (URLConnection) myURL.openConnection();  
  32.             if (httpsConn != null) {   
  33.                 insr = new InputStreamReader( httpsConn.getInputStream(), "UTF-8");   
  34.                 br = new BufferedReader(insr);   
  35.                 String data = null;   
  36.                 while((data= br.readLine())!=null){   
  37.                     JSONObject json = JSONObject.parseObject(data);  
  38.                     lng = json.getJSONObject("result").getJSONObject("location").getString("lng");  
  39.                     lat = json.getJSONObject("result").getJSONObject("location").getString("lat");  
  40.                 }  
  41.             }   
  42.         } catch (IOException e) {   
  43.             e.printStackTrace();   
  44.         } finally {  
  45.             if(insr!=null){  
  46.                 insr.close();  
  47.             }  
  48.             if(br!=null){  
  49.                 br.close();  
  50.             }  
  51.         }  
  52.         return new String[]{lng,lat};   
  53.     }   
  54.   
  55.     public String[] getAddr(String lng,String lat) throws IOException {   
  56.   
  57.         String url = "http://api.map.baidu.com/geocoder/v2/?output=json&ak=您的ak&location="+lat+","+lng;  
  58.         URL myURL = null;   
  59.         String city = "";  
  60.         String qx = "";  
  61.         URLConnection httpsConn = null;   
  62.         try {  
  63.             myURL = new URL(url);   
  64.         } catch (MalformedURLException e) {   
  65.             e.printStackTrace();   
  66.         }   
  67.         InputStreamReader insr = null;  
  68.         BufferedReader br = null;  
  69.         try {   
  70.             httpsConn = (URLConnection) myURL.openConnection();// 不使用代理   
  71.             if (httpsConn != null) {   
  72.                 insr = new InputStreamReader( httpsConn.getInputStream(), "UTF-8");   
  73.                 br = new BufferedReader(insr);   
  74.                 String data = null;   
  75.                 while((data= br.readLine())!=null){   
  76.                     JSONObject json = JSONObject.parseObject(data);  
  77.                     city = json.getJSONObject("result").getJSONObject("addressComponent").getString("city");  
  78.                     qx= json.getJSONObject("result").getJSONObject("addressComponent").getString("district");  
  79.                 }  
  80.             }   
  81.         } catch (IOException e) {   
  82.             e.printStackTrace();   
  83.         } finally {  
  84.             if(insr!=null){  
  85.                 insr.close();  
  86.             }  
  87.             if(br!=null){  
  88.                 br.close();  
  89.             }  
  90.         }  
  91.         return new String[]{city,qx};   
  92.     }    
  93.   
  94.   
  95.     public static void main(String[] args) throws IOException {  
  96.         Tests getLatAndLngByBaidu = new Tests();  
  97.         String[] o = getLatAndLngByBaidu.getCoordinate("成都市幸福小区");  
  98.         String[] o1 = getLatAndLngByBaidu.getAddr(o[0], o[1]);  
  99.         System.out.println(o1[0]);  
  100.         System.out.println(o1[1]);  
  101.     }  
  102. }  

可以根据上面的代码进行封装,如果需要在正式编码环境中使用。建议先判断json返回的数据状态,然后再获取其中的值。

注意:

url中部分字符需要进行编码(详细信息请参考API文档)

在对地址数据进行经纬度查询的时候,尽量保证地址唯一

折腾API的时候注意调用次数(使用次数每天有限制)


点关注,不迷路

文章每周持续更新,可以微信搜索「 十分钟学编程 」第一时间阅读和催更,如果这个文章写得还不错,觉得有点东西的话 ~求点赞👍 求关注❤️ 求分享❤️ 
各位的支持和认可,就是我创作的最大动力,我们下篇文章见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蒋老湿

你的鼓励是我创作最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值