您的位置:首页 > 其它

3.0+百度地图,如何获取地图中心点位置(每次滑动地图后都能够获取地图的中心点位置,并做出相应的操作)

2015-04-17 11:51 489 查看
现在有这样一个业务:

1.将地图定位到指定的经纬度位置,当地图停止滑动时搜索附近的地址信息列表,并显示再ListView中。

2.每次滑动地图都需要根据地图中心点位置搜索附近1000米范围内的地址,并显示再列表,直至退出。

下面是具体实现的代码:

一:实例化PoiSearch并设置获取结果的监听器setOnGetPoiSearchResultListener

// 创建POI检索实例
poiSearch = PoiSearch.newInstance();
// 设置监听器
poiSearch.setOnGetPoiSearchResultListener(poiSearchListener);
baiduMap = mapView.getMap();
//设置地图中心点位置
MapStatus status = new MapStatus.Builder().target(new LatLng(MyLocation.getInstance().getLocation().getLatitude(), MyLocation.getInstance().getLocation().getLongitude())).build();
searchMoveFinish(status);
// 设置地图的缩放级别
MapStatus mapStatus = new MapStatus.Builder().zoom(18).build();
baiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));


二、获取poi搜索结果监听器:次监听的目的是可以使用户手动模糊搜索

/**
* 创建POI检索监听者
*/
OnGetPoiSearchResultListener poiSearchListener = new OnGetPoiSearchResultListener() {

@Override
public void onGetPoiResult(PoiResult poiResult) {
if (poiResult != null && poiResult.getAllPoi() != null) {
adapter.setData(poiResult.getAllPoi());
mSearchResultList.setAdapter(adapter);
adapter.notifyDataSetChanged();
} else {
ToastUtil.getInstance().showTips(ChooseLocationActivity.this,
ToastUtil.TOAST_WARING, "没有更多了!");
}
adapter.setSelected(-1);
}

@Override
public void onGetPoiDetailResult(PoiDetailResult poiDetailResult) {
// 获取Place详情页检索结果
ToastUtil.getInstance().showTips(ChooseLocationActivity.this,
ToastUtil.TOAST_WARING, "特美的,居然在这里执行了!");
}
};


三、监听地图的状态变化

baiduMap.setOnMapStatusChangeListener(new OnMapStatusChangeListener() {

@Override
public void onMapStatusChangeStart(MapStatus status) {

}

// 移动结束,在这里需要计算出中心点坐标
@Override
public void onMapStatusChangeFinish(MapStatus status) {
searchMoveFinish(status);

}

@Override
public void onMapStatusChange(MapStatus status) {

}
});


第四、(重要)根据地理位置信息搜索指定经纬度1000米范围内的所有的地址信息,此方法是“每次滑动地图后都能够获取地图的中心点位置,并做出相应的操作”的主要方法

private void searchMoveFinish(MapStatus status) {
GeoCoder geoCoder = GeoCoder.newInstance();
ReverseGeoCodeOption reverCoder = new ReverseGeoCodeOption();
reverCoder.location(status.target);
geoCoder.reverseGeoCode(reverCoder); //
geoCoder.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {

@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult arg0) { // TODO
// stub
if (arg0 != null && arg0.getPoiList() != null) {
adapter.setData(arg0.getPoiList());
mSearchResultList.setAdapter(adapter);
adapter.notifyDataSetChanged();
} else {
ToastUtil.getInstance().showTips(
ChooseLocationActivity.this,
ToastUtil.TOAST_WARING, "没有更多了!");
}
}

@Override
public void onGetGeoCodeResult(GeoCodeResult arg0) { //

}
});

}


测试过程遇到的一些问题:注意,移动地图后根据,地图中心点进行搜索时,一定不要使用下面这段代码进行处理:

PoiNearbySearchOption option = new PoiNearbySearchOption();
option.location(new LatLng(MyLocation.getInstance().getLocation()
.getLatitude(), MyLocation.getInstance().getLocation()
.getLongitude()));
option.keyword(keyword);
option.radius(1000);
option.pageNum(10);
poiSearch.searchNearby(option);


因为测试过程中发现,如果使用了上述代码进行中心点范围内搜索,则每次 执行过后中心点的经纬度坐标是不会发生相应变化的。应该使用:“第四”部中的方法进行搜索,这样搜索出的结果就是我们所预期的结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐