百度地图开发的笔记(篇3)高仿微信发送位置功能

在上一篇中,记录了实现这个功能时,遇到的一些问题以及解决,那么这篇就看下具体的实现代码.

该功能的思路及问题解决:

百度地图开发的笔记(篇2)高仿微信发送位置功能

主要功能(参照微信发送定位):
  • 1.定位所在位置并且展示周边POI(建筑物等信息);
  • 2.拖拽地图完成,返回中心覆盖物所处位置周边的POI信息;
  • 3.支持关键词等搜索,每次搜索完成,中央覆盖物移动到第一条POI信息的相应位置;
  • 4.点击右上角的图标,中央覆盖物回到所定位的位置;
  • 5.点击下边列表的某条数据,将中央覆盖物移至该条数据对应的位置;
  • 6.发送定位时,有相应的地图位置截图和地址信息.
代码实现:

下面核心代码, 实现功能1和功能2:

	@Override
	protected void onCreate(Bundle savedInstanceState) {
   
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ddress);	
		initLocation();
		initListener();
	}
	
	private void initLocation() {
   
	        // 打开定位图层,显示当前位置
	        mbaiduMap.setMyLocationEnabled(true);
	
	        BitmapDescriptor mapIndicator = BitmapDescriptorFactory.fromResource(R.drawable.map_indicator);
	        MyLocationConfiguration config = new MyLocationConfiguration(
	                MyLocationConfiguration.LocationMode.FOLLOWING,     //NORMAL普通态  //COMPASS  // FOLLOWING跟随态,保持定位图标在地图中心
	                false, // 是否显示方向
	                mapIndicator);// 更换图标
	        mbaiduMap.setMyLocationConfiguration(config);
	
	        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15);
	        mbaiduMap.setMapStatus(mapStatusUpdate);
	
	        // 创建定位对象
	        mLocationClient = new LocationClient(this);
	        // 设置监听器接收结果
	        mLocationClient.registerLocationListener(new BDAbstractLocationListener() {
   
	            @Override	// 定位到数据回调此方法
	            public void onReceiveLocation(BDLocation location) {
   
	                isFirstLocation = true;
	                if (location == null) {
   
	                    return;
	                }
	
	                if(jobAddress != null){
   
	                    jobAddress.clear();
	                }
	                // 详细的地址信息
	                mCurrAddrStr = location.getAddrStr();
	                mCity = location.getCity(); 			// 城市
	                mCurrLatitude = location.getLatitude(); 	// 纬度
	                mCurrLongitude = location.getLongitude(); // 经度
	
	                initSearch();
	                refreshBaiduMap(mCurrLatitude,mCurrLongitude,radius);
	            }
	        });
	
	 }

	 private void refreshBaiduMap(double currLatitude,double currLongitude,float accuracy){
   
        MyLocationData datas = new MyLocationData
                .Builder()
                .latitude(currLatitude)   // 纬度
                .longitude(currLongitude)  // 经度
                .accuracy(accuracy) // 定位的精度
                .build();
        // 更新我的位置, 刷新界面显示
        mbaiduMap.setMyLocationData(datas);
    }

	@Override
    public void initListener() {
   
        mbaiduMap.setOnMapStatusChangeListener(new BaiduMap.OnMapStatusChangeListener() {
   
            @Override
            public void onMapStatusChangeStart(MapStatus mapStatus) {
   
            }
            @Override
            public void onMapStatusChangeStart(MapStatus mapStatus, int i) {
   
                Log.i("onMapStatusChangeStart,触发的类型 == " + i);
            }
            @Override
            public void onMapStatusChange(MapStatus mapStatus) {
   
            }
            @Override
            public void onMapStatusChangeFinish(MapStatus mapStatus) {
   
				//定位完成和移动回到原点时会触发
                if(isFirstLocation){
   //是否定位到原点
                    mapCenterLatLng = mapStatus.target;
                    getAddressData(mapCenterLatLng);

                }
            }
        });
        mbaiduMap.setOnMapTouchListener(new BaiduMap.OnMapTouchListener() {
   
            @Override
            public void onTouch(MotionEvent motionEvent) {
   
                switch(motionEvent.getAction()){
   
                    case MotionEvent.ACTION_UP:
                        mapCenterLatLng = mbaiduMap.getMapStatus().target;
						//获取周边POI
                        getAddressData(mapCenterLatLng);
                        break;
                }
            }
        });

        mbaiduMap.setOnMapLoadedCallback(new BaiduMap.OnMapLoadedCallback() {
   
            @Override
            public 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值