您的位置:首页 > 其它

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

2016-12-09 14:58 459 查看
准备工作:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: