百度地图的使用-定位-获取位置信息

智码微光
• 阅读 7290

目标:实现定位到当前所在位置

  1. 实现当前定位
  2. 获取当前地址,省份,街道等
  3. 获取经纬度
  4. 修改缩放比例
  5. 去除百度地图logo
  6. 修改定位图片如下:

    百度地图的使用-定位-获取位置信息

效果图:

百度地图的使用-定位-获取位置信息

上代码

public class MainActivity extends AppCompatActivity {

    private MapView mMapView = null;
    BaiduMap mBaiduMap;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        //注意该方法要再setContentView方法之前实现
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        mBaiduMap = mMapView.getMap();
        //移除baidu的logo
        mMapView.removeViewAt(1);
        mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(20.0f).build()));
        mLocationClient = new LocationClient(getApplicationContext());
        //声明LocationClient类
        mLocationClient.registerLocationListener(myListener);
        // 开启定位图层
        mBaiduMap.setMyLocationEnabled(true);
        //注册监听函数
        // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标)
        BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory
                .fromResource(R.drawable.aa);
        MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.FOLLOWING, true, mCurrentMarker);
        mBaiduMap.setMyLocationConfiguration(config);
//        getLocation();
        getlatAndLng();
//        mLocationClient.start();


    }

    private void showMyLocate(MyLocationData location) {


        MyLocationData locData = new MyLocationData.Builder()
                .accuracy(location.accuracy)
                // 此处设置开发者获取到的方向信息,顺时针0-360
                .direction(location.direction).latitude(location.latitude)
                .longitude(location.longitude).build();
        // 设置定位数据
        mBaiduMap.setMyLocationData(locData);



//        mBaiduMap.setMyLocationEnabled(false);

    }


    public LocationClient mLocationClient = null;
    private MyLocationListener myListener = new MyLocationListener();

    private void getLocation() {

        LocationClientOption option = new LocationClientOption();

        option.setIsNeedAddress(true);
        //可选,是否需要地址信息,默认为不需要,即参数为false
        //如果开发者需要获得当前点的地址信息,此处必须为true

        mLocationClient.setLocOption(option);
        //mLocationClient为第二步初始化过的LocationClient对象
        //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
        //更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明

        mLocationClient.start();

    }

    private void getlatAndLng() {


        LocationClientOption option = new LocationClientOption();

        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
        //可选,设置定位模式,默认高精度
        //LocationMode.Hight_Accuracy:高精度;
        //LocationMode. Battery_Saving:低功耗;
        //LocationMode. Device_Sensors:仅使用设备;

        option.setCoorType("bd09ll");
        //可选,设置返回经纬度坐标类型,默认gcj02
        //gcj02:国测局坐标;
        //bd09ll:百度经纬度坐标;
        //bd09:百度墨卡托坐标;
        //海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标

        option.setScanSpan(1000);
        //可选,设置发起定位请求的间隔,int类型,单位ms
        //如果设置为0,则代表单次定位,即仅定位一次,默认为0
        //如果设置非0,需设置1000ms以上才有效

        option.setOpenGps(true);
        //可选,设置是否使用gps,默认false
        //使用高精度和仅用设备两种定位模式的,参数必须设置为true

        option.setLocationNotify(true);
        //可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false

        option.setIgnoreKillProcess(false);
        //可选,定位SDK内部是一个service,并放到了独立进程。
        //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)

        option.SetIgnoreCacheException(false);
        //可选,设置是否收集Crash信息,默认收集,即参数为false

        option.setWifiCacheTimeOut(5 * 60 * 1000);
        //可选,7.2版本新增能力
        //如果设置了该接口,首次启动定位时,会先判断当前WiFi是否超出有效期,若超出有效期,会先重新扫描WiFi,然后定位

        option.setEnableSimulateGps(false);
        //可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false

        mLocationClient.setLocOption(option);
        //mLocationClient为第二步初始化过的LocationClient对象
        //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
        //更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
        mLocationClient.start();
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        // 当不需要定位图层时关闭定位图层
        mBaiduMap.setMyLocationEnabled(false);
        mMapView.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();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_map_normal:
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                break;
            case R.id.menu_map_satellite:
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                break;
            case R.id.menu_map_none:
                mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);
                break;

        }
        return true;
    }


    class MyLocationListener extends BDAbstractLocationListener {


        @Override
        public void onReceiveLocation(BDLocation bdLocation) {

            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(bdLocation.getRadius())
                    // 此处设置开发者获取到的方向信息,顺时针0-360
                    .direction(bdLocation.getDirection()).latitude(bdLocation.getLatitude())
                    .longitude(bdLocation.getLongitude()).build();
            mBaiduMap.setMyLocationData(locData);

            String addr = bdLocation.getAddrStr();    //获取详细地址信息
            String country = bdLocation.getCountry();    //获取国家
            String province = bdLocation.getProvince();    //获取省份
            String city = bdLocation.getCity();    //获取城市
            String district = bdLocation.getDistrict();    //获取区县
            String street = bdLocation.getStreet();    //获取街道信息
            showMyLocate(locData);
        }
    }
}
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
iOS定位原理以及纠偏的一些建议
介绍之前,先声明一下关于地图加加的“偏移修正”功能,地图加加可以对齐中国地区(地点、线路和照片的)坐标和中国地图之间的偏移,这个是我国测绘法规要求的一个数学意义的偏移,每个地方的偏移是固定的,法定的,和当前定位的方式、定位的精度与准确度没有任何关系。即地图加加只对齐偏移,并不能提升、降低或者改变iOS定位的速度、精度和规则,也没有任何App可以做到或者
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
uniapp安卓app打包后获取位置信息失败解决方法(含高德地图key详细申请流程)
这个也是我在做uniapp混合app时遇到的问题,也是困惑了几天,网上也有很大相关文章,但是有些地方有些不清晰,让新手很困惑。问题原因我在项目中碰到两个问题1.如果只需要用定位功能获取到经纬度坐标的,可以不用在manifest.jsonAppSDK配置中勾选定位和地图服务(注意:部分国产Android手机可能必须勾
Wesley13 Wesley13
3年前
UIWebView长按保存图片和识别图片二维码的实现方案(使用缓存)
0x00需求:长按识别UIWebView中的二维码,如下图长按识别二维码0x01方案1:给UIWebView增加一个长按手势,激活长按手势时获取当前UIWebView的截图,分析是否包含二维码。核心代码:略优点:流程简单,可以快速实现。不足:无法实现保存UIWebView中图片,如果当前We
Stella981 Stella981
3年前
Python+Selenium自动化篇
本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''
Stella981 Stella981
3年前
RobotFramework自动化测试之元素定位
前言:最近在做基于RF框架的Web自动化测试,其中涉及到元素的定位,主要用到id、name、xpath、css四中定位方法,尤其后面的两种方法特别有效,可以解决大部分的定位问题。
Wesley13 Wesley13
3年前
Java日期时间API系列23
  有时候,往往需要统计某个时间区间的销量等问题,这就需要准确的起始时间,获取准确开始时间00:00:00,获取准确结束时间23:59:59。下面增加了一一些方法,获取当天起始时间,昨天起始时间,当前月第一天开始时间,当前月最后一天结束时间,上个月第一天开始时间,上个月最后一天结束时间,某个指定月的起始结束时间等等。其中月份最后一天往往因为月份不同和
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 定位获取(25)
技术栈Appgalleryconnect开发准备上一节我们实现了地址管理页面的数据查询和展示,接下来我们要实现的功能是地址添加相关的,我们想实现的功能是地图选点,那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息,然后
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 原生地图展示(26)
技术栈Appgalleryconnect开发准备上一节我们实现了获取当前用户的位置,并且成功的拿到了经纬度,这一节我们就要根据拿到的经纬度,结合我们其他的知识点来实现地图的展示。功能分析地图的展示,我们需要在管理中心先给我们对应的应用开启地图api功能,否
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 地图选点(27)
技术栈Appgalleryconnect开发准备上一节我们实现了地图的简单展示,这一节我们要实现的内容是,根据展示的地图,实现当前定位功能,当前位置的poi地址功能,以及列表的展示,给地图添加标记,展示自己的当前定位功能分析要想实现这些功能,首先我们需要在
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 新增地址(28)
技术栈Appgalleryconnect开发准备上一节我们实现了地图选点,获取当前位置,在地图上添加标记,根据当前的定位获取poi地址列表等功能,这些全部都为了我们这一节而铺垫,这一节我们要实现的是新增地址,把我们的用户信息,填写收件人、门牌号、手机号、经