正题:
实现经纬度转为地址信息,主要用到的类是GeoCoder ,通过newInstance获得类的实例。
用到的方法为 public boolean reverseGeoCode (ReverseGeoCodeOption option) 即反向解析,发起反地理编码请求(经纬度->地址信息)
与其对应的是方法为 public boolean geocode ( GeoCodeOption option) ,正向解析,(地址信息->经纬度 )。
reverseGeoCode和 geocode只是进行了对应的查询,并不立即返回查询结果,而是通过设置监听器,监听返回结果,方法为:
public void setOnGetGeoCodeResultListener ( OnGetGeoGoderResultListener listener)
将实现部分封装在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