模仿单车定位页面拖动地图位置移动POI周边数据的定位效果(基于百度)
1.定位指针
在地图中央写一个imageview控件,定位针类似,在代码中转换获取到地图的经纬度
2.拖动(直接上代码)
BaiduMap.OnMapStatusChangeListener onMapStatusChangeListener = new BaiduMap.OnMapStatusChangeListener() { /** * 手势操作地图,设置地图状态等操作导致地图状态开始改变。 * @param mapStatus 地图状态改变开始时的地图状态 */ @Override public void onMapStatusChangeStart(MapStatus mapStatus) { Toast.makeText(PoiSearchDemo.this, "开始滑动", Toast.LENGTH_SHORT).show(); } /** * 手势操作地图,设置地图状态等操作导致地图状态开始改变。 * @param mapStatus 地图状态改变开始时的地图状态 */ @Override public void onMapStatusChangeStart(MapStatus mapStatus, int i) { Log.e("TAG","滑动中"+i); } /** * 地图状态变化中 * @param mapStatus 当前地图状态 */ @Override public void onMapStatusChange(MapStatus mapStatus) { Log.e("TAG","滑动中"); } /** * 地图状态改变结束 * @param mapStatus 地图状态改变结束后的地图状态 */ @Override public void onMapStatusChangeFinish(MapStatus mapStatus) { Toast.makeText(PoiSearchDemo.this, "结束滑动", Toast.LENGTH_SHORT).show(); // updateCenterPos(mapStatus); updateCenterPos2(); //方法一 // LatLng mCenterLatLng = mapStatus.target; // /*获取经纬度*/ // double lat = mCenterLatLng.latitude; // double lng = mCenterLatLng.longitude; // Log.e("地图坐标","经度:"+lat+"纬度"+lng); // mBaiduMap.clear(); // center = new LatLng(lat, lng); // searchType = 2; // PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption() // .keyword(keyWorldsView.getText().toString())//关键字 // .sortType(PoiSortType.distance_from_near_to_far)//搜索类型,从近至远 // .location(center)指定位置,选填,设置位置之后,返回结果按距离该位置的远近进行排序 // .radius(radius)//搜索覆盖半径 // .pageNum(loadIndex);//查询第几页:POI量可能会很多,会有分页查询; // mPoiSearch.searchNearby(nearbySearchOption); } };
3.在拖动地图结束时转换得到定位针对应地图的经纬度,并获取POI搜索结果,搜索这个百度API比较清晰,看文档
public void updateCenterPos2(){ // 获取屏幕点 int[] location =new int[2]; iv_mark_point.getLocationOnScreen(location); int x = location[0]; int y = location[1]; Point centerTop = new Point(x,y); //获取屏幕点 的坐标位置 LatLng latlng = mBaiduMap.getProjection().fromScreenLocation(centerTop); double lat = latlng.latitude; double lng = latlng.longitude; Log.e("地图坐标2","经度:"+lat+"纬度"+lng); center = new LatLng(lat, lng); searchType = 2; PoiNearbySearchOption nearbySearchOption = new PoiNearbySearchOption() .keyword(keyWorldsView.getText().toString())//关键字 .sortType(PoiSortType.distance_from_near_to_far)//搜索类型,从近至远 .location(center)指定位置,选填,设置位置之后,返回结果按距离该位置的远近进行排序 .radius(radius)//搜索覆盖半径 .pageNum(loadIndex);//查询第几页:POI量可能会很多,会有分页查询; mPoiSearch.searchNearby(nearbySearchOption); }总结:写这篇文档是为了标记自己对Mark指针在单车使用中的好奇,为什么他们拖动地图后指针不会变呢,网上没有人具体说明过程,我想单车现在这么火,类似这种demon技术应该很多,so标记一下,让类似我这样使用却没搜到结果的人看到,Ok