博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 百度地图开发(二)
阅读量:5960 次
发布时间:2019-06-19

本文共 3613 字,大约阅读时间需要 12 分钟。

hot3.png

上一篇把使用百度地图的基本使用方法介绍了,这一篇继续上一篇的.

当我们把百度地图跑起来了发现,哦!地图居然上显示的居然是我们大天朝的帝都,可是我想定位我自己的位置啊!好下来我就说一下如何定位.
    /*************定义的所使用的变量 START**********************************/
    // 百度地图控件
    private MapView mMapView = null;
    private BaiduMap mBaiduMap;
    private BitmapDescriptor mCurrentMarker;
    private LocationMode mCurrentMode;
    //定位的监听器
    public MyLocationListener mMyLocationListener;
    //定位的客户端
    private LocationClient mLocationClient;
    //是否是第一次定位
    private volatile boolean isFristLocation = true;
    private BDLocation mBdLocation;
    private ImageView mImageView;
    /*************定义的所使用的变量 END***********************************/
    private void initBaiduMap() {
        mMapView = (MapView) findViewById(R.id.bmapview);
        /**
         * mCurrentMode = LocationMode.FOLLOWING; // 跟随模式
         * mCurrentMode = LocationMode.COMPASS; // 罗盘模式
         */
mCurrentMode = LocationMode.NORMAL; // 普通模式LocationMode
        mMyLocationListener = new MyLocationListener();
        mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_location); // 自定义图标
        mBaiduMap = mMapView.getMap();
        mBaiduMap.setMyLocationEnabled(true);//设置是否允许定位图层
        mLocationClient = new LocationClient(this);
        mLocationClient.registerLocationListener(mMyLocationListener);//注册定位监听
        LocationClientOption option = new LocationClientOption();
        option.setOpenGps(true);//打开GPS
        /**
         * setCoorType坐标类型分为三种:
         * bd09ll百度加密经纬度坐标
         * bd09百度加密墨卡托坐标
         * gcj02国测局加密经纬度坐标
         */
        option.setCoorType("bd0911");//设置坐标类型
        option.setScanSpan(5000);//定位的时间间隔,单位是mm
        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }
上面的有些类的介绍或者使用方法,参数不明白的可以参考 http://developer.baidu.com/map/index.php?title=androidsdk百度的官方文档,比较全面.
    public class MyLocationListener implements BDLocationListener {
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            mBdLocation = bdLocation;
            // MapView 销毁后不在处理新接收的位置
            if (bdLocation == null || mMapView == null) {
                return;
            }
            // 构造定位数据
            MyLocationData locationData = new MyLocationData.Builder()
                    .accuracy(bdLocation.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(0).latitude(bdLocation.getLatitude())
                    .longitude(bdLocation.getLongitude()).build();
            // 设置定位数据
            mBaiduMap.setMyLocationData(locationData);
            // 设置自定义图标
            mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));
            // 第一次定位时,将地图位置移动到当前位置
            if (isFristLocation) {
                isFristLocation = false;
                LatLng latLng = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
                MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);
                mBaiduMap.animateMapStatus(mapStatusUpdate);
            }
            showOtherLocation ();
            showTextOverlay();
        }
    }
MyLocationData的direction方法可以以后开发根据收据sensor来实时的改变图标的方向的需求.这样打开地图时就可以定位了.这是有的同学会发现我们定位后在把地图划到别的地方时,唉我们似乎少了一个定位按钮.是的百度图的view上似乎是没有自带这个东东的反正我是没有找到.所以我自己写了一个这个按钮,其实很简单.我们在xml文件中添加了一个ImageView,其他的初始化过程就不再多写了.
    @Override
    public void onClick(View v) {
        if (mImageView.getId() == v.getId()) {
            requestLocation();
        }
    }
   /**
     * 请求定位
     */
    private void requestLocation() {
        if (mBdLocation != null) {
            //地理坐标-->LatLng
            //latitude - 纬度
            //longitude - 经度
            LatLng latLng = new LatLng(mBdLocation.getLatitude(), mBdLocation.getLongitude());
            MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLng(latLng);
            mBaiduMap.animateMapStatus(mapStatusUpdate);
            Toast.makeText(this,"定位成功",Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this,"定位失败", Toast.LENGTH_SHORT).show();
        }
    }
大家看到了我写的其实就是使用第一次定位一样的方式方法.在此我总觉得代码上有些冗余.如果有谁有更高明的定位方法给我指点一二!
这次代码粘贴的比较多介绍的少了些,有的方法不知道怎么使用或者参数不明确的大家可以参考: http://developer.baidu.com/map/index.php?title=androidsdk
毕竟鄙人能力时间有限只看了与使用相关的一些方法.OK,大家在使用百度地图时有时想显示一下其他的位置.对于这些开发需要用到图层.下次为大家介绍一下图层的作用和使用.唉我的项目新的功能需求来喽!又要忙一阵了.其实忙感觉挺充实的.

转载于:https://my.oschina.net/SunnyTime/blog/592421

你可能感兴趣的文章
FastDFS存储服务器部署
查看>>
Android — 创建和修改 Fragment 的方法及相关注意事项
查看>>
swift基础之_swift调用OC/OC调用swift
查看>>
Devexpress 15.1.8 Breaking Changes
查看>>
Java B2B2C多用户商城 springcloud架构- common-service 项目构建过程(七)
查看>>
杨老师课堂之ArrayList集合常用方法解析
查看>>
ElasticSearch Client详解
查看>>
新零售讲堂之时代下的传统零售业,何去何从?
查看>>
c++读取和写入TXT文件的整理
查看>>
linux安全问答(1)
查看>>
mybatis update返回值的意义
查看>>
expdp 详解及实例
查看>>
解读最具O2O属性—哈根达斯微信企业号的成功之道
查看>>
Extjs4.x (MVC)Controller中refs以及Ext.ComponentQuery解析
查看>>
Server-01 How to Find the Remote Desktop Port
查看>>
Java--接口、抽象与继承
查看>>
通过IP判断登录地址
查看>>
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>