利用Baidu API正向和反向解析地址

在开发过程中,假如遇到了需要计算两地址之间的距离,或者是需要在地图上定位某个地点,之类之类的需求,就会用到百度地图或者高德地图提供的API去解析一个地址,包括正向解析和反向解析。正向解析是输入一个地址,返回一个经纬度,相当于我们在搜索框搜索一个地址然后在地图上打个点。反向解析则是输入一个经纬度,返回一个地址的列表,这个列表是表示这个经纬度附近可能有的东西。

百度地图,解析过程实际上就是向百度的服务器接口通过一个特定格式的URL发送一个带有数据信息的Http请求,然后获得一个带有json数据的Http相应。所以,开发者需要完成的工作,就是把json数据包装到合适的url,以及接受到json数据之后解析一下。

不多说,上代码

正向解析和反向解析直接封装到类BaiduGeocoder里面

/**
 * Created by charlie on 15/8/7.
 */
public class BaiduGeocoder {

    private static String ak = "KaK3WhH5p6ali0IM5vi9sRlk";

    //    把代码中的ak值(红色字部分)更改为你自己的ak值,在百度地图API中注册一下就有。
    //    调用方式:
    //    Map<String,String> map=BaiduGeocoder.geoCoding(“广州市");
    //    System.out.println("经度:"+map.get("lng")+"---纬度:"+map.get("lat"));

    public static Map<String,String> geoCoding(String address){

        String url = "http://api.map.baidu.com/geocoder/v2/?"
                +"address=" +address
                +"&output=json"
                +"&ak="+ak
                +"&callback=showLocation";

        String json = loadJSON(url);
        json = json.substring(27,json.length()-1);
        JSONObject obj = JSONObject.parseObject(json);

        Map<String,String> map = new HashMap<>();
        if(obj.get("status").toString().equals("0")){
            Double lng=obj.getJSONObject("result").getJSONObject("location").getDouble("lng");
            Double lat=obj.getJSONObject("result").getJSONObject("location").getDouble("lat");
            map.put("lng", lng.toString());
            map.put("lat", lat.toString());
        }else{
            System.out.println("未找到相匹配的经纬度!");
        }
        return map;
    }

    //    调用方式:
    //    Map<String,String> map=BaiduGeocoder.reverseGeoCoding(”39.1“,“116.1”);     //    System.out.println("经度:"+map.get("lng")+"---纬度:"+map.get("lat"));     public static Map<String, String> reverseGeoCoding(String lng, String lat) {         String url = "http://api.map.baidu.com/geocoder/v2/?"                 + "ak=" + ak
                + "&callback=renderReverse"
                + "&location=" + lat + "," + lng
                + "&output=json&pois=1";

        String json = loadJSON(url);
        json = json.substring(29,json.length()-1);
        JSONObject obj = JSONObject.parseObject(json);

        Map<String,String> map = new HashMap<>();
        if(obj.get("status").toString().equals("0")){
            String address = obj.getJSONObject("result").getString("formatted_address");
            String province = obj.getJSONObject("result").getJSONObject("addressComponent").getString("province");
            String city = obj.getJSONObject("result").getJSONObject("addressComponent").getString("city");
            map.put("address",address);
            map.put("province",province);
            map.put("city",city);
        }else{
            System.out.println("未找到匹配经纬度的地址");
        }
        return map;
    }

    public static String loadJSON (String url) {
        StringBuilder json = new StringBuilder();
        try {
            URL oracle = new URL(url);
            URLConnection urlConnection = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));
            String inputLine;
            while ( (inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            in.close();
        } catch (MalformedURLException e) {
            System.out.println("malformed exception");
        } catch (IOException e) {
            System.out.println("io exception");
        }

        return json.toString();
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-10 17:20:14

利用Baidu API正向和反向解析地址的相关文章

从DNS基础到在CentOS6.5上&ldquo;玩着&rdquo;搭建一个支持正向、反向解析的&ldquo;

1.什么是DNS? (Domain Name System)域名系统. DNS其实实现的功能很简单也很有效,它能够让用户可以不用记得那些经常要访问服务器的ip地址,直接要你输入类似拼音格式的就可以访问到那些数字串的ip地址.假设以61.120.155.14(举个例子),我们总是用这些数字进行网页服务器的访问岂不是很蛋疼,毕竟很多人还是对文字甚至拼音字母更容易让正常人记忆.这就是DNS的功能. 当然,它不仅能把那些你输入的拼音字母转换成ip地址的数字串,它还支持把那些数字串转换成你想访问的实际的网

DNS服务正向、反向解析区域,主/从区域数据库复制,子域授权及基本安全控制

DNS是应用层的协议,默认使用UDP的53端口,也会用到TCP的53端口. DNS名称解析方式: 名称 --> IP:正向解析 第一段这种方式叫递归查询,只发出去一次请求,就给它返回答案:第二段这种方式就迭代查询,要发出多次请求,需要自己查询不同域名,最后才返回答案:这就是DNS的查询类型. 一般内网递归,外网迭代. IP --> 名称:反向解析 每一层服务器都有各自的数据库,来存储各自负责的网段,这与正向解析的数据库是两个各自独立的数据库. 一次完整的查询请求经过的流程: Client --

3、DNS服务器功能(正向、反向解析)

实验目的: 建立gr.org域的主名称服务器.解析: 名称 IP 用途 ns.gr.org        192.168.170.3          名称服务器 www.gr.org     192.168. 170.3         正规名 bbs.gr.org      192.168. 170.3         别名 mail.gr.org      192.168. 170.4        邮件服务器 下面蓝色的字体都为解释,不用写:红色字母为命令 正向解析:域名解析为IP地址

DNS服务正向、反向解析以及主从同步实操(有图有字,易做易懂)

DNS解析大体实操分为:1.DNS正向解析2.DNS反向解析3.DNS主从同步 一.DNS正向解析 1.安装bind工具包通过在线yum库进行安装bind软件包,构建DNS服务.2.修改全局配置文件 只需要修改两个选项:(1)将listen-on后面的IP地址修改为自身IP,作用为监听本机53端口.无论是谁通过本机DNS服务进行域名解析,都能够监听到:(2)将allow-query后面更改为any--这里允许任何人使用本机的DNS服务 3.修改区域配置文件 添加域名和区域数据文件名的文件,在zo

利用百度API(js),怎样通过地址获取经纬度

根据经纬度找到具体地址:http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥如:http://api.map.baidu.com/geocoder?location=31.407452,121.490523&output=json&key=6eea93095ae93db2c77be9ac910ff311 根据具体地址找到经纬度:http://api.map.baidu.com/geoc

搭建DNS服务器:正向解析区域、反向解析区域、主从DNS

在搭建DNS服务器之前,可以了解一下在什么情况才需要搭建DNS服务器,以及在什么情况下不需要搭建DNS服务器.在此之前,需要了解DNS中域(domain)和区域(zone)的基本概念,以及DNS资源记录的类型,如果对此不熟悉,可以参考我写的上一篇文章<Caching only DNS的设置与forwarding功能>. 一.为什么需要自己搭建DNS服务器? 搭建DNS服务器的原因大致有三点: (1)一般公司都有多台Server需要接入互联网上并提供服务,此时公司需要向ISP申请一个域(doma

DNS的正向解析与反向解析

DNS系统系统在网络中的作用就是维护着一个地址数据库,其中记录了各种主机域名和IP地址的对应关系,以便为客户程序提供正向或反向的地址查询服务. 正向解析:根据域名查询IP地址,是DNS最基本也是最常用的功能 反向解析:根据IP地址查询域名,不怎么常用 下面我用一台linux虚拟机来完成这两个实验 进入linux界面,首先安装bind安装文件,bind是一个提供域名服务的DNS服务程序,在系统光盘中这个安装包是自带的,可以用rpm命令直接安装 要实现DNS服务就需要对上图的三个文件进行配置,它们分

搭建DNS服务,正向解析和反向解析搭建DNS服务器

搭建DNS服务器 DNS系统在网络中的作用:维护着一个地址数据库,其中记录了各种主机域名与IP地址的对于关系,以方便为客户程序提供正向或反向的地址查询服务,即正向解析与方向解析. 正向解析:将指定的域名解析为相对应的IP地址. 反向解析:将制定的IP地址解析为相对应的域名.   实验环境:在虚拟机Linux(redhat6.5)系统上搭建DNS服务,实现域名与IP地址的正向解析和反向解析. 一.正向解析 1. 安装DNS软件包 2. 更改主配置文件,开启监听端口53. 3. 更改区域配置文件 4

Linux从DNS服务器反向解析配置

1.配置指定区域的从服务器角色 2.检查从服务器配置文件是否有问题 3.修改主服务器反向区域数据库文件 添加从服务器的反向解析地址 4.检查主服务器的配置文件和区域数据库文件 5.重载主从服务器的配置文件和区域数据库文件 6.在从服务器的slave/目录下查看文件 7.应用测试 原文地址:http://blog.51cto.com/yueyue207/2151600