高德地图

全部问答 > 技术分享
HappyHacking

Android【学习心得】- 高德地图开发【输入提示搜索】【第十二周】【更新完毕】

Android【学习心得】- 高德地图开发【第十二周】【第二十二天】【周一】

摘要:高德地图之覆盖物显示【兴趣点搜索(三)】


昨天分享了关键字搜索,今天来分享下周边搜索,使用 PoiSearch.SearchBound(LatLonPoint center, int radiusInMeters) 设置周边圆形搜索范围。参数 “center” 为搜索的中心点坐标,“radiusInMeters” 为周边搜索的范围。

和关键字搜索类似,我们只要修改两个方法就可以了,先修改doSearchQuery():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
  * 开始进行poi搜索
  */
protected  void  doSearchQuery() {
     showProgressDialog(); // 显示进度框
     /**关键字搜索*/
//        currentPage = 0;
//        // 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
//        query = new PoiSearch.Query(keyWord, "", cityET.getText().toString());
//        // 设置每页最多返回多少条poiitem
//        query.setPageSize(10);
//        // 设置查第一页
//        query.setPageNum(currentPage);
//
//        poiSearch = new PoiSearch(this, query);
//        poiSearch.setOnPoiSearchListener(this);
//        poiSearch.searchPOIAsyn();
  
     currentPage =  0 ;
     // 第一个参数表示搜索字符串,第二个参数表示POI搜索类型
     // 第三个参数表示POI搜索区域(空字符串代表全国)
     query =  new  PoiSearch.Query(keyWord,  "餐厅" "杭州市" );
     query.setPageSize( 10 ); // 设置每页最多返回多少条poiitem
     query.setPageNum(currentPage); //设置查第一页
     PoiSearch poiSearch =  new  PoiSearch( this , query);
     // 搜索杭州市政府附件1000米范围
     poiSearch.setBound( new  PoiSearch.SearchBound( new  LatLonPoint( 30.243753 120.18252 ),  1000 ));
     poiSearch.setOnPoiSearchListener( this );
     poiSearch.searchPOIAsyn();
}


然后是修改搜索之后回调的方法onPoiSearched:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/**
  * POI信息查询回调方法
  */
@Override
public  void  onPoiSearched(PoiResult poiResult,  int  rCode) {
     Log.d(TAG,  "onPoiSearched, rCode = "  + rCode);
     dissmissProgressDialog(); // 隐藏对话框
//        if (rCode == 0) {
//            // 搜索poi的结果
//            if (poiResult != null && poiResult.getQuery() != null) {
//                // 是否是同一条
//                if (poiResult.getQuery().equals(query)) {
//                    poiResult = poiResult;
//                    // 取得搜索到的poiitems有多少页
//                    // 取得第一页的poiitem数据,页数从数字0开始
//                    List<PoiItem> poiItems = poiResult.getPois();
//                    // 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
//                    List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();
//
//                    if (poiItems != null && poiItems.size() > 0) {
//                        mAMap.clear();// 清理之前的图标
//                        PoiOverlay poiOverlay = new PoiOverlay(mAMap, poiItems);
//                        poiOverlay.removeFromMap();
//                        poiOverlay.addToMap();
//                        poiOverlay.zoomToSpan();
//                    } else if (suggestionCities != null
//                            && suggestionCities.size() > 0) {
//                        showSuggestCity(suggestionCities);
//                    } else {
//                        Toast.makeText(this, "没有搜索到相关数据", Toast.LENGTH_SHORT).show();
//                    }
//                }
//            } else {
//                Toast.makeText(this, "没有搜索到相关数据", Toast.LENGTH_SHORT).show();
//            }
//        } else if (rCode == 27) {
//            Toast.makeText(this, "搜索失败,请检查网络连接!", Toast.LENGTH_SHORT).show();
//        } else if (rCode == 32) {
//            Toast.makeText(this, "key验证无效!", Toast.LENGTH_SHORT).show();
//        } else {
//            Toast.makeText(this, "未知错误,请稍后重试!错误码为" + rCode, Toast.LENGTH_SHORT).show();
//        }
  
     if  (rCode ==  0 ) {
         // 搜索POI的结果
         if  (poiResult !=  null  && poiResult.getQuery() !=  null ) {
             // 是否是同一条
             if  (poiResult.getQuery().equals(query)) {
                 poiResult = poiResult;
                 // 取得搜索到的poiitems有多少页
                 int  resultPages = poiResult.getPageCount();
                 // 取得第一页的poiitem数据,页数从数字0开始
                 List poiItems = poiResult.getPois();
                 // 当搜索不到poiitem数据时,会返回含有搜索关键字的城市信息
                 List suggestionCities = poiResult.getSearchSuggestionCitys();
  
                 dissmissProgressDialog(); // 隐藏对话框
                 if  (poiItems !=  null  && poiItems.size() >  0 ) {
                     mAMap.clear(); //清理之前的图标
                     PoiOverlay poiOverlay =  new  PoiOverlay(mAMap, poiItems);
                     poiOverlay.removeFromMap();
                     poiOverlay.addToMap();
                     poiOverlay.zoomToSpan();
                 else  if  (suggestionCities !=  null
                         && suggestionCities.size() >  0 ) {
                     showSuggestCity(suggestionCities);
                 else  {
                     Toast.makeText( this "没有搜索到相关数据" , Toast.LENGTH_SHORT).show();
                 }
             }
         else  {
             dissmissProgressDialog(); // 隐藏对话框
             Toast.makeText( this "没有搜索到相关数据" , Toast.LENGTH_SHORT).show();
         }
     else  {
         dissmissProgressDialog(); // 隐藏对话框
         Toast.makeText( this "搜索失败,请检查网络连接!" , Toast.LENGTH_SHORT).show();
     }
}


最后修改一下按钮点击的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
  * 点击搜索按钮
  */
public  void  searchButton() {
//        keyWord = keyWordET.getText().toString();
//        if ("".equals(keyWord)) {
//            Toast.makeText(this, "请输入搜索关键字", Toast.LENGTH_SHORT).show();
//            return;
//        } else {
//            doSearchQuery();
//        }
  
     doSearchQuery();
}


这样就OK啦,运行起来看看:
因为我直接在代码里面写好了数据,所以直接点击开始搜索:

高德地图_第1张图片


搜索到结果:

高德地图_第2张图片


真的非常简单。
今天就先分享到这里了。

你可能感兴趣的:(高德地图)