Android百度地图将经纬度转换为地址信息

正题:

       实现经纬度转为地址信息,主要用到的类是GeoCoder,通过newInstance获得类的实例。

       用到的方法为 public boolean reverseGeoCode(ReverseGeoCodeOption option)即反向解析,发起反地理编码请求(经纬度->地址信息)

       与其对应的是方法为 public boolean geocode(GeoCodeOption option),正向解析,(地址信息->经纬度)。

        reverseGeoCode和geocode只是进行了对应的查询,并不立即返回查询结果,而是通过设置监听器,监听返回结果,方法为:

public void setOnGetGeoCodeResultListener(OnGetGeoGoderResultListenerlistener)

      

       将实现部分封装在BdUtils类中,这里仅实现了反向解析,即经纬度->地址信息,其他功能可根据自己需要添加

[plain]  view plain  copy
  1. emptypublic class BdMapUtils {  
  2.     // private MKSearch mkSearch;  
  3.     // 创建地理编码检索实例  
  4.     static GeoCoder geoCoder = GeoCoder.newInstance();  
  5.   
  6.     /**  
  7.      * 将经度纬度反向译为文字地址  
  8.      *   
  9.      * @param lon  
  10.      *            经度  
  11.      * @param lat  
  12.      *            纬度  
  13.      * @param listener  
  14.      *            OnGetGeoCoderResultListener监听器,对接收到的结果进行处理  
  15.      */  
  16.     public static void reverseGeoParse(double lon, double lat,  
  17.             OnGetGeoCoderResultListener listener) {  
  18.         geoCoder.setOnGetGeoCodeResultListener(listener);  
  19.         LatLng pt1 = new LatLng(lat, lon);  
  20.         geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(pt1));  
  21.     }  
  22. }  


      调用部分

[plain]  view plain  copy
  1. double longitude = 117.11666;  
  2. double latitude = 54.12300;//应为百度地图对应的经纬度  
  3. BdMapUtils.reverseGeoParse(Double.parseDouble(longitude,latitude,new OnGetGeoCoderResultListener(){  
  4.             //获取正向解析结果时执行函数  
  5.             @Override  
  6.             public void onGetGeoCodeResult(GeoCodeResult arg0) {  
  7.             }  
  8.   
  9.             //获取反向解析结果时执行函数  
  10.             @Override  
  11.             public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {  
  12.                  if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {  
  13.                  // 没有检测到结果  
  14.                   Toast.makeText(LocationActivity.this, "抱歉,未能找到结果!", Toast.LENGTH_LONG);  
  15.                  }else{得到结果后处理方法  
  16.                       Toast.makeText(LocationActivity.this, "地址为:"+result.getAddress(), Toast.LENGTH_LONG);  
  17.                  }  
  18.             }  
  19.               
  20.         });  

运行时报错:you have not supplyed the global app context info from SDKInitializer.initialize(Context) function.

需要通过编写自己的Application类,如叫MyApplication,继承自系统的Application类,在其onCreate函数中添加语句SDKInitializer.initialize(this);

[plain]  view plain  copy
  1. public class MyApplication extends Application {  
  2.     @Override  
  3.     public void onCreate() {  
  4.         super.onCreate();  
  5.         SDKInitializer.initialize(this);  
  6.     }  
  7.   
  8. }  

参考文档:

http://wiki.lbsyun.baidu.com/cms/androidsdk/doc/1025v4.1.1/index.html

http://blog.csdn.net/crazy1235/article/details/43377545

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值