接着上一篇文章继续,在上一篇文章中,我们已经解决了在一定区域范围内的搜索。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方法不用变
之后代码:
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只要一个积分哦,因为都不熟悉套路,只要了一个积分,现在感觉好亏啊!!!!(忘了说明,这个项目有关登录界面密码账号都是111)。
拜拜了!我要吃月饼去了,中秋节不能回家,只能和老乡之间相依为命了。O(∩_∩)O哈哈~