百度地图开发常用功能

目标:

1.引入百度地图
2.实现定位功能
3.结合传感器实现方向定位
4.显示模式的切换
5.判断用户位置是否在指定的圆范围内
6.地理编码和反地理编码


步骤:
1.去官方androidsdk中心:[创建应用](http://lbsyun.baidu.com/apiconsole/key)

备注:
sha1:和我们的签名文件有关系,所以对应一个开发版(Debug)和Relise(发布版)
获取sha1值步骤:

获取Debug
1打开自己电脑c盘的.android文件夹---敲入cmd ,复制命令:keytool -list -v -keystore debug.keystore  获取sha1值

获取发布版:

1打开自己电脑c盘的.android文件夹---敲入cmd ,复制命令:keytool -list -v -keystore +签名文件的路径+签名文件的名字

--------------------------以上步骤是申请ak的步骤----------------------------------

2.[下载相关文件](http://lbsyun.baidu.com/sdk/download?selected=location_all)-----去他的Demo中拿文件  否则容易出错


3.配置ak和权限,复制自定义控件,调用自定义控件对应的方法,同步生命周期,

---------以上完成百度地图的helloWord-------------



需要配置的权限

     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />

需要配置的ak

  <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="申请的ak" />
最后别忘了配置一个服务

 <service android:name="com.baidu.location.f" android:process=":remote" android:enabled="true">
            <intent-filter>
            <action android:name="com.baidu.location.service_v2.2"> </action>
            </intent-filter>
        </service>


4.改变百度地图的默认显示标尺

          //1.获取mapView对象
        mMapView = (MapView) findViewById(R.id.bmapView);
        //2.获取操作mapView对象的对象
        mbaidumap = mMapView.getMap();
        //3.获取封装mapView状态数据的类
        MapStatusUpdate  stu = MapStatusUpdateFactory.zoomTo(15.0f);
        //4.把数据给BaiduMap对象
        mbaidumap.setMapStatus(stu);

5.改变地图正常地图和卫星图的切换


               case 1://普通地图
                mbaidumap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                break;
            case 2://卫星图
                mbaidumap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                break;




6.交通状况切换

             case 3://交通图
                if(mbaidumap.isTrafficEnabled()){

                    mbaidumap.setTrafficEnabled(false);
                }else{
                    mbaidumap.setTrafficEnabled(true);
                }

                break;



-----------以上是百度地图的基本设置 涉及一个展示对象和一个操作对象---------------

定位功能:

核心api:  LocationClient类和BDLocationLinstener监听,因为是异步定位

         //创建对象
        client = new LocationClient(this);
        //创建监听
        MyLocationClientLin lin = new MyLocationClientLin();
        //注册监听
        client.registerLocationListener(lin);
        //设置定位方式
        LocationClientOption option = new LocationClientOption();
        option.setCoorType("bd09ll");
        option.setIsNeedAddress(true);
        option.setOpenGps(true);
        option.setScanSpan(1000);
        //添加方式
        client.setLocOption(option);



    //回调接口
   private  class  MyLocationClientLin implements BDLocationListener{

        @Override
        public void onReceiveLocation(BDLocation bdLocation) {
            //获取纬精度
            MyLocationData data = new MyLocationData.Builder()
                    .accuracy(bdLocation.getRadius())
                    .latitude(bdLocation.getLatitude())
                    .longitude(bdLocation.getLongitude())
                    .build() ;
            mbaidumap.setMyLocationData(data);

            //第一次开启的时候设置初始位置
            if(isfaris){

                LatLng ff = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
                MapStatusUpdate msu =  MapStatusUpdateFactory.newLatLng(ff);
                mbaidumap.animateMapStatus(msu);
                 isfaris=false;
            }
            //获取具体的地址
                Toast.makeText(MainActivity.this,bdLocation.getAddrStr() , Toast.LENGTH_SHORT).show();
             Toast.makeText(MainActivity.this,bdLocation.getCountry(), Toast.LENGTH_SHORT).show();
             Toast.makeText(MainActivity.this,bdLocation.getProvince(), Toast.LENGTH_SHORT).show();
             Toast.makeText(MainActivity.this,bdLocation.getCity(), Toast.LENGTH_SHORT).show();
             Toast.makeText(MainActivity.this,bdLocation.getDistrict(), Toast.LENGTH_SHORT).show();
        }
    }


开启或者取消定位


  @Override
    protected void onStart() {
        super.onStart();
        mbaidumap.setMyLocationEnabled(true);
        if(!client.isStarted())
        client.start();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mbaidumap.setMyLocationEnabled(false);
        client.stop();
    }




------------------以上是定位的实现-----------------------

结合手机方向传感器,实现方向定位,地图不动 [具体教程参考链接](http://www.imooc.com/video/5687)



--------------模式切换  -------参考代码-----------------------




-------------判断用户位置是否在指定的圆范围内-------------[具体教程参考链接](http://developer.baidu.com/map/wiki/index.php?title=androidsdk/guide/tool)

  /**
     * 判断一个点 是否在这个圆内
     */
    private void jisuankongjian() {

        LatLng pt1 = new LatLng(113.592075, 34.765855);
        LatLng pt2 = new LatLng(113.702459,34.814709);
        /**
         * 返回true代表在自定位置,参数1,为圆中心,参数2:半径  单位km  参数三:需要判断的位置
         */

        boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(pt1, 1000, pt2);

        Log.e("======",circleContainsPoint+"");
    }



    ----------------- 地理编码-----------------[具体教程参考链接](http://lbsyun.baidu.com/index.php?title=lbscloud/cloudgc/about)

 private void diLi() {
        //新建编码查询对象
        GeoCoder geocode = GeoCoder.newInstance();
        //新建查询对象要查询的条件
        GeoCodeOption GeoOption = new GeoCodeOption().city("郑州").address("金水区商务外环路11号");
        //发起地理编码请求
        geocode.geocode(GeoOption);
        //设置查询结果监听者
        geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {

            /**
             *
             * @param geoCodeResult   地理编码查询结果  输入
             */
            @Override
            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {

                LatLng location = geoCodeResult.getLocation();
                Log.e("地理编码",location.toString());

            }

            /**
             *
             * @param reverseGeoCodeResult   反地理编码
             */
            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

            }
        });
    }
-------------------------反地理编码--------------------------------[具体教程参考链接](http://lbsyun.baidu.com/index.php?title=lbscloud/api/cloudrgc)


  /**
     * 反地理编码
     */
    private void fanDiLi() {

        //新建编码查询对象
        GeoCoder  geocode = GeoCoder.newInstance();
        //查询的经纬度的封装类
        LatLng ll = new LatLng(34.78143397742853,113.7254505942238);
        //新建查询对象要查询的条件
        ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(ll);
        // 发起反地理编码请求
        geocode.reverseGeoCode(options);
        //设置查询结果监听者
        geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
            /**
             * 地理编码
             * @param geoCodeResult
             */
            @Override
            public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {

            }

            /**
             * 反地理编码
             * @param reverseGeoCodeResult
             */
            @Override
            public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {

                if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
                    Log.e("反地理编码","cuowu");
                    return;
                }
                if (reverseGeoCodeResult != null && reverseGeoCodeResult.error == SearchResult.ERRORNO.NO_ERROR) {

                    //得到位置
                   String address = reverseGeoCodeResult.getAddress();

                    Log.e("反地理编码",address);


                }

            }
        });
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值