百度地图的使用

来源:互联网 发布:现在的淘宝太坑了女孩 编辑:程序博客网 时间:2024/05/01 11:17

其余代码解析可在上一篇博文《位置服务实例》中查看


加载百度地图:


先初始化,再新建MapView对象绑定地图api控件,最后重写3个方法。


移动到本机所在地:


新建BaiduMap示例,联系MapView对象,编写一个获取本机纬度经度和设置缩放级别以BDLocation对象为参数的方法,再在监听类中调用该方法。代码如下:


MainActivity.class:


import android.Manifest;import android.content.pm.PackageManager;import android.os.Bundle;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v7.app.AppCompatActivity;import android.widget.TextView;import android.widget.Toast;import com.baidu.location.BDLocation;import com.baidu.location.BDLocationListener;import com.baidu.location.LocationClient;import com.baidu.location.LocationClientOption;import com.baidu.mapapi.SDKInitializer;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.model.LatLng;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity {    private LocationClient locationClient;    private TextView positionText;    private MapView mapView;    //加载百度地图,默认位置为北京市    private BaiduMap baiduMap;  //用于在百度地图定位到本机所处位置    private boolean isFirstLocate=true;    @Override    protected void onCreate(Bundle saveInstanceState){        super.onCreate(saveInstanceState);        locationClient=new LocationClient(getApplicationContext());        locationClient.registerLocationListener(new MyLocationListener());  //注册位置监听器        SDKInitializer.initialize(getApplicationContext());     //加载百度地图,初始化,必须在绑定布局前初始化        setContentView(R.layout.activity_main);        positionText=(TextView)findViewById(R.id.position_text_view);        mapView=(MapView)findViewById(R.id.bmapView);       //加载百度地图,绑定地图控件        baiduMap=mapView.getMap();//获取地图管理器以操作地图
        List<String> permissionList=new ArrayList<>();  //存放需要动态申请运行时权限的权限        if(ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){            permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);        }        if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED){            permissionList.add(Manifest.permission.READ_PHONE_STATE);        }        if(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){            permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);        }        if(!permissionList.isEmpty()){  //不为空则说明需要申请权限            String[] permissions=permissionList.toArray(new String[permissionList.size()]);            ActivityCompat.requestPermissions(MainActivity.this,permissions,1);        }else{            requestLocation();        }    }    //在地图上定位本机所在地    private void navigateTo(BDLocation location){        if(isFirstLocate){            LatLng ll=new LatLng(location.getLatitude(),location.getLongitude());   //获取所在地的纬度和经度            MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(ll);            baiduMap.animateMapStatus(update);            update=MapStatusUpdateFactory.zoomTo(16f);      //设定地图的缩放级别            baiduMap.animateMapStatus(update);            isFirstLocate=false;        }
    }    //加载百度地图    @Override    protected void onResume(){        super.onResume();        mapView.onResume();    }    @Override    protected void onPause(){        super.onPause();        mapView.onPause();    }    private void requestLocation(){        initLocation();        locationClient.start(); //触发监听器    }    private void initLocation(){        LocationClientOption option=new LocationClientOption();        option.setScanSpan(5000);        option.setIsNeedAddress(true);        locationClient.setLocOption(option);    }    @Override    protected void onDestroy(){        super.onDestroy();        locationClient.stop();        mapView.onDestroy();    }    @Override    public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults){        switch(requestCode){            case 1:                if(permissions.length>0){                    for(int result:grantResults){                        if(result!=PackageManager.PERMISSION_GRANTED){                            Toast.makeText(MainActivity.this,"需要权限!",Toast.LENGTH_SHORT).show();                            finish();                            return;                        }                    }                    requestLocation();                }else{                    Toast.makeText(MainActivity.this,"未知错误!",Toast.LENGTH_SHORT).show();                    finish();                }        }    }    //监听器类    public class MyLocationListener implements BDLocationListener {        @Override        public void onConnectHotSpotMessage(String s, int i) {        }        @Override        public void onReceiveLocation(BDLocation location){            if(location.getLocType()==BDLocation.TypeGpsLocation||location.getLocType()==BDLocation.TypeNetWorkLocation){                //传入location参数调用navigateTo方法,在地图上定位本机所在地                navigateTo(location);            }            StringBuilder currentPosition=new StringBuilder();            currentPosition.append("纬度:").append(location.getLatitude()).append("\n");            currentPosition.append("经线:").append(location.getLongitude()).append("\n");            currentPosition.append("国家:").append(location.getCountry()).append("\n");            currentPosition.append("省份:").append(location.getProvince()).append("\n");            currentPosition.append("城市:").append(location.getCity()).append("\n");            currentPosition.append("区县:").append(location.getDistrict()).append("\n");            currentPosition.append("街道:").append(location.getStreet()).append("\n");            currentPosition.append("定位方式:");            if(location.getLocType()==BDLocation.TypeGpsLocation){                currentPosition.append("GPS");            }else if(location.getLocType()==BDLocation.TypeNetWorkLocation){                currentPosition.append("网络");            }            positionText.setText(currentPosition);        }    }}


activity_main.layout:


<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:layout_height="match_parent">    <TextView        android:id="@+id/position_text_view"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:visibility="gone"/>    <com.baidu.mapapi.map.MapView        android:id="@+id/bmapView"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:clickable="true"/></LinearLayout>


在地图上显示我:


MainActivity.class:


protected void onCreate(Bundle saveInstanceState){    super.onCreate(saveInstanceState);    。。。。    baiduMap.setMyLocationEnabled(true);}


private void navigateTo(BDLocation location){    if(isFirstLocate){        LatLng ll=new LatLng(location.getLatitude(),location.getLongitude());   //获取所在地的纬度和经度        MapStatusUpdate update= MapStatusUpdateFactory.newLatLng(ll);        baiduMap.animateMapStatus(update);        update=MapStatusUpdateFactory.zoomTo(16f);      //设定地图的缩放级别        baiduMap.animateMapStatus(update);        isFirstLocate=false;    }    MyLocationData.Builder locationBuilder=new MyLocationData.Builder();    locationBuilder.latitude(location.getLatitude());    locationBuilder.longitude(location.getLongitude());    MyLocationData locationData=locationBuilder.build();    baiduMap.setMyLocationData(locationData);}

protected void onDestroy(){    super.onDestroy();    baiduMap.setMyLocationEnabled(false);    locationClient.stop();    mapView.onDestroy();}


原创粉丝点击