




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
013 百度地图API之城市POI搜索-获取所有结果(Android) 分类: Android开发 2011-05-05 23:37 595人阅读 评论(4) 收藏 举报 本文主要讲解如何通过百度地图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?1. 2. 7. 12. 22. 27. 33. 34. 2)继承了com.baidu.mapapi.MapActivity的Activity类 view plaincopy to clipboardprint?1. packagecom.liufeng.baidumap;2. 3. importandroid.app.AlertDialog;4. importandroid.content.DialogInterface;5. importandroid.os.Bundle;6. importandroid.view.View;7. importandroid.view.View.OnClickListener;8. importandroid.widget.Button;9. importandroid.widget.EditText;10. 11. importcom.baidu.mapapi.BMapManager;12. importcom.baidu.mapapi.MKAddrInfo;13. importcom.baidu.mapapi.MKDrivingRouteResult;14. importcom.baidu.mapapi.MKPoiInfo;15. importcom.baidu.mapapi.MKPoiResult;16. importcom.baidu.mapapi.MKSearch;17. importcom.baidu.mapapi.MKSearchListener;18. importcom.baidu.mapapi.MKTransitRouteResult;19. importcom.baidu.mapapi.MKWalkingRouteResult;20. importcom.baidu.mapapi.MapActivity;21. importcom.baidu.mapapi.MapController;22. importcom.baidu.mapapi.MapView;23. importcom.baidu.mapapi.PoiOverlay;24. 25. publicclassPoiSearchInCityActivityextendsMapActivity26. /定义地图引擎管理类 27. privateBMapManagermapManager;28. /定义搜索服务类 29. privateMKSearchmMKSearch;30. 31. privateMapViewmapView;32. privateMapControllermapController;33. privateEditTextkeyWordEditText;34. privateButtonqueryButton;35. privatestaticStringBuildersb;36. 37. Override38. publicvoidonCreate(BundlesavedInstanceState)39. super.onCreate(savedInstanceState);40. setContentView(R.layout.poi_city_search);41. 42. /初始化MapActivity 43. mapManager=newBMapManager(getApplication();44. /init方法的第一个参数需填入申请的APIKey 45. mapManager.init(285B415EBAB2A92293E85502150ADA7F03C777C4,null);46. super.initMapActivity(mapManager);47. 48. mapView=(MapView)findViewById(R.id.map_View);49. /设置地图模式为交通地图 50. mapView.setTraffic(true);51. /设置启用内置的缩放控件 52. mapView.setBuiltInZoomControls(true);53. 54. /取得地图控制器对象,用于控制MapView 55. mapController=mapView.getController();56. /设置地图默认的缩放级别 57. mapController.setZoom(10);58. 59. /设置每页返回的POI数,默认为10,取值范围1-50 60. MKSearch.setPoiPageCapacity(10);61. /初始化MKSearch 62. mMKSearch=newMKSearch();63. mMKSearch.init(mapManager,newMySearchListener();64. 65. keyWordEditText=(EditText)findViewById(R.id.keyword_edittext);66. queryButton=(Button)findViewById(R.id.query_button);67. queryButton.setOnClickListener(newOnClickListener()68. Override69. publicvoidonClick(Viewv)70. /每次搜索前先前sb中的内容清空 71. sb=newStringBuilder();72. 73. StringkeyWord=keyWordEditText.getText().toString().trim();74. /搜索贵阳地区的沃尔玛 75. mMKSearch.poiSearchInCity(贵阳,keyWord);76. 77. );78. 79. 80. Override81. protectedbooleanisRouteDisplayed()82. returnfalse;83. 84. 85. Override86. protectedvoidonDestroy()87. if(mapManager!=null)88. /程序退出前需调用此方法 89. mapManager.destroy();90. mapManager=null;91. 92. super.onDestroy();93. 94. 95. Override96. protectedvoidonPause()97. if(mapManager!=null)98. /终止百度地图API 99. mapManager.stop();100. 101. super.onPause();102. 103. 104. Override105. protectedvoidonResume()106. if(mapManager!=null)107. /开启百度地图API 108. mapManager.start();109. 110. super.onResume();111. 112. 113. /*114. *实现MKSearchListener接口,用于实现异步搜索服务115. *116. *authorliufeng117. */118. publicclassMySearchListenerimplementsMKSearchListener119. /*120. *根据经纬度搜索地址信息结果121. *122. *paramresult搜索结果123. *paramiError错误号(0表示正确返回)124. */125. Override126. publicvoidonGetAddrResult(MKAddrInforesult,intiError)127. 128. 129. /*130. *驾车路线搜索结果131. *132. *paramresult搜索结果133. *paramiError错误号(0表示正确返回)134. */135. Override136. publicvoidonGetDrivingRouteResult(MKDrivingRouteResultresult,intiError)137. 138. 139. /*140. *POI搜索结果(范围检索、城市POI检索、周边检索)141. *142. *paramresult搜索结果143. *paramtype返回结果类型(11,12,21:poi列表7:城市列表)144. *paramiError错误号(0表示正确返回)145. */146. Override147. publicvoidonGetPoiResult(MKPoiResultresult,inttype,intiError)148. if(result=null)149. return;150. 151. /清除地图上已有的所有覆盖物 152. mapView.getOverlays().clear();153. /PoiOverlay是baidumapapi提供的用于显示POI的Overlay 154. PoiOverlaypoioverlay=newPoiOverlay(PoiSearchInCityActivity.this,mapView);155. /设置搜索到的POI数据 156. poioverlay.setData(result.getAllPoi();157. /在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上) 158. mapView.getOverlays().add(poioverlay);159. 160. if(result.getNumPois()0)161. /设置其中一个搜索结果所在地理坐标为地图的中心 162. MKPoiInfopoiInfo=result.getPoi(0);163. mapController.setCenter(poiInfo.pt);164. 165. 166. sb.append(共搜索到).append(result.getNumPois().append(个POI/n);167. /遍历当前页返回的POI(默认只返回10个) 168. for(MKPoiInfopoiInfo:result.getAllPoi()169. sb.append(名称:).append(poiI).append(/n);170. /sb.append(地址:).append(poiInfo.address).append(/n); 171. /sb.append(经度:).append(poiInfo.pt.getLongitudeE6()/1000000.0f).append(/n); 172. /sb.append(纬度:).append(poiInfo.pt.getLatitudeE6()/1000000.0f).append(/n); 173. 174. 175. /通过AlertDialog显示当前页搜索到的POI 176. newAlertDialog.Builder(PoiSearchInCityActivity.this)177. .setTitle(搜索到的POI信息)178. .setMessage(sb.toString()179. .setPositiveButton(关闭,newDialogInterface.OnClickListener()180. publicvoidonClick(DialogInterfacedialog,intwhichButton)181. dialog.dismiss();182. 183. ).create().show();184. 185. 186. /*187. *公交换乘路线搜索结果188. *189. *paramresult搜索结果190. *paramiError错误号(0表示正确返回)191. */192. Override193. publicvoidonGetTransitRouteResult(MKTransitRouteResultresult,intiError)194. 195. 196. /*197. *步行路线搜索结果198. *199. *paramresult搜索结果200. *paramiError错误号(0表示正确返回)201. */202. Override203. publicvoidonGetWalkingRouteResult(MKWalkingRouteResultresult,intiError)204. 205. 206. 3)AndroidManifest.xml中的配置 view plaincopy to clipboardprint?1. 2. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 4)运行结果 程序运行起来后,我们输入关键词“ktv”进行搜索,而在代码中我们设置了搜索城市为“贵阳”,即我们要搜索贵阳市所有的KTV。搜索完成后,首先会弹出一个对话框,如上图所示,显示了搜索到了POI总数及每一个POI名称,点击“关闭”按钮后,可以看到搜索到的ktv所在位置也在地图上进行了标注。 到目前为止,一切看起来很正常。然而,真的是这样吗?请仔细看上面第一张图中显示的搜索结果数为60,即在贵阳市总共个60家ktv,但是下面却只显示了10家ktv名称,并且第二张图中地图中也只标注了10家ktv,这到底是为什么呢?其它50家ktv结果去哪了?原因是这样的: 一次搜索所得到的POI数有时候可能有成千上万个,比如你搜索“餐厅”试试,试想如果一次性从百度地图服务器上返回上万条搜索结果数据到客户的手机上将会是一种什么样的情况?所以百度地图API对一次性返回的搜索结果进行了限制-一次性最多只能返回50条搜索结果,默认情况下一次性返回10条搜索结果。我们可以通过下面的方法去改变一次性返回的搜索结果数: / 设置每页返回的POI数,默认为10,取值范围1-50 MKSearch.setPoiPageCapacity(10);但最大也只能设置为50。那么怎么才能一次性得到所有的搜索结果呢?怎么才能得到上面示例中的60家ktv的信息呢?让我们来改一下上面Activity中处理搜索结果的方法onGetPoiResult,其实所有代码都保持不变。将onGetPoiResult方法内的处理代码修改为: view plaincopy to clipboardprint?1. /*2. *POI搜索结果(范围检索、城市POI检索、周边检索)3. *4. *paramresult搜索结果5. *paramtype返回结果类型(11,12,21:poi列表7:城市列表)6. *paramiError错误号(0表示正确返回)7. */8. Override9. publicvoidonGetPoiResult(MKPoiResultresult,inttype,intiError)10. if(result=null)11. return;12. 13. /清除地图上已有的所有覆盖物 14. mapView.getOverlays().clear();15. /PoiOverlay是baidumapapi提供的用于显示POI的Overlay 16. PoiOverlaypoioverlay=newPoiOverlay(PoiSearchInCityActivity.this,mapView);17. /设置搜索到的POI数据 18. poioverlay.setData(result.getAllPoi();19. /在地图上显示PoiOverlay(将搜索到的兴趣点标注在地图上) 20. mapView.getOverlays().add(poioverlay);21. 22. /如果当前页的索引为0,表示第一页搜索结果 23. if(result.getPageIndex()=0)24. sb.append(共搜索到).append(result.getNumPois().append(个POI/n);25. 26. /遍历当前页返回的POI(默认只返回10个) 27. for(MKPoiInfopoiInfo:result.getAllPoi()28. sb.append(名称:).append(poiI).append(/n);29. /sb.append(地址:).append(poiInfo.address).append(/n); 30. /sb.append(经度:).append(poiInfo.pt.getLongitudeE6()/1000000.0f).append(/n); 31. /sb.append(纬度:).append(poiInfo.pt.getLatitudeE6()/1000000.0f).append(/n); 32. 33. 34. if(result.getPageIndex()result.getNumPages()-1)35. mMKSearch.goToPoiPage(result.getPageIndex()+1);36. 37. /如果是最后一页,显示搜索结果 38. elseif(result.getPageIndex()=result.getNumPages()-1)39. /设置其中一个搜索结果所在地理坐标为地图的中心 40. MKPo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新质生产力发展不停步
- 新闻联播中的新质生产力解读
- 新质生产力与新的生产关系
- 情人节的活动策划方案(标准模版)
- 2025年呼吸内科慢性阻塞性肺疾病诊疗方案考核答案及解析
- 2025年心脏病学患者的护理综合测试卷答案及解析
- 2025年呼吸内科重症病例处理演练答案及解析
- 2025年小儿外科手术术前术后护理综合评估试题答案及解析
- 2025年精神科抑郁症患者心理干预策略测试答案及解析
- 新质生产力重点发展领域解析
- 第四讲-正确认识中国经济热点问题-2025秋版本-建设更高水平平安中国国家安全
- 2025北京京剧院招聘工作人员10人笔试备考题库及答案解析
- 配电柜组装基本知识培训课件
- 林业安全知识培训教育课件
- 工商注册知识培训课件
- 隐患排查治理奖励制度
- 学校食堂清洗消毒工作流程培训测试题及答案
- 计算机组装及维护试题库附带答案总结全面
- 武汉公积金基本知识培训课件
- 校园消防安全知识培训主要内容
- 校园垃圾清运应急预案演练(3篇)
评论
0/150
提交评论