Android百度地图——搜索服务之周边检索

MKPoiInfo mkPoi = mkPois.get(1);




3、发起查看详细信息的请求:



mMKSearch.poiDetailSearch(mkPoi.uid);




4、需要在AndroidManifest.xml中设置如下信息:



注:调用百度API里的POI详细信息展示Activity,官方给的有错误。



<activity

        android:configChanges="orientation|keyboardHidden"

        android:name="com.baidu.mapapi.search.PlaceCaterActivity"

        android:theme="@android:style/Theme.NoTitleBar" >

    </activity>



5、处理onGetPoiDetailSearchResult()回调方法:



@Override

        public void onGetPoiDetailSearchResult(int type, int error) {

            // type - 值为GeoSearchManager.GEO_SEARCH_DETAILS

            if (error != 0) {

                Toast.makeText(BaiduMapPoiOverlayActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();

            } else {

                Toast.makeText(BaiduMapPoiOverlayActivity.this, "成功,查看详情页面", Toast.LENGTH_SHORT).show();

            }

        }



6、运行效果图如下:



![](https://img-my.csdn.net/uploads/201302/10/1360510261_3196.png)  

三、完整代码:



1、在AndroidManifest.xml中的配置:



<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android=“http://schemas.android.com/apk/res/android”

package="com.android.baidu.map"

android:versionCode="1"

android:versionName="1.0" >



<uses-sdk android:minSdkVersion="8" />



<application

    android:icon="@drawable/ic_launcher"

    android:label="@string/app_name" >

    <activity

        android:configChanges="orientation|keyboardHidden"

        android:label="@string/app_name"

        android:name=".BaiduMapPoiOverlayActivity"

        android:screenOrientation="sensor" >

        <intent-filter >

            <action android:name="android.intent.action.MAIN" />



            <category android:name="android.intent.category.LAUNCHER" />

        </intent-filter>

    </activity>

    

    <activity

        android:configChanges="orientation|keyboardHidden"

        android:name="com.baidu.mapapi.search.PlaceCaterActivity"

        android:theme="@android:style/Theme.NoTitleBar" >

    </activity>

</application>



<!-- 使用网络功能所需权限 -->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >

</uses-permission>

<uses-permission android:name="android.permission.INTERNET" >

</uses-permission>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >

</uses-permission>

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >

</uses-permission>



<!-- 读取手机的当前状态权限,没有的话会报错,这个是使用百度地图API必须的 -->

<uses-permission android:name="android.permission.READ_PHONE_STATE" >

</uses-permission>



<!-- Cache功能需要读写外部存储器 ,若没这个权限,地图加载不出来 -->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >

</uses-permission>



<supports-screens

    android:anyDensity="true"

    android:largeScreens="true"

    android:normalScreens="true"

    android:resizeable="true"

    android:smallScreens="true" />



2、继承自Activity类的子类的完整代码:



package com.android.baidu.map;

import java.util.ArrayList;

import android.app.Activity;

import android.os.Bundle;

import android.widget.Toast;

import com.baidu.mapapi.BMapManager;

import com.baidu.mapapi.MKGeneralListener;

import com.baidu.mapapi.map.MKEvent;

import com.baidu.mapapi.map.MapController;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.PoiOverlay;

import com.baidu.mapapi.search.MKAddrInfo;

import com.baidu.mapapi.search.MKBusLineResult;

import com.baidu.mapapi.search.MKDrivingRouteResult;

import com.baidu.mapapi.search.MKPoiInfo;

import com.baidu.mapapi.search.MKPoiResult;

import com.baidu.mapapi.search.MKSearch;

import com.baidu.mapapi.search.MKSearchListener;

import com.baidu.mapapi.search.MKSuggestionResult;

import com.baidu.mapapi.search.MKTransitRouteResult;

import com.baidu.mapapi.search.MKWalkingRouteResult;

import com.baidu.platform.comapi.basestruct.GeoPoint;

/**

  • 根据检索词、中心点地理坐标和半径与发起周边检索.

  • @author android_ls

*/

public class BaiduMapPoiOverlayActivity extends Activity {

/**地图引擎管理类*/

private BMapManager mBMapManager = null;



/**显示地图的View*/

private MapView mMapView = null;



/**搜索服务,用于位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索*/

private MKSearch mMKSearch = null;



/**

 * 经研究发现在申请KEY时:应用名称一定要写成my_app_应用名(也就是说"my_app_"是必须要有的)。

 * 百度地图SDK提供的服务是免费的,接口无使用次数限制。您需先申请密钥(key),才可使用该套SDK。

 * */

public static final String BAIDU_MAP_KEY = "07418AEC69BAAB7104C6230A6120C580DFFAEEBB";



@Override

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);



    // 注意:请在调用setContentView前初始化BMapManager对象,否则会报错

    mBMapManager = new BMapManager(this.getApplicationContext());

    mBMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {



        @Override

        public void onGetNetworkState(int iError) {

            if (iError == MKEvent.ERROR_NETWORK_CONNECT) {

                Toast.makeText(BaiduMapPoiOverlayActivity.this.getApplicationContext(),

                        "您的网络出错啦!", 

                        Toast.LENGTH_LONG).show();

            }

        }



        @Override

        public void onGetPermissionState(int iError) {

            if (iError == MKEvent.ERROR_PERMISSION_DENIED) {

                // 授权Key错误:

                Toast.makeText(BaiduMapPoiOverlayActivity.this.getApplicationContext(),

                        "请在 DemoApplication.java文件输入正确的授权Key!", 

                        Toast.LENGTH_LONG).show();

            }

        }

    });



    setContentView(R.layout.main);



    mMapView = (MapView) this.findViewById(R.id.bmapsView);

    // 设置启用内置的缩放控件

    mMapView.setBuiltInZoomControls(true);



    MapController mapController = mMapView.getController();

    // 上海市浦东新区的GPS纬度经度值:31.224078,121.540419

    GeoPoint mGeoPoint = new GeoPoint(

            (int) (31.224078 * 1E6), 

            (int) (121.540419 * 1E6));



    // 设置地图的中心点

    mapController.setCenter(mGeoPoint);

    mapController.setZoom(15);



    mMKSearch = new MKSearch();

    mMKSearch.init(mBMapManager, new MKSearchListener() {



        @Override

        public void onGetAddrResult(MKAddrInfo arg0, int arg1) {

            // TODO Auto-generated method stub



        }



        @Override

        public void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {

            // TODO Auto-generated method stub



        }



        @Override

        public void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {

            // TODO Auto-generated method stub



        }



        @Override

        public void onGetPoiResult(MKPoiResult result, int type, int error) {

            if (error != 0) {

                Toast.makeText(BaiduMapPoiOverlayActivity.this, 

                        "抱歉,未查找到结果", 

                        Toast.LENGTH_SHORT).show();

            } else {

                if (result == null) {

                    Toast.makeText(BaiduMapPoiOverlayActivity.this,

                            "抱歉,您填写的搜索条件,未查找到结果,换个条件试试!",

                            Toast.LENGTH_SHORT).show();

                    return;

                }



                // 创建POI内置的Overlay对象 

                PoiOverlay poiOverlay = new PoiOverlay(BaiduMapPoiOverlayActivity.this, mMapView);

                // 符合搜索条件的所有点

                poiOverlay.setData(result.getAllPoi());

                // 向覆盖物列表中添加覆盖物对象PoiOverlay

                mMapView.getOverlays().add(poiOverlay);

                // 刷新地图

                mMapView.refresh();

                

               /* 注: POI是中国POI(Point of Interest)数据库的缩写,可以翻译成“兴趣点”,

                * 每个POI包含四方面信息,名称、类别、经度、纬度。

                * 这个计划的远景目标是建立全国的POI数据库,并且全部开放。*/

                

                // 当执行完POI检索后,我们会得到一个POI的列表。

                ArrayList<MKPoiInfo> mkPois = result.getAllPoi();

                // 取POI列表中的第二个元素

                MKPoiInfo mkPoi = mkPois.get(1);

                /* 每个POI节点都有个uid属性,我们可以根据这个uid获取关于这个poi的一些更详细的信息。

                 * 比如:评论、图片、商户描述等。*/

                

                // 发起查看详细信息的请求

                mMKSearch.poiDetailSearch(mkPoi.uid);

            }

        }



        @Override

        public void onGetPoiDetailSearchResult(int type, int error) {

            // type - 值为GeoSearchManager.GEO_SEARCH_DETAILS

            if (error != 0) {

                Toast.makeText(BaiduMapPoiOverlayActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show();

            } else {

                Toast.makeText(BaiduMapPoiOverlayActivity.this, "成功,查看详情页面", Toast.LENGTH_SHORT).show();

            }

        }



        @Override

        public void onGetSuggestionResult(MKSuggestionResult arg0, int arg1) {

            // TODO Auto-generated method stub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值