接着上一篇文章继续,在上一篇文章中,我们已经解决了在一定区域范围内的搜索。https://blog.csdn.net/qq_41562408/article/details/82820344就上文有一点需要补充,就是对于范围的确定那段代码
LatLngBounds bounds=new LatLngBounds.Builder().include(new LatLng(40.048459,116.302072))
.include(new LatLng(40.050675,116.304317)).build();
其意思就是以这两点纬经度确定的一对对角确定一个矩形。承接上一篇文章,这篇文章我们来实现百度地图地图POI检索中的城市内搜索和范围内搜索。
1、城市内搜索
其核心代码为:
PoiCitySearchOption params=new PoiCitySearchOption(); params.city("廊坊"); params.keyword("加油站"); params.pageCapacity(10);//设置一页获取10条数据 params.pageNum(pagenum);//指定获取哪一页 return params;
由于同为POI检索,所以与上文有很多重复的地方,所以笔者就直接在上一项目基础上进行操作,在原有的基础上添加变量:
private int pagenum;
oncreat方法不变,后面的方法变为:
public boolean onPoiClick(int i) { //当点击一个搜索出来的兴趣点的时候,再去搜索更详细的内容 PoiInfo poiInfo=poiOverlay.getPoiResult().getAllPoi().get(i); poiSearch.searchPoiDetail(getSearChDetailParams(poiInfo.uid)); return true; } private PoiDetailSearchOption getSearChDetailParams(String poiuid) { PoiDetailSearchOption params=new PoiDetailSearchOption(); params.poiUid(poiuid); return params; } @Override public void onGetPoiResult(PoiResult result) { if (result==null || result.error!= SearchResult.ERRORNO.NO_ERROR){ Toast.makeText(getApplicationContext(),"没有搜索到结果",Toast.LENGTH_SHORT).show(); return; } poiOverlay.setData(result); poiOverlay.addToMap();//把所有的数据变成覆盖物添加到百度map上面 poiOverlay.zoomToSpan();//把所有的搜索结果 } @Override public void onGetPoiDetailResult(PoiDetailResult result) { if (result==null||result.error!= SearchResult.ERRORNO.NO_ERROR){ Toast.makeText(getApplicationContext(),"没有详细信息",Toast.LENGTH_SHORT).show(); return; } Toast.makeText(getApplicationContext(),""+result.getShopHours()+","+result.getTelephone(),Toast.LENGTH_SHORT).show(); } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { } public PoiCitySearchOption getSearchParams() { PoiCitySearchOption params=new PoiCitySearchOption(); params.city("廊坊"); params.keyword("加油站"); params.pageCapacity(10);//设置一页获取10条数据 params.pageNum(pagenum);//指定获取哪一页 return params; } public void poiSearchInit() { poiSearch.searchInCity(getSearchParams()); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode==KeyEvent.KEYCODE_1){ //获取下一页数据 pagenum++; poiSearch.searchInCity(getSearchParams()); } return super.onKeyDown(keyCode, event); }
运行结果如图:
2、周边搜索
其核心代码为:
PoiNearbySearchOption params=new PoiNearbySearchOption(); params.location(target);//指定搜索位置 params.radius(1000);//搜索范围 params.keyword("学校");//搜索内容 return params;
同样笔者也是在一篇项目基础上进行改变oncreat方法不用变
之后代码:
扫描二维码关注公众号,回复:
3335469 查看本文章
public boolean onPoiClick(int i) { PoiInfo poiInfo=poiOverlay.getPoiResult().getAllPoi().get(i); Toast.makeText(getApplicationContext(),poiInfo.name+","+poiInfo.address,Toast.LENGTH_SHORT).show(); return true; } @Override public void onGetPoiResult(PoiResult result) { if (result==null || result.error!= SearchResult.ERRORNO.NO_ERROR){ Toast.makeText(getApplicationContext(),"没有搜索到结果",Toast.LENGTH_SHORT).show(); return; } poiOverlay.setData(result); poiOverlay.addToMap();//把所有的数据变成覆盖物添加到百度map上面 poiOverlay.zoomToSpan();//把所有的搜索结果 } @Override public void onGetPoiDetailResult(PoiDetailResult result) { if (result==null||result.error!= SearchResult.ERRORNO.NO_ERROR){ Toast.makeText(getApplicationContext(),"没有详细信息",Toast.LENGTH_SHORT).show(); return; } Toast.makeText(getApplicationContext(),""+result.getShopHours()+","+result.getTelephone(),Toast.LENGTH_SHORT).show(); } @Override public void onGetPoiIndoorResult(PoiIndoorResult poiIndoorResult) { } public void poiSearchInit() { poiSearch.searchNearby(getSearchparms()); } private PoiNearbySearchOption getSearchparms() { PoiNearbySearchOption params=new PoiNearbySearchOption(); params.location(target);//指定搜索位置 params.radius(5000);//搜索范围 params.keyword("学校");//搜索内容 return params; }
效果如下:
很尴尬的事情发生了,为什么我的学校查不到,之前查的到的,前几天还显示了的,就很难受,给我道友谁要是查到了,告诉我这是为什么?我学校就在离自然公园最近,我之前做的项目查到过以图为证:
另外谁要是对我那个项目感兴趣可以阅读以下文章,这是一个较为综合的百度地图应用。 https://blog.csdn.net/qq_41562408/article/details/82788087项目源码连接为:https://download.csdn.net/download/qq_41562408/10679557只要一个积分哦,因为都不熟悉套路,只要了一个积分,现在感觉好亏啊!!!!
拜拜了!我要吃月饼去了,中秋节不能回家,只能和老乡之间相依为命了。O(∩_∩)O哈哈~