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

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