@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
});
2、 调用mMKSearch对象的mMKSearch.poiSearchNearBy(arg0, arg1, arg2)方法,参数列表:关键词、中心点地理坐标、半径,单位:米。
// 根据中心点、半径与检索词发起周边检索.
// 参数列表:关键词、中心点地理坐标、半径,单位:米
mMKSearch.poiSearchNearBy("浦东发展银行", mGeoPoint, 1000);
3、在onGetPoiResult()回调方法内处理检索到的结果。
@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();
}
}
4、运行效果图如下:

三、查看检索到的POI详情:
1、在前面我们以上海市浦东新区为中心,半径为1000米内所有的“浦东发展银行”,检索得到的是一个POI的列表。代码如下:
ArrayList mkPois = result.getAllPoi();
注:a. result是MKPoiResult类对象的一个引用。
b. POI是中国POI(Point of Interest)数据库的缩写,可以翻译成“兴趣点”, 每个POI包含四方面信息,名称、类别、经度、纬度。这个计划的远景目标是建立全国的POI数据库,并且全部开放。2、从POI的列表中取出一个元素:
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、运行效果图如下:

三、完整代码:
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
}
@Override
public void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {
// TODO Auto-generated method stub
}
});
// 根据中心点、半径与检索词发起周边检索.
// 参数列表:关键词、中心点地理坐标、半径,单位:米
mMKSearch.poiSearchNearBy("浦东发展银行", mGeoPoint, 1000);
}