百度地图定位Demo补充

来源:互联网 发布:ios软件开发语言 编辑:程序博客网 时间:2024/05/17 04:26
package zjc.bwie.com.baidutext;import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.Window;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.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatus;import com.baidu.mapapi.map.MapStatusUpdate;import com.baidu.mapapi.map.MapStatusUpdateFactory;import com.baidu.mapapi.map.MapView;import com.baidu.mapapi.map.MyLocationConfiguration;import com.baidu.mapapi.map.MyLocationData;import com.baidu.mapapi.model.LatLng;public class MainActivity extends Activity {    public MapView mMapView = null;    public LocationClient mLocationClient = null;    public MyLocationListenner myListener = new MyLocationListenner();    public BaiduMap mMapViewMap;    boolean isFirstLoc = true; // 是否首次定位    //每次定位后,获取经纬度    private double X;    private double Y;    //自定义定位图标    private BitmapDescriptor myiconLoaction;    //实例化传感器对象    private MyorientationListener myorientationListener;    //记录传感器的x坐标    private float CurrentX;    //模式变量    private MyLocationConfiguration.LocationMode locationmode = MyLocationConfiguration.LocationMode.NORMAL;    ;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        //在使用SDK各组件之前初始化context信息,传入ApplicationContext        //注意该方法要再setContentView方法之前实现        SDKInitializer.initialize(getApplicationContext());        setContentView(R.layout.activity_main);        //获取地图控件引用        mMapView = (MapView) findViewById(R.id.bmapView);        mMapViewMap = mMapView.getMap();        //设置页面比例        MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(20.0f);        mMapViewMap.setMapStatus(mapStatusUpdate);        //定位功能        makePosition();    }    @Override    protected void onStart() {        //设置定位允许        mMapViewMap.setMyLocationEnabled(true);        //开启定位        if (!mLocationClient.isStarted()) {            mLocationClient.start();        }        //开启方向传感器        myorientationListener.start();        super.onStart();    }    @Override    protected void onStop() {        //停止定位        mMapViewMap.setMyLocationEnabled(false);        mLocationClient.stop();        //关闭方向传感器        myorientationListener.stop();        super.onStop();    }    public void makePosition() {        // 开启定位图层        mMapViewMap.setMyLocationEnabled(true);        mMapViewMap                .setMyLocationConfigeration(new MyLocationConfiguration(                        locationmode, true, null));        mLocationClient = new LocationClient(this);        mLocationClient.registerLocationListener(myListener);        LocationClientOption option = new LocationClientOption();        option.setOpenGps(true); // 打开gps        option.setIsNeedAddress(true);//可以帮助我们获取当前的地址        option.setCoorType("bd09ll"); // 设置坐标类型        option.setScanSpan(1000);        mLocationClient.setLocOption(option);        //初始化图标        myiconLoaction = BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);        //实例化传感器对象        myorientationListener = new MyorientationListener(this);        myorientationListener.setOnorientationListener(new MyorientationListener.OnorientationListener() {            @Override            public void onOreationChanged(float x) {                CurrentX = x;            }        });    }    /**     * 设置Menu菜单的布局     *     * @param menu     * @return     */    @Override    public boolean onCreateOptionsMenu(Menu menu) {        //设定自定义布局        getMenuInflater().inflate(R.menu.menu_layout, menu);        return true;    }    /**     * Menu菜单按钮的点击事件     *     * @param item     * @return     */    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()) {            case R.id.comment://切换普通地图状态                mMapViewMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);                break;            case R.id.site://切换卫星地图                mMapViewMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);                break;            case R.id.traffic://切换实时交通地图                if (mMapViewMap.isTrafficEnabled()) {                    mMapViewMap.setTrafficEnabled(false);                } else {                    mMapViewMap.setTrafficEnabled(true);                }                break;            case R.id.myPosition:                //定位当前位置                madePosition();                break;            case R.id.model_comment:                locationmode = MyLocationConfiguration.LocationMode.NORMAL;                break;            case R.id.model_fllow://跟随模式                locationmode = MyLocationConfiguration.LocationMode.FOLLOWING;                break;            case R.id.model_luopan://罗盘模式                locationmode = MyLocationConfiguration.LocationMode.COMPASS;                break;        }        return super.onOptionsItemSelected(item);    }    public void madePosition() {        LatLng ll = new LatLng(X,                Y);        MapStatus.Builder builder = new MapStatus.Builder();        builder.target(ll).zoom(18.0f);        mMapViewMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));    }    @Override    protected void onDestroy() {        // 退出时销毁定位        mLocationClient.stop();        // 关闭定位图层        mMapViewMap.setMyLocationEnabled(false);        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理        mMapView.onDestroy();        mMapView = null;        super.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理        mMapView.onPause();    }    /**     * 定位SDK监听函数     */    public class MyLocationListenner implements BDLocationListener {        @Override        public void onReceiveLocation(BDLocation location) {            // map view 销毁后不在处理新接收的位置            if (location == null || mMapView == null) {                return;            }            MyLocationData locData = new MyLocationData.Builder()                    .accuracy(location.getRadius())                    // 此处设置开发者获取到的方向信息                    .direction(CurrentX)                    .latitude(location.getLatitude())                    .longitude(location.getLongitude()).build();            mMapViewMap.setMyLocationData(locData);            //设置自定义的图标,这里使用的是自定义的图标            MyLocationConfiguration configuration = new MyLocationConfiguration(locationmode, true, myiconLoaction);            mMapViewMap.setMyLocationConfigeration(configuration);            //更新,并记录当前的经纬度            X = location.getLatitude();            Y = location.getLongitude();            if (isFirstLoc) {                isFirstLoc = false;                LatLng ll = new LatLng(location.getLatitude(),                        location.getLongitude());                MapStatus.Builder builder = new MapStatus.Builder();                builder.target(ll).zoom(18.0f);                mMapViewMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));                //吐司当前的位置信息                Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();            }        }        public void onReceivePoi(BDLocation poiLocation) {        }    }
<strong><span style="font-size:24px;">补充Demo下载地址 :http://download.csdn.net/detail/dm_jc/9585160</span></strong>
1 0
原创粉丝点击