你的位置:首页 > 操作系统

[操作系统]Android百度地图API集成三《搜索》


  书接上回↑

  一、基础地图界面地址:http://www.cnblogs.com/dhr125/p/5969980.html

  二、地图定位地址:http://www.cnblogs.com/dhr125/p/5970118.html

 

搜索功能

1.在

 1 <LinearLayout 2     android:layout_width="match_parent" 3     android:layout_height="wrap_content"> 4     <EditText 5       android:layout_width="0dip" 6       android:layout_height="wrap_content" 7       android:layout_weight="1" 8       android:hint="请输入搜索地址" 9       android:id="@+id/etsearch"/>10     <Button11       android:layout_width="wrap_content"12       android:layout_height="wrap_content"13       android:text="搜索"14       android:id="@+id/btnsearch"/>15   </LinearLayout>

 2.按照下图位置,找到PoiSearchDemo.java,准备复制代码

3.复制下面一段代码到onCreate中,然后让Activity实现OnGetPoiSearchResultListener 

 // 初始化搜索模块,注册搜索事件监听  mPoiSearch = PoiSearch.newInstance();  mPoiSearch.setOnGetPoiSearchResultListener(this);

4.实现后会重写下面3个方法

 1  @Override 2   public void onGetPoiResult(PoiResult poiResult) { 3  4   } 5  6   @Override 7   public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) { 8  9   }10 11   @Override12   public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {13 14   }

 

5.向重写的方法onGetPoiResult中加入代码,然后根据报错修改代码

 1 if (poiResult == null || poiResult.error == SearchResult.ERRORNO.RESULT_NOT_FOUND) { 2       Toast.makeText(MainActivity.this, "未找到结果", Toast.LENGTH_LONG) 3           .show(); 4       return; 5     } 6     if (poiResult.error == SearchResult.ERRORNO.NO_ERROR) { 7       mBaiduMap.clear(); 8       PoiOverlay overlay = new MyPoiOverlay(mBaiduMap); 9       mBaiduMap.setOnMarkerClickListener(overlay);10       overlay.setData(poiResult);11       overlay.addToMap();12       overlay.zoomToSpan();13           showNearbyArea(center, radius);14 15       return;16     }

6.按照下面位置找到两个类,复制到项目中

7.向工程中加入代码

 1 private class MyPoiOverlay extends PoiOverlay { 2  3     public MyPoiOverlay(BaiduMap baiduMap) { 4       super(baiduMap); 5     } 6  7     @Override 8     public boolean onPoiClick(int index) { 9       super.onPoiClick(index);10       PoiInfo poi = getPoiResult().getAllPoi().get(index);11       // if (poi.hasCaterDetails) {12       mPoiSearch.searchPoiDetail((new PoiDetailSearchOption())13           .poiUid(poi.uid));14       // }15       return true;16     }17   }

 1 /** 2    * 对周边检索的范围进行绘制 3    * @param center 4    * @param radius 5   */ 6   public void showNearbyArea( LatLng center, int radius) { 7   16   }

 

 8.将下面两个成员变量加入成员位置

 LatLng center = null; int radius = 5000;

  并且,在 定位SDK监听函数MyLocationListenner中if判断后,实例化center,如下

 @Override    public void onReceiveLocation(BDLocation location) {      // map view 销毁后不在处理新接收的位置      if (location == null || mMapView == null) {        return;      }       center = new LatLng(location.getLatitude(),location.getLongitude());

 9.找到自定义的输入框和按钮,监听

 

 1     etsearch = (EditText) findViewById(R.id.etsearch); 2     Button btnsearch = (Button) findViewById(R.id.btnsearch); 3     btnsearch.setOnClickListener(new View.OnClickListener() { 4       @Override 5       public void onClick(View v) { 6         PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption().keyword(etsearch.getText() 7             .toString()).sortType(PoiSortType.distance_from_near_to_far).location(center) 8             .radius(radius).pageNum(10); 9         mPoiSearch.searchNearby(nearbySearchOption);10       }11     });

 

 以上,即可实现搜索功能