利用Baidu API正向和反向解析地址
来源:互联网 发布:mpp数据库是否需要 编辑:程序博客网 时间:2024/04/27 13:49
在开发过程中,假如遇到了需要计算两地址之间的距离,或者是需要在地图上定位某个地点,之类之类的需求,就会用到百度地图或者高德地图提供的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(); }}
0 0
- 利用Baidu API正向和反向解析地址
- java如何利用google map api V3进行地址解析、反向地址解析
- dns正向解析,反向解析,双向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS中的正向解析与反向解析
- DNS正向解析与反向解析配置
- 反向代理和正向代理
- 正向代理和反向代理
- 正向功和反向功
- 正向代理和反向代理
- 正向代理和反向代理
- 正向代理 和 反向代理
- 哈尔滨酒店发</option>票
- Unity3D之AssetBundle【2】AssetBundle流程分析
- 哈尔滨住宿酒店发</option>票
- 宁波住宿酒店发</option>票
- 吉林开发</option>票
- 利用Baidu API正向和反向解析地址
- ConditionalWeakTable<TKey, TValue>使编译器可以将对象字段动态附加到托管对象。
- python网络编程(6)
- 【微信运营】数据是会骗人的!赶紧揪住骗子!
- 输出单向链表中倒数第k个结点
- 昆明办大专学历证书
- 昆明办本科学历证书
- 昆明制作证件
- 在工程中UCOSII源码无法修改