Android_百度地图BaiduMap_搜索服务
来源:互联网 发布:java互联网必读 编辑:程序博客网 时间:2024/06/15 07:38
Android_百度地图BaiduMap_搜索服务
分类: Android基础百度地图2013-11-23 18:27588人阅读评论(0)收藏举报
Android百度地图MKSearchMKSearchListenerMKPoiResult
目录(?)[+]
- 搜索概述
- 搜索种类
- 1矩形区域搜索
- 2城市搜索
- 3圆形区域搜索
- 搜索结果
- 地址信息查询
1.搜索概述
百度地图SDK集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索等,首先实例化MKSearch对象,然后初始化init该MKSearch对象并指定MKSearchListener对象监听器,并通过调用相应的方法实现异步搜索服务。检索服务使用完成之后,需要调用MKSearch的destory()方法来释放资源。
- public class MySearchListenerimplements MKSearchListener {
- @Override
- public void onGetAddrResult(MKAddrInfo result,int iError) {
- //返回地址信息搜索结果
- }
- @Override
- public void onGetDrivingRouteResult(MKDrivingRouteResult result,int iError) {
- //返回驾乘路线搜索结果
- }
- @Override
- public void onGetPoiResult(MKPoiResult result,int type, int iError) {
- //返回poi搜索结果
- }
- @Override
- public void onGetTransitRouteResult(MKTransitRouteResult result,int iError) {
- //返回公交搜索结果
- }
- @Override
- public void onGetWalkingRouteResult(MKWalkingRouteResult result,int iError) {
- //返回步行路线搜索结果
- }
- @Override
- public void onGetBusDetailResult(MKBusLineResult result,int iError) {
- //返回公交车详情信息搜索结果
- }
- @Override
- public void onGetSuggestionResult(MKSuggestionResult result,int iError) {
- //返回联想词信息搜索结果
- }
- @Override
- public void onGetShareUrlResult(MKShareUrlResult result ,int type, int error) {
- //在此处理短串请求返回结果.
- }
- @Override
- public void onGetPoiDetailSearchResult(int arg0,int arg1) {
- }
- }
2.搜索种类
(1).矩形区域搜索
- // 北京西站
- GeoPoint ptLB = new GeoPoint((int) (39.901375 * 1E6), (int) (116.329099 * 1E6));
- // 北京北站
- GeoPoint ptRT = new GeoPoint((int) (39.949404 * 1E6), (int) (116.360719 * 1E6));
- mkSearch.poiSearchInbounds("KFC", ptLB, ptRT);//在2个点所形成的矩形区域进行搜索
(2).城市搜索
- mkSearch.poiSearchInCity("北京","饭店");
(3).圆形区域搜索
- // 成功返回0,否则返回-1
- mkSearch.poiSearchNearBy("饭店", new GeoPoint((int) (39.915 * 1E6), (int) (116.404 * 1E6)),5000);//radius - 半径,单位:米
3.搜索结果
对于搜索出来通过PoiOverlay绘制在地图上的每个点,百度地图有默认的点击事件,可以继承PoiOverlay类,可以通过覆写onTap方法
- @Override
- public void onGetPoiResult(MKPoiResult res,int type, int error) {
- // 错误号可参考MKEvent中的定义
- if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {
- Toast.makeText(getApplicationContext(), "抱歉,未找到结果",
- Toast.LENGTH_LONG).show();
- return;
- } else if (error !=0 || res == null) {
- Toast.makeText(getApplicationContext(), "搜索出错啦..",
- Toast.LENGTH_LONG).show();
- return;
- }
- // 将poi结果显示到地图上
- PoiOverlay poiOverlay = new PoiOverlay(this, mMapView);
- poiOverlay.setData(res.getAllPoi());
- mMapView.getOverlays().clear();
- mMapView.getOverlays().add(poiOverlay);
- mMapView.refresh();
- // 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空
- for (MKPoiInfo info : res.getAllPoi()) {
- if (info.pt != null) {
- mMapView.getController().animateTo(info.pt);
- break;
- }
- }
- }
- public void onGetPoiResult(MKPoiResult res,int type, int error) {
- // 错误号可参考MKEvent中的定义
- if (error == MKEvent.ERROR_RESULT_NOT_FOUND) {
- Toast.makeText(getApplicationContext(), "抱歉,未找到结果",
- Toast.LENGTH_LONG).show();
- return;
- } else if (error !=0 || res == null) {
- Toast.makeText(getApplicationContext(), "搜索出错啦..",
- Toast.LENGTH_LONG).show();
- return;
- }
- ///////////////////////////////////////////////
- //继承PoiOverlay类,可以通过覆写onTap方法,可以处理点击事件
- MyPoiOverlay poiOverlay = new MyPoiOverlay(this, mMapView);
- //////////////////////////////////////////////
- poiOverlay.setData(res.getAllPoi());
- mMapView.getOverlays().clear();
- mMapView.getOverlays().add(poiOverlay);
- mMapView.refresh();
- // 当ePoiType为2(公交线路)或4(地铁线路)时, poi坐标为空
- for (MKPoiInfo info : res.getAllPoi()) {
- if (info.pt != null) {
- mMapView.getController().animateTo(info.pt);
- break;
- }
- }
- }
- private class MyPoiOverlayextends PoiOverlay {
- public MyPoiOverlay(Activity activity, MapView mapView) {
- super(activity, mapView);
- }
- @Override
- protected boolean onTap(int i) {
- //覆写该方法,
- MKPoiInfo info = getPoi(i);
- Toast.makeText(getApplicationContext(),
- info.address + ":" + info.name,0).show();
- return true;
- }
- }
4.地址信息查询
- mMKSearch.reverseGeocode(new GeoPoint(40057031,116307852)); //逆地址解析
- mMKSearch.geocode(key, city);//地址解析
reverseGeocode和geocode的返回结果在都在MKSearchListener里的onGetAddrResult方法中,具体区分是逆地址解析的结果还是地址解析的结果需要判断MKAddrInfo中的type字段,type字段为MKAddrInfo.MK_GEOCODE的是地理编码的结果、type字段为MKAddrInfo.MK_REVERSEGEOCODE的是逆地理编码的结果.
- @Override
- public void onGetAddrResult(MKAddrInfo res,int error) {
- if (error != 0) {
- String str = String.format("错误号:%d", error);
- Toast.makeText(getApplicationContext(), str, Toast.LENGTH_LONG)
- .show();
- return;
- }
- // 地图移动到该点
- mMapView.getController().animateTo(res.geoPt);
- if (res.type == MKAddrInfo.MK_GEOCODE) {
- // 地理编码:通过地址检索坐标点
- String strInfo = String.format("纬度:%f 经度:%f",
- res.geoPt.getLatitudeE6() / 1e6,
- res.geoPt.getLongitudeE6() / 1e6);
- Toast.makeText(getApplicationContext(), strInfo, Toast.LENGTH_LONG)
- .show();
- }
- if (res.type == MKAddrInfo.MK_REVERSEGEOCODE) {
- // 反地理编码:通过坐标点检索详细地址及周边poi
- String strInfo = res.strAddr;
- Toast.makeText(getApplicationContext(), strInfo, Toast.LENGTH_LONG)
- .show();
- }
- }
0 0
- Android_百度地图BaiduMap_搜索服务
- Android_百度地图BaiduMap_搜索服务
- 百度地图 搜索服务
- Android_百度地图定位服务V4.2
- 百度地图安卓搜索服务开发
- 百度地图SDK集成搜索服务
- 百度地图--搜索服务(Web)LocalSearch
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- 百度地图提供服务——本地搜索,范围搜索
- UInavigation界面间低级错误
- Android金钱滚动效果-滚动的textView
- 【面试准备】letcode-Binary Tree Preorder Traversal
- C++ static关键字
- shell basename dirname的使用
- Android_百度地图BaiduMap_搜索服务
- J2SE复习之数组与对象
- MapReduce(十六): 写数据到HDFS的源码分析
- poj1065 wooden sticks
- 顺时针打印矩阵与二维数组作为函数参数
- Eclipse 常用设置 (个人经验整理)(二)
- 【学习Android NDK开发】native code通过JNI调用Java方法
- Valid Parentheses
- quartusII 11.0安装与破解