266.高德地图的使用---开启POI兴趣点搜索(6)

通过关键字检索、周边检索以及多边形检索,或者任意形式得到的高德POI ID信息,可通过ID检索来获取POI完整详细信息。

实现步骤如下:

1、继承 OnPoiSearchListener 监听。

2、构造 PoiSearch 对象,并设置监听。对于ID检索,query参数设置成 null。

poiSearch = new PoiSearch(this, null);
poiSearch.setOnPoiSearchListener(this);

3、调用 PoiSearch 的 searchPOIIdAsyn(java.lang.String poiID) 方法发送请求。

poiSearch.searchPOIIdAsyn(ID);// 异步搜索

4、通过回调接口 onPoiItemSearched 解析返回的结果。由于是检索具体的某一个POI,直接回调该POI对象 PoiItem。

@Override
public void onPoiItemSearched(PoiItem item, int rCode) {
        //获取PoiItem获取POI的详细信息
}

exe:

//向固定的经纬度添加一个标记
    protected void addMarkerToMap(double latitude, double longitude)
    {
        _selfMarker = _amap.addMarker(new MarkerOptions().position(new LatLng(latitude, longitude))
                .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.location_marker))));
    }


//开启POI兴趣点搜索
    protected  void doSerarchPOI() {
        _bt_startOrder.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //开始搜索POI兴趣点

                Log.e("Amap", "button onclick");

                //拿到用户搜索地址的关键字
                String dstAddr = _attv_dstAddr.getText().toString();

                //开始POI搜索
                // 1 创建一个搜索的条件对象 query
                PoiSearch.Query query = new PoiSearch.Query(dstAddr, "", _city);

                // 2 创建一个POISearch句柄和query关联
                PoiSearch poiSearch = new PoiSearch(getApplicationContext(), query);

                // 3 给search绑定一个回调函数
                poiSearch.setOnPoiSearchListener(new PoiSearch.OnPoiSearchListener() {
                    @Override
                    public void onPoiSearched(PoiResult poiResult, int i) {
                        //处理得到的POI兴趣点集合 poiResult

                        if (i != 1000)  {
                            Log.e("Amap", "poi Search error code = "+ i);
                            return ;
                        }


                        //搜索成功
                        List<PoiItem> poiList = poiResult.getPois();

                        for (int index = 0; index < poiList.size(); index++) {
                            //此时 表示处理每个已经搜索到的兴趣点

                            Log.e("Amap", "搜索到的兴趣点有");
                            PoiItem item = poiList.get(index);

                            Log.e("Amap", "poi title =" + item.getTitle()+
                            "latitude = " +item.getLatLonPoint().getLatitude()+
                            "longitude = "+ item.getLatLonPoint().getLongitude());

                            //给每个搜索到的标记点画一个标记
                            addMarkerToMap(item.getLatLonPoint().getLatitude(),
                                          item.getLatLonPoint().getLongitude());


                            //默认以第一个兴趣点为我们坐标点
                            _endPoint = new LatLonPoint(item.getLatLonPoint().getLatitude(),
                                                      item.getLatLonPoint().getLongitude());


                            drawRouteLine();

                            if (index == 0) {
                                break;
                            }

                        }


                    }

                    //处理单个的数据
                    @Override
                    public void onPoiItemSearched(PoiItem poiItem, int i) {

                    }
                });

                // 4 启动搜索
                poiSearch.searchPOIAsyn();
            }
        });
    }

参考文档:https://lbs.amap.com/api/android-sdk/guide/map-data/poi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值