高德地图搜索附近的实现

来源:互联网 发布:电子信息工程学软件 编辑:程序博客网 时间:2024/04/30 12:35

        最近项目中有用到搜索附近4S店和加油站的功能,于是我写了个Demo,输入你想查找的内容,就可以显示相关的信息.效果如下:

        PS:listview中有两个纬度,后一个应该是经度的,不小心写错了名称。

      

     这里使用的是高德地图,先需要去高德SDK网站申请一个key,下载相应的SDK导入工程,需要地图SDK和定位SDK,网站在此,然后配置AndroidManifest文件。

     配置对应权限:  

 <!-- 地图包、搜索包需要的基础权限 -->   <uses-permission android:name="android.permission.INTERNET" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />    <uses-permission android:name="android.permission.READ_PHONE_STATE" />    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />    <!-- 定位包、导航包需要的额外权限(注:基础权限也需要) -->    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
     配置key  

 <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <meta-data            android:name="com.amap.api.v2.apikey"            android:value="0f9baee65aefab8f09065d4e60942305" /> <!--输入你申请的key  -->
    配置定位的服务

 <service android:name="com.amap.api.location.APSService" >
   现在编写代码了。先实现定位,获取手机的经纬度,先创建一个AMapLocationClient 对象,  然后设置定位回调监听,需要创建一个mLocationListener对象   

// 声明定位回调监听器public AMapLocationListener mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation != null) {        if (amapLocation.getErrorCode() == 0) {        //定位成功回调信息,设置相关消息        Latitude=amapLocation.getLatitude();//获取纬度            Longitude=amapLocation.getLongitude();//获取经度             } else {              //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。        Log.e("AmapError","location Error, ErrCode:"            + amapLocation.getErrorCode() + ", errInfo:"            + amapLocation.getErrorInfo());        }    }}};
    再获取定位参数配置AMapLocationClientOption的实例,进行一些参数的配置,比如定位模式,间隔等。   

  <pre name="code" class="java">                // 初始化定位参数mLocationOption = new AMapLocationClientOption();// 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);// 设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);// 设置是否只定位一次,默认为falsemLocationOption.setOnceLocation(false);// 设置是否强制刷新WIFI,默认为强制刷新mLocationOption.setWifiActiveScan(true);// 设置是否允许模拟位置,默认为false,不允许模拟位置mLocationOption.setMockEnable(false);// 设置定位间隔,单位毫秒,默认为2000msmLocationOption.setInterval(2000);

      给客户端对象设置参数,开始监听

               // 给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);// 启动定位mLocationClient.startLocation();
      在mLocationListener的回调监听里可以获得经纬度,下一步就是搜索附近的实现了,PS: 别忘了在onDestory方法里关闭定位.

      先通过new PoiSearch.Query(keyword, type,cityCode )创建一个Query对象。 传入三个参数,keyword是你要查找的内容,type是要查找的类型,默认为:生活服务、餐饮服务、商务住宅,共有20种,cityCode是城市编号,可以传空值,空值表示在全国范围里查找。获取Query对象后,可以设置返回多少条结果,查第几页。传入context和Query对象获得PoiSearch对象,通过setBound方法设置中心点和查找区域,中心点则是之前获取的定位的经纬度。 

     之后设置回调监听器,然后调用searchPOIAsyn()方法开始搜索。    

query = new PoiSearch.Query(content, "汽车维修|修车服务", "");// keyWord表示搜索字符串,第二个参数表示POI搜索类型,默认为:生活服务、餐饮服务、商务住宅// 共分为以下20种:汽车服务|汽车销售|// 汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|// 住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|// 金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施// cityCode表示POI搜索区域,(这里可以传空字符串,空字符串代表全国在全国范围内进行搜索)query.setPageSize(10);// 设置每页最多返回多少条poiitemquery.setPageNum(1);// 设置查第一页PoiSearch poiSearch = new PoiSearch(this, query);//如果不为空值if(Latitude!=0.0&&Longitude!=0.0){poiSearch.setBound(new SearchBound(new LatLonPoint(Latitude,Longitude), 6000));// 设置周边搜索的中心点以及区域poiSearch.setOnPoiSearchListener(this);// 设置数据返回的监听器poiSearch.searchPOIAsyn();// 开始搜索}else{Toast.makeText(MainActivity.this, "定位失败", 0).show();}

   返回的结果在onPoiSearched方法里,就是参数PoiResult,这里我用listview展示了结果。result.getPois()返回类型为Poiltem的Arraylist集合,Poiltem有许多属性,例如通过getTel()获取电话,getDistance()获取距离,getLatLonPoint获取纬度等。   

    

@Overridepublic void onPoiSearched(PoiResult result, int code) { MyAdapter mAdapter=new MyAdapter(MainActivity.this,result.getPois());    result_listview.setAdapter(mAdapter);  }

就这样完成了附近搜索功能,大家可以自己尝试下。

      Demo地址:点击打开链接

 

       




0 0
原创粉丝点击