百度地图API之根据经纬度查询地址信息(Android)

本文主要讲解如何通过百度地图API根据某个经纬度值(地理坐标)查询对应的地址信息以及该地址周边的POI(Point of Interest,兴趣点)信息。
      百度地图移动版API不仅包含构建地图的基本接口,还集成了众多搜索服务,包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索、地址信息查询等。
      百度地图移动版API提供的搜索服务主要是通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener来实现异步搜索服务。首先需要自定义一个MySearchListener类,它实现MKSearchListener接口,然后通过实现接口中不同的回调方法,来获得对应的搜索结果。MySearchListener类的定义如下:
     

[java]  view plain copy
  1. /** 
  2.  * 实现MKSearchListener接口,用于实现异步搜索服务,得到搜索结果 
  3.  *  
  4.  * @author liufeng 
  5.  */  
  6. public class MySearchListener implements MKSearchListener {  
  7.     /** 
  8.      * 根据经纬度搜索地址信息结果 
  9.      * @param result 搜索结果 
  10.      * @param iError 错误号(0表示正确返回) 
  11.      */  
  12.     @Override  
  13.     public void onGetAddrResult(MKAddrInfo result, int iError) {  
  14.     }  
  15.   
  16.     /** 
  17.      * 驾车路线搜索结果 
  18.      * @param result 搜索结果 
  19.      * @param iError 错误号(0表示正确返回) 
  20.      */  
  21.     @Override  
  22.     public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {  
  23.     }  
  24.   
  25.     /** 
  26.      * POI搜索结果(范围检索、城市POI检索、周边检索) 
  27.      * @param result 搜索结果 
  28.      * @param type 返回结果类型(11,12,21:poi列表 7:城市列表) 
  29.      * @param iError 错误号(0表示正确返回) 
  30.      */  
  31.     @Override  
  32.     public void onGetPoiResult(MKPoiResult result, int type, int iError) {  
  33.     }  
  34.   
  35.     /** 
  36.      * 公交换乘路线搜索结果 
  37.      * @param result 搜索结果 
  38.      * @param iError 错误号(0表示正确返回) 
  39.      */  
  40.     @Override  
  41.     public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {  
  42.     }  
  43.   
  44.     /** 
  45.      * 步行路线搜索结果 
  46.      * @param result 搜索结果 
  47.      * @param iError 错误号(0表示正确返回) 
  48.      */  
  49.     @Override  
  50.     public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {  
  51.     }  
  52. }  

说明:上面的类定义只是在说明MKSearchListener类的5个方法的作用,全都是空实现,并未给出具体的实现。根据你要检索的内容,再去具体实现上面对应的方法,就能获取到搜索结果。例如:1)你想通过一个地理坐标(经纬度值)来搜索地址信息,那么只需要具体实现上面的onGetAddrResult()方法就能得到搜索结果;2)如果你想搜索驾车路线信息,只需要具体实现onGetDrivingRouteResult()方法就能得到搜索结果。

紧接着,需要初始化MKSearch类:
     

[java]  view plain copy
  1. // 初始化MKSearch  
  2. mMKSearch = new MKSearch();  
  3. mMKSearch.init(mapManager, new MySearchListener());  

经过上面两步之后,就可以通过调用MKSearch所提供的一些检索方法来搜索你想要的信息了。
      下面给出一个具体的示例:根据某个经纬度值(地理坐标)查询对应的地址信息以及该地址周边的POI(Point of Interest,兴趣点)信息。
1)布局文件res/layout/query_address.xml
     
[xhtml]  view plain copy
  1. xml version="1.0" encoding="utf-8"?>  
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">  
  5.     <LinearLayout   
  6.         android:orientation="vertical"  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="fill_parent"  
  9.         >  
  10.         <TextView  
  11.             android:layout_width="fill_parent"  
  12.             android:layout_height="wrap_content"  
  13.             android:text="经度:"  
  14.         />  
  15.         <EditText android:id="@+id/longitude_input"  
  16.             android:layout_width="fill_parent"  
  17.             android:layout_height="wrap_content"   
  18.             android:text="106.720397"  
  19.         />  
  20.           
  21.         <TextView  
  22.             android:layout_width="fill_parent"  
  23.             android:layout_height="wrap_content"  
  24.             android:text="纬度:"  
  25.         />  
  26.         <EditText android:id="@+id/latitude_input"  
  27.             android:layout_width="fill_parent"  
  28.             android:layout_height="wrap_content"   
  29.             android:text="26.597239"  
  30.         />  
  31.       
  32.         <Button android:id="@+id/query_button"  
  33.             android:layout_width="wrap_content"  
  34.             android:layout_height="wrap_content"  
  35.             android:layout_gravity="right"  
  36.             android:text="地址查询"  
  37.         />  
  38.           
  39.         <TextView android:id="@+id/address_text"  
  40.             android:layout_width="wrap_content"  
  41.             android:layout_height="wrap_content"  
  42.         />  
  43.           
  44.     <uses-permission android:name="android.permission.INTERNET" />  
  45.       
  46.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  47.       
  48.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  49.       
  50.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  51.       
  52.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  53.       
  54.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  55.       
  56.     <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
  57. manifest> 

百度地图API之根据经纬度查询地址信息(Android)_第1张图片

程序在模拟器上运行的初始效果如上图所示。可以看出,地图并没有显示出来,这和我们在设计时布局时所设想的一样;另外两个输入框中也分别显示了默认给出的经纬度值。
      点击“地址查询”按钮后,将看到如下图所示包含了查询结果的界面:


百度地图API之根据经纬度查询地址信息(Android)_第2张图片

说明:图上的“贵州省贵阳市云岩区普陀路”正是我们要查询的地理坐标(经度:106.720397,纬度:26.597239)所对应的地址信息;同时该地址信息下方还显示出了该地址附近的10个兴趣点(POI),每个兴趣点分别包含了“名称”、“地址”、“经纬度”、“电话”、“邮编”和“兴趣点类型”信息。

备注:如果本文的示例继续做下去,就应该将MapView显示出来,同时结合第8篇文章“[008] 百度地图API之ItemizedOverlay的使用(Android)”所介绍的内容将地址信息和兴趣点标注在地图上。我想这两方面的内容都已做过详细讲解并给出了示例,再来实现这个应该并不是什么难事,看文章的你就动动手来完成它吧!


你可能感兴趣的:(百度地图API之根据经纬度查询地址信息(Android))