- 浏览: 7219 次
- 性别:
- 来自: 珠海
文章分类
最新评论
本文主要讲解如何通过百度地图API搜索得到一个城市里的所有POI。这里有必要对“所有”这个词进行强调一下,以便引起重视,之所以这样说,是因为在搜索POI时,默认仅返回一页的搜索结果10条,那么如何才能得到所有的搜索结果呢?其实baidu map api是提供了相关的方法,但我发现有相当多的网友都在问这个问题,所以有必要讲解演示一下。
先讲一下什么称之为“城市POI搜索”?它与我们在上一篇文章([011] 百度地图API之POI搜索-发现你身边的兴趣点,如超市、餐厅、ATM...(Android))中了解到的POI搜索有什么区别呢?
上一篇文章中所调用的是地图API的“周边POI搜索”服务,即检索周围多少米以内的POI;而本章所要调用的是地图API的“城市POI搜索”服务,即检索某个城市中所有的POI。如果你看完这两篇文章后,你会发现仅仅是调用的方法不同而以,搜索结果的处理方法是同一个方法,搜索结果的处理代码也是完全一样的。
下面将给出城市POI搜索的一个完整示例,并且会讲解如何才能获取到所有的搜索结果。
1)布局文件res/layout/poi_city_search.xml
view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.baidu.mapapi.MapView android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/map_View"
android:layout_alignLeft="@id/map_View"
android:layout_alignRight="@id/map_View"
android:background="@null"
android:padding="0dip"
>
<EditText android:id="@+id/keyword_edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="20" />
<Button android:id="@+id/query_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:text="搜索" />
</LinearLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.baidu.mapapi.MapView android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/map_View"
android:layout_alignLeft="@id/map_View"
android:layout_alignRight="@id/map_View"
android:background="@null"
android:padding="0dip"
>
<EditText android:id="@+id/keyword_edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="20" />
<Button android:id="@+id/query_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:text="搜索" />
</LinearLayout>
</RelativeLayout>
2)继承了com.baidu.mapapi.MapActivity的Activity类
view plaincopy to clipboardprint?package com.liufeng.baidumap;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.PoiOverlay;
public class PoiSearchInCityActivity extends MapActivity {
// 定义地图引擎管理类
private BMapManager mapManager;
// 定义搜索服务类
private MKSearch mMKSearch;
private MapView mapView;
private MapController mapController;
private EditText keyWordEditText;
private Button queryButton;
private static StringBuilder sb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.poi_city_search);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
super.initMapActivity(mapManager);
mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true);
// 取得地图控制器对象,用于控制MapView
mapController = mapView.getController();
// 设置地图默认的缩放级别
mapController.setZoom(10);
// 设置每页返回的POI数,默认为10,取值范围1-50
MKSearch.setPoiPageCapacity(10);
// 初始化MKSearch
mMKSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
queryButton = (Button) findViewById(R.id.query_button);
queryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//每次搜索前先前sb中的内容清空
sb = new StringBuilder();
String keyWord = keyWordEditText.getText().toString().trim();
// 搜索贵阳地区的沃尔玛
mMKSearch.poiSearchInCity("贵阳", keyWord);
}
});
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
protected void onDestroy() {
if (mapManager != null) {
// 程序退出前需调用此方法
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mapManager != null) {
// 终止百度地图API
mapManager.stop();
}
super.onPause();
}
@Override
protected void onResume() {
if (mapManager != null) {
// 开启百度地图API
mapManager.start();
}
super.onResume();
}
/**
* 实现MKSearchListener接口,用于实现异步搜索服务
*
* @author liufeng
*/
public class MySearchListener implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetAddrResult(MKAddrInfo result, int iError) {
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if (result == null) {
return;
}
// 清除地图上已有的所有覆盖物
mapView.getOverlays().clear();
// PoiOverlay是baidu map api提供的用于显示POI的Overlay
PoiOverlay poioverlay = new PoiOverlay(PoiSearchInCityActivity.this, mapView);
// 设置搜索到的POI数据
poioverlay.setData(result.getAllPoi());
// 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
mapView.getOverlays().add(poioverlay);
if(result.getNumPois() > 0) {
// 设置其中一个搜索结果所在地理坐标为地图的中心
MKPoiInfo poiInfo = result.getPoi(0);
mapController.setCenter(poiInfo.pt);
}
sb.append("共搜索到").append(result.getNumPois()).append("个POI/n");
// 遍历当前页返回的POI(默认只返回10个)
for (MKPoiInfo poiInfo : result.getAllPoi()) {
sb.append("名称:").append(poiInfo.name).append("/n");
//sb.append("地址:").append(poiInfo.address).append("/n");
//sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
//sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
}
// 通过AlertDialog显示当前页搜索到的POI
new AlertDialog.Builder(PoiSearchInCityActivity.this)
.setTitle("搜索到的POI信息")
.setMessage(sb.toString())
.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
}).create().show();
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
}
}
}
package com.liufeng.baidumap;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.PoiOverlay;
public class PoiSearchInCityActivity extends MapActivity {
// 定义地图引擎管理类
private BMapManager mapManager;
// 定义搜索服务类
private MKSearch mMKSearch;
private MapView mapView;
private MapController mapController;
private EditText keyWordEditText;
private Button queryButton;
private static StringBuilder sb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.poi_city_search);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
super.initMapActivity(mapManager);
mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true);
// 取得地图控制器对象,用于控制MapView
mapController = mapView.getController();
// 设置地图默认的缩放级别
mapController.setZoom(10);
// 设置每页返回的POI数,默认为10,取值范围1-50
MKSearch.setPoiPageCapacity(10);
// 初始化MKSearch
mMKSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
queryButton = (Button) findViewById(R.id.query_button);
queryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//每次搜索前先前sb中的内容清空
sb = new StringBuilder();
String keyWord = keyWordEditText.getText().toString().trim();
// 搜索贵阳地区的沃尔玛
mMKSearch.poiSearchInCity("贵阳", keyWord);
}
});
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
protected void onDestroy() {
if (mapManager != null) {
// 程序退出前需调用此方法
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mapManager != null) {
// 终止百度地图API
mapManager.stop();
}
super.onPause();
}
@Override
protected void onResume() {
if (mapManager != null) {
// 开启百度地图API
mapManager.start();
}
super.onResume();
}
/**
* 实现MKSearchListener接口,用于实现异步搜索服务
*
* @author liufeng
*/
public class MySearchListener implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetAddrResult(MKAddrInfo result, int iError) {
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if (result == null) {
return;
}
// 清除地图上已有的所有覆盖物
mapView.getOverlays().clear();
// PoiOverlay是baidu map api提供的用于显示POI的Overlay
PoiOverlay poioverlay = new PoiOverlay(PoiSearchInCityActivity.this, mapView);
// 设置搜索到的POI数据
poioverlay.setData(result.getAllPoi());
// 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
mapView.getOverlays().add(poioverlay);
if(result.getNumPois() > 0) {
// 设置其中一个搜索结果所在地理坐标为地图的中心
MKPoiInfo poiInfo = result.getPoi(0);
mapController.setCenter(poiInfo.pt);
}
sb.append("共搜索到").append(result.getNumPois()).append("个POI/n");
// 遍历当前页返回的POI(默认只返回10个)
for (MKPoiInfo poiInfo : result.getAllPoi()) {
sb.append("名称:").append(poiInfo.name).append("/n");
//sb.append("地址:").append(poiInfo.address).append("/n");
//sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
//sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
}
// 通过AlertDialog显示当前页搜索到的POI
new AlertDialog.Builder(PoiSearchInCityActivity.this)
.setTitle("搜索到的POI信息")
.setMessage(sb.toString())
.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
}).create().show();
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
}
}
}
3)AndroidManifest.xml中的配置
view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".PoiSearchInCityActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问精确位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 改变WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 读写存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取电话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".PoiSearchInCityActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问精确位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 改变WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 读写存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取电话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
4)运行结果
摘自:http://blog.csdn.net/lyq8479/article/details/6398630
先讲一下什么称之为“城市POI搜索”?它与我们在上一篇文章([011] 百度地图API之POI搜索-发现你身边的兴趣点,如超市、餐厅、ATM...(Android))中了解到的POI搜索有什么区别呢?
上一篇文章中所调用的是地图API的“周边POI搜索”服务,即检索周围多少米以内的POI;而本章所要调用的是地图API的“城市POI搜索”服务,即检索某个城市中所有的POI。如果你看完这两篇文章后,你会发现仅仅是调用的方法不同而以,搜索结果的处理方法是同一个方法,搜索结果的处理代码也是完全一样的。
下面将给出城市POI搜索的一个完整示例,并且会讲解如何才能获取到所有的搜索结果。
1)布局文件res/layout/poi_city_search.xml
view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.baidu.mapapi.MapView android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/map_View"
android:layout_alignLeft="@id/map_View"
android:layout_alignRight="@id/map_View"
android:background="@null"
android:padding="0dip"
>
<EditText android:id="@+id/keyword_edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="20" />
<Button android:id="@+id/query_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:text="搜索" />
</LinearLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.baidu.mapapi.MapView android:id="@+id/map_View"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@id/map_View"
android:layout_alignLeft="@id/map_View"
android:layout_alignRight="@id/map_View"
android:background="@null"
android:padding="0dip"
>
<EditText android:id="@+id/keyword_edittext"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="20" />
<Button android:id="@+id/query_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
android:text="搜索" />
</LinearLayout>
</RelativeLayout>
2)继承了com.baidu.mapapi.MapActivity的Activity类
view plaincopy to clipboardprint?package com.liufeng.baidumap;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.PoiOverlay;
public class PoiSearchInCityActivity extends MapActivity {
// 定义地图引擎管理类
private BMapManager mapManager;
// 定义搜索服务类
private MKSearch mMKSearch;
private MapView mapView;
private MapController mapController;
private EditText keyWordEditText;
private Button queryButton;
private static StringBuilder sb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.poi_city_search);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
super.initMapActivity(mapManager);
mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true);
// 取得地图控制器对象,用于控制MapView
mapController = mapView.getController();
// 设置地图默认的缩放级别
mapController.setZoom(10);
// 设置每页返回的POI数,默认为10,取值范围1-50
MKSearch.setPoiPageCapacity(10);
// 初始化MKSearch
mMKSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
queryButton = (Button) findViewById(R.id.query_button);
queryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//每次搜索前先前sb中的内容清空
sb = new StringBuilder();
String keyWord = keyWordEditText.getText().toString().trim();
// 搜索贵阳地区的沃尔玛
mMKSearch.poiSearchInCity("贵阳", keyWord);
}
});
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
protected void onDestroy() {
if (mapManager != null) {
// 程序退出前需调用此方法
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mapManager != null) {
// 终止百度地图API
mapManager.stop();
}
super.onPause();
}
@Override
protected void onResume() {
if (mapManager != null) {
// 开启百度地图API
mapManager.start();
}
super.onResume();
}
/**
* 实现MKSearchListener接口,用于实现异步搜索服务
*
* @author liufeng
*/
public class MySearchListener implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetAddrResult(MKAddrInfo result, int iError) {
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if (result == null) {
return;
}
// 清除地图上已有的所有覆盖物
mapView.getOverlays().clear();
// PoiOverlay是baidu map api提供的用于显示POI的Overlay
PoiOverlay poioverlay = new PoiOverlay(PoiSearchInCityActivity.this, mapView);
// 设置搜索到的POI数据
poioverlay.setData(result.getAllPoi());
// 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
mapView.getOverlays().add(poioverlay);
if(result.getNumPois() > 0) {
// 设置其中一个搜索结果所在地理坐标为地图的中心
MKPoiInfo poiInfo = result.getPoi(0);
mapController.setCenter(poiInfo.pt);
}
sb.append("共搜索到").append(result.getNumPois()).append("个POI/n");
// 遍历当前页返回的POI(默认只返回10个)
for (MKPoiInfo poiInfo : result.getAllPoi()) {
sb.append("名称:").append(poiInfo.name).append("/n");
//sb.append("地址:").append(poiInfo.address).append("/n");
//sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
//sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
}
// 通过AlertDialog显示当前页搜索到的POI
new AlertDialog.Builder(PoiSearchInCityActivity.this)
.setTitle("搜索到的POI信息")
.setMessage(sb.toString())
.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
}).create().show();
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
}
}
}
package com.liufeng.baidumap;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKPoiInfo;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.PoiOverlay;
public class PoiSearchInCityActivity extends MapActivity {
// 定义地图引擎管理类
private BMapManager mapManager;
// 定义搜索服务类
private MKSearch mMKSearch;
private MapView mapView;
private MapController mapController;
private EditText keyWordEditText;
private Button queryButton;
private static StringBuilder sb;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.poi_city_search);
// 初始化MapActivity
mapManager = new BMapManager(getApplication());
// init方法的第一个参数需填入申请的API Key
mapManager.init("285B415EBAB2A92293E85502150ADA7F03C777C4", null);
super.initMapActivity(mapManager);
mapView = (MapView) findViewById(R.id.map_View);
// 设置地图模式为交通地图
mapView.setTraffic(true);
// 设置启用内置的缩放控件
mapView.setBuiltInZoomControls(true);
// 取得地图控制器对象,用于控制MapView
mapController = mapView.getController();
// 设置地图默认的缩放级别
mapController.setZoom(10);
// 设置每页返回的POI数,默认为10,取值范围1-50
MKSearch.setPoiPageCapacity(10);
// 初始化MKSearch
mMKSearch = new MKSearch();
mMKSearch.init(mapManager, new MySearchListener());
keyWordEditText = (EditText) findViewById(R.id.keyword_edittext);
queryButton = (Button) findViewById(R.id.query_button);
queryButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//每次搜索前先前sb中的内容清空
sb = new StringBuilder();
String keyWord = keyWordEditText.getText().toString().trim();
// 搜索贵阳地区的沃尔玛
mMKSearch.poiSearchInCity("贵阳", keyWord);
}
});
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
protected void onDestroy() {
if (mapManager != null) {
// 程序退出前需调用此方法
mapManager.destroy();
mapManager = null;
}
super.onDestroy();
}
@Override
protected void onPause() {
if (mapManager != null) {
// 终止百度地图API
mapManager.stop();
}
super.onPause();
}
@Override
protected void onResume() {
if (mapManager != null) {
// 开启百度地图API
mapManager.start();
}
super.onResume();
}
/**
* 实现MKSearchListener接口,用于实现异步搜索服务
*
* @author liufeng
*/
public class MySearchListener implements MKSearchListener {
/**
* 根据经纬度搜索地址信息结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetAddrResult(MKAddrInfo result, int iError) {
}
/**
* 驾车路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetDrivingRouteResult(MKDrivingRouteResult result, int iError) {
}
/**
* POI搜索结果(范围检索、城市POI检索、周边检索)
*
* @param result 搜索结果
* @param type 返回结果类型(11,12,21:poi列表 7:城市列表)
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetPoiResult(MKPoiResult result, int type, int iError) {
if (result == null) {
return;
}
// 清除地图上已有的所有覆盖物
mapView.getOverlays().clear();
// PoiOverlay是baidu map api提供的用于显示POI的Overlay
PoiOverlay poioverlay = new PoiOverlay(PoiSearchInCityActivity.this, mapView);
// 设置搜索到的POI数据
poioverlay.setData(result.getAllPoi());
// 在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上)
mapView.getOverlays().add(poioverlay);
if(result.getNumPois() > 0) {
// 设置其中一个搜索结果所在地理坐标为地图的中心
MKPoiInfo poiInfo = result.getPoi(0);
mapController.setCenter(poiInfo.pt);
}
sb.append("共搜索到").append(result.getNumPois()).append("个POI/n");
// 遍历当前页返回的POI(默认只返回10个)
for (MKPoiInfo poiInfo : result.getAllPoi()) {
sb.append("名称:").append(poiInfo.name).append("/n");
//sb.append("地址:").append(poiInfo.address).append("/n");
//sb.append("经度:").append(poiInfo.pt.getLongitudeE6() / 1000000.0f).append("/n");
//sb.append("纬度:").append(poiInfo.pt.getLatitudeE6() / 1000000.0f).append("/n");
}
// 通过AlertDialog显示当前页搜索到的POI
new AlertDialog.Builder(PoiSearchInCityActivity.this)
.setTitle("搜索到的POI信息")
.setMessage(sb.toString())
.setPositiveButton("关闭", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
}).create().show();
}
/**
* 公交换乘路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetTransitRouteResult(MKTransitRouteResult result, int iError) {
}
/**
* 步行路线搜索结果
*
* @param result 搜索结果
* @param iError 错误号(0表示正确返回)
*/
@Override
public void onGetWalkingRouteResult(MKWalkingRouteResult result, int iError) {
}
}
}
3)AndroidManifest.xml中的配置
view plaincopy to clipboardprint?<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".PoiSearchInCityActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问精确位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 改变WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 读写存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取电话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.liufeng.baidumap"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".PoiSearchInCityActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="4" />
<!-- 访问网络的权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 访问精确位置的权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 访问WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 改变WIFI网络状态的权限 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 读写存储卡的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取电话状态的权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
</manifest>
4)运行结果
摘自:http://blog.csdn.net/lyq8479/article/details/6398630
相关推荐
本项目关注的是“基于百度地图API的周边POI(Point of Interest)搜索”,这是一个典型的地理定位与信息检索应用场景,主要涉及到Android平台上的开发。下面将详细阐述相关知识点: 1. **百度地图API**:百度地图...
1. POI检索:百度地图API提供了POI搜索服务,可以根据关键词、区域等条件进行周边兴趣点的搜索。搜索结果包括名称、地址、经纬度等信息。 2. 搜索类型:可以进行分类搜索,如餐饮、酒店、公园等,也可以进行综合...
本资源"精典源码之百度地图API 之 定位周边搜索POI.rar"是一个关于如何利用百度地图API进行定位及周边搜索的示例代码集。 首先,我们要理解什么是百度地图API。百度地图API是百度提供的一套JavaScript接口,开发者...
这份"Android应用源码之百度地图API 之 定位周边搜索POI"的资源,是针对Android开发者学习如何在自己的应用中集成百度地图API并实现特定功能的一个很好的实例。以下将详细介绍其中涉及的关键知识点: 1. **百度地图...
本文将详细解析"Android 百度地图API-定位周边搜索POI源码"的相关知识点。 首先,我们需要理解POI(Point of Interest)的概念,POI是指地图上的兴趣点,如餐厅、酒店、公园等。在Android应用中,通过百度地图API...
本文将详细讲解如何利用百度地图API进行定位及周边搜索POI(Point of Interest)的源码实现。 首先,我们需要在项目中集成百度地图SDK。这通常涉及在`build.gradle`文件中添加依赖,例如: ```groovy dependencies ...
本文将详细解析"Android源码——百度地图API-定位周边搜索POI源码.7z"中涉及的关键知识点,帮助开发者更好地理解和运用百度地图API。 首先,我们来探讨“定位”功能。在Android应用中,使用百度地图API进行定位,...
本源码主要关注的是如何利用百度地图API实现定位并搜索周边的Point of Interest(POI),即兴趣点。这些兴趣点可能包括餐馆、商店、公园等地理位置信息。 首先,我们需要在项目中集成百度地图SDK。这通常涉及到以下...
本压缩包“安卓Android源码——百度地图API 之 定位周边搜索POI.zip”显然包含了实现这些功能的源代码示例,主要聚焦在用户位置的获取和周围兴趣点(POI)的搜索上。 首先,我们来讨论一下“定位”这一关键知识点。...
这个压缩包“安卓Android源码——百度地图API之定位周边搜索POI.zip”显然是一个关于如何使用百度地图API进行定位和搜索周围兴趣点(POI)的示例代码集。以下将详细介绍其中可能包含的关键知识点。 1. **百度地图...
这个"Android 百度地图API-定位周边搜索POI源码.7z"文件应该包含了一个完整的示例项目,用于演示如何在Android应用中集成百度地图API并实现定位及周边兴趣点(POI)搜索的功能。下面我们将深入探讨这些知识点。 ...
Android应用源码之百度地图API 之 定位周边搜索POI.zip项目安卓应用源码下载Android应用源码之百度地图API 之 定位周边搜索POI.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合...
这份"Android源码——百度地图API-定位周边搜索POI源码.zip"包含了实现这些功能的具体源代码,对于开发者来说是宝贵的参考资料。 首先,我们需要了解的是百度地图API的基本概念和工作原理。百度地图API是一套为...
本源码压缩包"Android百度地图API-定位周边搜索POI源码.zip"(实际文件名为"Android 百度地图API-定位周边搜索POI源码.rar")正是一个关于这些功能的实际示例,旨在帮助开发者快速理解和应用。 首先,我们来了解...
该压缩包文件“小程序源码 地图相关 百度地图API-定位周边搜索POI源码.rar”包含了使用百度地图API开发的小程序源码,主要用于实现定位功能以及周边搜索POI(Point of Interest)的功能。这个源码适用于开发者想要在...
本资源“安卓GPS地图导航定位指南相关-Android百度地图API-定位周边搜索POI源码.rar”提供了基于百度地图API实现的定位和周边搜索功能的源码,可以帮助开发者更好地理解和运用这些技术。 首先,我们要了解什么是GPS...