百度API———地图定位(一)*

原创 2016年08月30日 15:45:19

百度AIP地址
百度定位SDK

一、定位策略

混合GPS+基站+WiFi定位,百度地图定位SDK会根据环境自动调整定位策略。

定位方式 介绍
GPS 误差10M左右,精准、耗电、室内不可用。精度和GPS设备使用环境相关
wifi 误差24M左右,较精准、需要连接wifi
基站 误差210M左右,误差较大、使用范围广、需要连网

1. 高精度模式定位策略:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果
2. 低功耗模式定位策略:该定位模式下,不会使用GPS,只会使用网络定位(Wi-Fi和基站定位)
3. 仅用设备模式定位策略:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位

二、做定位的思路

  • 获取定位后的位置信息(百度地图有获取当前位置信息的API)
  • 把定位信息加载到地图上

三、尝试做第一个定位

(1)准备工作

  • 申请key,这个就不多说了
  • 下载相关jar包,和对应的.so文件(BaiduLBS_Android.jar)

(2)关键类

类名 含义
MapView 百度地图控件
BaiduMap 地图对象的操作方法与接口
LocationClient 定位关键类!定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动
LocationClientOption 配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等
BDLocationListener 定位请求回调接口,当获取位置信息的时候就会回调
BDLocation 百度坐标类,内部封装了如经纬度、半径等属性信息

(3)代码

》》关于定位设置、启动

    /**
     * 初始化百度地图
     */
    private void initMap() {
        /*
        百度地图:下面的是定位相关代码
        LocationClientOption配置定位SDK各配置参数,比如定位模式、定位时间间隔、坐标系类型等
         */
        LocationClientOption mLocationClientOption = new LocationClientOption();
        mLocationClientOption.setCoorType("bd09ll");// 设置坐标类型
        mLocationClientOption.setIsNeedAddress(true);// 设置是否需要地址信息,默认为无地址
        mLocationClientOption.setOpenGps(true);// 设置是否打开gps进行定位
        mLocationClientOption.setScanSpan(5000);// 设置扫描间隔,单位是毫秒 当<1000(1s)时,定时定位无效
        /*
        LocationClient定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动
         */
        LocationClient mLocationClient = new LocationClient(context, mLocationClientOption);// 设置入LocationClient
        /*
        开始定位
         */
        MyBDLocationListener mBDLocationListener = new MyBDLocationListener();// 获取监听对象(MyBDLocationListener是实现了BDLocationListener接口的类)
        mLocationClient.registerLocationListener(mBDLocationListener);// 注册定位监听函数
        mLocationClient.start();// 启动定位sdk
    }

》》关于定位回调接口的实现,BDLocationListener

    /**
     * 实现定位请求回调接口
     */
    private class MyBDLocationListener implements BDLocationListener {

        /**
         * 发生定位时的回调方法
         *
         * @param bdLocation 百度坐标类,内部封装了如经纬度、半径等属性信息
         */
        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            /*
            百度地图:下面是根据定位信息,落实到地图相关的代码,以及百度地图界面相关配置
             */
            BaiduMap mBaiduMap = map_view.getMap();// 地图对象的操作方法与接口
            mBaiduMap.setMyLocationEnabled(true);// 开启定位图层
            MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.zoomTo(18.0f);// 设置初始缩放级别
            mBaiduMap.setMapStatus(mMapStatusUpdate);// 改变地图状态
            /*
            MyLocationData定位数据对象
             */
            MyLocationData mLocationData = new MyLocationData.Builder()
                    .accuracy(1)// 定位精度
                    .direction(bdLocation.getDirection())// GPS定位时方向角度,顺时针0-360
                    .latitude(bdLocation.getLatitude())//百度纬度坐标
                    .longitude(bdLocation.getLongitude())//百度经度坐标
                    .build();// 设置相关显示数据
            mBaiduMap.setMyLocationData(mLocationData);// 把定位数据设置到BaiduMap对象
            BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.icon_car);
            BitmapDescriptor mFriendMarker = BitmapDescriptorFactory.fromResource(R.mipmap.icon_friend_point);
            /*
            MyLocationConfiguration配置定位图层显示方式
            可以设置精度圈填充颜色、精度圈边框颜色、用户自定义定位图标、是否允许显示方向信息、定位图层显示方式
             */
            MyLocationConfiguration mLocationConfiguration = new MyLocationConfiguration(
                    MyLocationConfiguration.LocationMode.COMPASS,
                    true,
                    mCurrentMarker);
            mBaiduMap.setMyLocationConfigeration(mLocationConfiguration);// 把定位图层显示方式设置到BaiduMap对象
        }
    }

四、一些问题

  1. 目前没有接口限制,但不支持多线程并发访问。
  2. 百度定位SDK可以返回三种坐标系,分别是bd09, bd09ll和gcj02,其中bd09ll能无偏差地显示在百度地图上。
  3. 百度地图api中采用两种坐标体系,经纬度坐标系和墨卡托投影坐标系。

以下是遇到的坑,只能描述一些表现

  • 死活出不来,没有报错,就是闪退,可能就是BDLocation为null
  • Android6.0新特性,有些权限不能配置,需要手动申请。》》解决办法
  • 百度地图4.9E-324,error code : 162 latitude : 4.9E-324 lontitude : 4.9E-324》》这个报错,只能说明一件事,定位信息没拿到。原因很多,需要分析,说几个:
    1.可能是key的问题
    2.可能是缺少权限问题,参照上一问题去分析
    3.也可能是当前定位条件真的不行,可以到空旷的地域去测试
    4.可能是.so文件没导入成功,可以仿照Baidu的Demo去放.so文件并在Gradle中配置好。
版权声明:转载请标示出处,链接http://blog.csdn.net/tea_gag

百度地图API的使用方法

百度地图API 开始学习百度地图API最简单的方式是看一个简单的示例。以下代码创建了一个520x340大小的地图区域并以天安门作为地图的中心:    1.    2.    3...
  • curry_du
  • curry_du
  • 2016年02月20日 11:53
  • 11905

百度IP定位和百度地图API定位

百度IP定位 在这里根据你所获得ip,来确定这个ip的大体位置 package com.soufun.wap.action; import java.io.BufferedReader; imp...
  • wangbiao007
  • wangbiao007
  • 2015年06月24日 17:30
  • 14418

突然发现百度的API越来越好用了,简单使用百度API精准定位IP地址。附Python代码

2016年11月27日08:13:13 API服务地址: http://lbsyun.baidu.com/index.php?title=webapi/high-acc-ip 使用方法:...
  • du_chao_qun
  • du_chao_qun
  • 2016年11月27日 16:38
  • 9009

Android使用百度地图API实现定位app

前言:有时候,我们活得很累,并非生活过于刻薄,而是我们太容易被外界的氛围所感染,被他人的情绪所左右。行走在人群中,我们总是感觉有无数穿心掠肺的目光,有很多飞短流长的冷言,最终乱了心神,渐渐被缚于自己编...
  • qq_31307919
  • qq_31307919
  • 2016年05月30日 19:38
  • 12229

百度API 定位 返回当前详细位置

百度地图API是一套为开发者免费提供的基于百度地图的应用程序接口,包括JavaScript、iOS、Andriod、静态地图、Web服务等多种版本,提供基本地图、位置搜索、周边搜索、......
  • wuchengzeng
  • wuchengzeng
  • 2015年07月22日 14:16
  • 3454

【百度地图API】之定位篇

在拿到这个需求的时候我起初想到的是手机自带的GPS的调用,但是这样以来就必须有iOS和Android的同学的支持,或者说我们对于我的这个需求是不可行的(因为是内嵌到钉钉里的一个H5页面)。这是我又想到...
  • crazyshoushou
  • crazyshoushou
  • 2016年12月07日 23:11
  • 284

使用百度地图api实现定位及选择位置功能

转自;使用百度地图api实现定位及选择位置功能
  • zinjin_woxin
  • zinjin_woxin
  • 2016年09月29日 17:10
  • 1779

百度api 输入位置获取坐标 最新

根据地址查询经纬度 要查询的地址: 查询结果(经纬度): ...
  • weixin_37799190
  • weixin_37799190
  • 2018年01月27日 02:51
  • 59

如何使用百度地图API自动获取地址和经纬度

在实际工作中我们经常会遇到这样的问题,但是当我们去看百度API的时候往往又达不到我们的要求。 故此,本篇博文讲述如何使用百度地图API自动获取地址和经纬度: 1、HTML代码如下 ...
  • Zhihua_W
  • Zhihua_W
  • 2016年09月03日 17:28
  • 18560

百度地图api实现定位功能

百度地图api实现定位功能 java代码 package com.demo.an.android.location; import android.app.Activity; import ...
  • zhupengqq
  • zhupengqq
  • 2016年11月05日 16:40
  • 1206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:百度API———地图定位(一)*
举报原因:
原因补充:

(最多只允许输入30个字)