安卓SDK——百度地图(检索功能)

接上百度地图(切换地图类型)

https://blog.csdn.net/nishigesb123/article/details/89669042

依旧?

http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/poi


POI检索

概述

Point of Interest,即“兴趣点”。

在地理信息系统中,一个POI可以是一栋房子、一个景点、一个邮筒或者一个公交站等。

百度地图SDK提供三种类型的POI检索:

  • 城市内检索
  • 周边检索
  • 区域检索(即矩形区域检索)

POI城市内检索(关键字检索)

关键字检索适用于在某个城市内搜索某个名称相关的POI,例如:查找“北京市”的“小吃”。

创建步骤

1、创建POI检索实例

mPoiSearch = PoiSearch.newInstance();

2、创建POI检索监听器

OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
    @Override
    public void onGetPoiResult(PoiResult poiResult) {

    }
    @Override
    public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {

    }
    @Override
    public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

    }
    //废弃
    @Override
    public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {

    }
};

3、设置检索监听器

mPoiSearch.setOnGetPoiSearchResultListener(listener);

4、设置PoiCitySearchOption,发起检索请求

/**
 *  PoiCiySearchOption 设置检索属性
 *  city 检索城市
 *  keyword 检索内容关键字
 *  pageNum 分页页码
 */
mPoiSearch.searchInCity(new PoiCitySearchOption()
        .city("北京") //必填
        .keyword("美食") //必填
        .pageNum(10));

5、释放检索实例

mPoiSearch.destroy();

完整实例

准备一个Button作为Poi检索的发起入口

<Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="poiclick"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="POI检索"/>

代码如?

package com.example.firstmapapplication;

import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import com.baidu.mapapi.search.core.PoiInfo;
import com.baidu.mapapi.search.poi.OnGetPoiSearchResultListener;
import com.baidu.mapapi.search.poi.PoiCitySearchOption;
import com.baidu.mapapi.search.poi.PoiDetailResult;
import com.baidu.mapapi.search.poi.PoiDetailSearchResult;
import com.baidu.mapapi.search.poi.PoiIndoorResult;
import com.baidu.mapapi.search.poi.PoiResult;
import com.baidu.mapapi.search.poi.PoiSearch;

import java.util.List;

public class MainActivity extends Activity {
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private PoiSearch mPoiSearch;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        //普通地图 ,mBaiduMap是地图控制器对象
        mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
        //卫星地图
        //mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
        //空白地图
        //mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);

        //开启交通图  
        //mBaiduMap.setTrafficEnabled(true);
        //开启热力图
        //mBaiduMap.setBaiduHeatMapEnabled(true);


        //定义Maker坐标点
        //LatLng point = new LatLng(39.963175, 116.400244);
        //构建Marker图标
        //BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.mipmap.a1);
        //构建MarkerOption,用于在地图上添加Marker
        //OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
        //在地图上添加Marker,并显示
        //mBaiduMap.addOverlay(option);

        //创建POI检索实例
        mPoiSearch = PoiSearch.newInstance();
        //创建POI检索监听器
        OnGetPoiSearchResultListener listener = new OnGetPoiSearchResultListener() {
            @Override
            public void onGetPoiResult(PoiResult poiResult) {
                //获取POI检索结果
                List<PoiInfo> poiInfos = poiResult.getAllPoi();
                for (PoiInfo p :poiInfos){
                    System.out.println("地址:"+p.address);
                    System.out.println("城市:"+p.city);
                    System.out.println("区域:"+p.area);
                }
            }

            @Override
            public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
                //获取Place详情页检索结果
            }

            @Override
            public void onGetPoiDetailResult(PoiDetailSearchResult poiDetailSearchResult) {

            }

            @Override
            public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) {

            }
        };

        //设置检索监听器
        mPoiSearch.setOnGetPoiSearchResultListener(listener);


    }
    
    public void poiclick(View view){
        //发起检索请求(异步)
        mPoiSearch.searchInCity(new PoiCitySearchOption()
                .city("北京") //必填
                .keyword("美食") //必填
                .pageNum(10));
    }
    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();

        //释放检索实例
        mPoiSearch.destroy();
    }
}

效果如?

信息的话,只输出了地址区域城市

实际上可以输出的内容还是很多的~如?


其他信息可以参考:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/search/poi

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云无心鸟知还

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值