吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5450|回复: 3
收起左侧

[分享] 利用Baidu API正向和反向解析地址

[复制链接]
楚轩 发表于 2015-8-13 18:44
在开发过程中,假如遇到了需要计算两地址之间的距离,或者是需要在地图上定位某个地点,之类之类的需求,就会用到百度地图或者高德地图提供的API去解析一个地址,包括正向解析和反向解析。正向解析是输入一个地址,返回一个经纬度,相当于我们在搜索框搜索一个地址然后在地图上打个点。反向解析则是输入一个经纬度,返回一个地址的列表,这个列表是表示这个经纬度附近可能有的东西。百度地图,解析过程实际上就是向百度的服务器接口通过一个特定格式的URL发送一个带有数据信息的Http请求,然后获得一个带有json数据的Http相应。所以,开发者需要完成的工作,就是把json数据包装到合适的url,以及接受到json数据之后解析一下。不多说,上代码正向解析和反向解析直接封装到类BaiduGeocoder里面

[Asm] 纯文本查看 复制代码

<code class="hljs" lasso="">/**
 * 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 = [url]http://api.map.baidu.com/geocoder/v2/?[/url]
                +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 = [url]http://api.map.baidu.com/geocoder/v2/?[/url]                 + 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();
    }
}</string,string></string,></string,string></string,string></string,string></string,string></code>


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Very_good 发表于 2015-8-13 18:56
沙发还空人?  我来插进了

顶起
头像被屏蔽
helius 发表于 2015-8-13 18:57
黄丢丢 发表于 2015-8-14 02:38
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-6 12:09

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表