Adroid利用百度地图将经纬度转换为地址信息

准备工作:

1、拥有百度账号

2、为应用申请了apk

3、下载相关的sdk并放在了libs下,这里使用的是 Android SDK v4.1.1

4、在AndroidManifest中添加了足够的permission权限,及其他配置,参照官网提供的Demo中的AndroidManifest完成


正题:

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

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

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

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

public void setOnGetGeoCodeResultListener(OnGetGeoGoderResultListenerlistener)

      

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

emptypublic class BdMapUtils {
	// private MKSearch mkSearch;
	// 创建地理编码检索实例
	static GeoCoder geoCoder = GeoCoder.newInstance();

	/**
	 * 将经度纬度反向译为文字地址
	 * 
	 * @param lon
	 *            经度
	 * @param lat
	 *            纬度
	 * @param listener
	 *            OnGetGeoCoderResultListener监听器,对接收到的结果进行处理
	 */
	public static void reverseGeoParse(double lon, double lat,
			OnGetGeoCoderResultListener listener) {
		geoCoder.setOnGetGeoCodeResultListener(listener);
		LatLng pt1 = new LatLng(lat, lon);
		geoCoder.reverseGeoCode(new ReverseGeoCodeOption().location(pt1));
	}
}


      调用部分

double longitude = 117.11666;
double latitude = 54.12300;//应为百度地图对应的经纬度
BdMapUtils.reverseGeoParse(Double.parseDouble(longitude,latitude,new OnGetGeoCoderResultListener(){
			//获取正向解析结果时执行函数
	    	@Override
			public void onGetGeoCodeResult(GeoCodeResult arg0) {
			}

			//获取反向解析结果时执行函数
			@Override
			public void onGetReverseGeoCodeResult(ReverseGeoCodeResult result) {
				 if (result == null || result.error != SearchResult.ERRORNO.NO_ERROR) {
				 // 没有检测到结果
			      Toast.makeText(LocationActivity.this, "抱歉,未能找到结果!", Toast.LENGTH_LONG);
				 }else{得到结果后处理方法
				      Toast.makeText(LocationActivity.this, "地址为:"+result.getAddress(), Toast.LENGTH_LONG);
				 }
			}
	    	
	    });

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

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

public class MyApplication extends Application {
	@Override
	public void onCreate() {
		super.onCreate();
		SDKInitializer.initialize(this);
	}

}

参考文档:

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

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值