3.0+百度地图,如何获取地图中心点位置(每次滑动地图后都能够获取地图的中心点位置,并做出相应的操作)
现在有这样一个业务:
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);
因为测试过程中发现,如果使用了上述代码进行中心点范围内搜索,则每次 执行过后中心点的经纬度坐标是不会发生相应变化的。应该使用:“第四”部中的方法进行搜索,这样搜索出的结果就是我们所预期的结果
分类:
Android
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库