准备工作:
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);
}
}
});
需要通过编写自己的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