zoukankan      html  css  js  c++  java
  • AndroidStudio下加入百度地图的使用 (三)——API基本方法及常量属性

      上一章中我们已经完成定位功能,这一章向大家介绍一下常用的方法及常量属性的意思。

    (1) 手势方法

    缩放: setZoomGesturesEnabled()

    俯视: setOverlookingGesturesEnabled()

    旋转:setRotateGesturesEnabled()

    平移: setScrollGesturesEnabled()

    (2) 地图模式方法

    setMapType(常量)

    常量1:普通地图BaiduMap. MAP_TYPE_NORMAL

    常量2:卫星地图: BaiduMap.MAP_TYPE_SATELLITE

    开启交通模式:mBaiduMap.setTrafficEnabled(true)

    (3) 定位设置中用到的方法及常量

    定位精度: new LocationClientOption().setLocationMode(常量)

    常量1:高精度模式(GPS+Wifi+基站) LocationMode.Hight_Accuracy 

    常量2:低功耗模式(Wifi+基站)      LocationMode. Battery_Saving

    常量3:仅设备模式(GPS)             LocationMode. Device_Sensors

    定位结果:

    国家测绘局标准

    1. new LocationClientOption().setCoorType ("gcj02")

    百度经纬度标准

    1. new LocationClientOption().setCoorType ("bd09ll")

    百度墨卡托标准

    1. new LocationClientOption().setCoorType ("bd09")

    效果:

    下面我们来具体使用一下

    第一步:在xml文件中加入服务的定义

    这是SDK中自带的服务,只需如此定义即可

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

    第二步: 在上一章的布局中添加控件

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
    
        <CheckBox
            android:id="@+id/zoom"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:onClick="setZoomEnable"
            android:text="缩放" />
    
        <CheckBox
            android:id="@+id/scroll"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:onClick="setScrollEnable"
            android:text="平移"
            android:layout_below="@+id/rotate"
            android:layout_toRightOf="@+id/compass"
            android:layout_toEndOf="@+id/compass" />
        <CheckBox
            android:id="@+id/compass"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="true"
            android:onClick="setCompassEnable"
            android:text="指南针"
            android:layout_below="@+id/zoom"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true" />
    
        <CheckBox
            android:id="@+id/rotate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="true"
            android:onClick="setRotateEnable"
            android:text="旋转"
    
            android:layout_alignParentTop="true"
            android:layout_toRightOf="@+id/zoom"
            android:layout_toEndOf="@+id/zoom" />
    
        <CheckBox
            android:id="@+id/overlook"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:checked="true"
            android:onClick="setOverlookEnable"
            android:text="俯视"
            android:layout_above="@+id/compass"
            android:layout_toRightOf="@+id/rotate"
            android:layout_toEndOf="@+id/rotate" />
        <com.baidu.mapapi.map.MapView
            android:id="@+id/MyMpView"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:clickable="true"
            android:layout_below="@+id/scroll"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true" />
    <RadioGroup
        android:id="@+id/radioButtonGroup"
        android:layout_width="wrap_content"
        android:orientation="horizontal"
        android:layout_height="wrap_content"
    
        android:layout_below="@+id/overlook"
        android:layout_toRightOf="@+id/scroll"
        android:layout_toEndOf="@+id/scroll">
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="普通"
            android:id="@+id/mapNormal"
       />
    
        <RadioButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="卫星"
            android:id="@+id/mapSate"
           />
    
    </RadioGroup>
    
        <CheckBox
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="交通"
            android:id="@+id/mapTraffic"
            android:onClick="setTrafficMap"
            android:layout_alignTop="@+id/radioButtonGroup"
            android:layout_toRightOf="@+id/radioButtonGroup"
            android:layout_toEndOf="@+id/radioButtonGroup" />
    </RelativeLayout>

    第三步: 在监听事件方法中设置地图的使用,Activity完整代码

    package com.jerehedu.administrator.baidumapapplication;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.CheckBox;
    import android.widget.RadioGroup;
    
    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.MyLocationConfigeration;
    import com.baidu.mapapi.map.MyLocationData;
    import com.baidu.mapapi.map.UiSettings;
    import com.baidu.mapapi.model.LatLng;
    
    
    public class UISettingDemo extends Activity {
    
        /**
         * MapView 是地图主控件
         */
        private MapView mMapView;
        private BaiduMap mBaiduMap;
        private UiSettings mUiSettings;
        private RadioGroup radioGroup;
        private CheckBox   trafficMap;
        private boolean firstLocation;
        private LocationClient locationClient;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            SDKInitializer.initialize(getApplicationContext());
            setContentView(R.layout.activity_uisetting);
            mMapView = (MapView) findViewById(R.id.MyMpView);
            radioGroup =(RadioGroup)findViewById(R.id.radioButtonGroup);
            trafficMap =(CheckBox)findViewById(R.id.mapTraffic);
            mBaiduMap = mMapView.getMap();
            mUiSettings = mBaiduMap.getUiSettings();
            //overlook 设置地图俯仰角
            MapStatus ms = new MapStatus.Builder().overlook(-30).build();
            MapStatusUpdate u = MapStatusUpdateFactory.newMapStatus(ms);
            mBaiduMap.animateMapStatus(u, 1000);
    
            radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    switch (checkedId){
                        case R.id.mapNormal:
                            //普通地图
                            mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
                            break;
                        case R.id.mapSate:
                            //卫星地图
                            mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
                            break;
                    }
                }
            });
            locationSet();
        }
    
        /**
         * 是否启用缩放手势
         * 
         * @param v
         */
        public void setZoomEnable(View v) {
            mUiSettings.setZoomGesturesEnabled(((CheckBox) v).isChecked());
        }
    
        /**
         * 是否启用平移手势
         * 
         * @param v
         */
        public void setScrollEnable(View v) {
            mUiSettings.setScrollGesturesEnabled(((CheckBox) v).isChecked());
        }
    
        /**
         * 是否启用旋转手势
         * 
         * @param v
         */
        public void setRotateEnable(View v) {
            mUiSettings.setRotateGesturesEnabled(((CheckBox) v).isChecked());
        }
    
        /**
         * 是否启用俯视手势
         * 
         * @param v
         */
        public void setOverlookEnable(View v) {
            mUiSettings.setOverlookingGesturesEnabled(((CheckBox) v).isChecked());
        }
        /**
         * 交通地图模式
         *
         * @param v
         */
        public void setTrafficMap(View v){
            if (trafficMap.isChecked())
            {
                mBaiduMap.setTrafficEnabled(true);
            } else
            {
                mBaiduMap.setTrafficEnabled(false);
            }
        }
        /**
         * 是否启用指南针图层
         * 
         * @param v
         */
        public void setCompassEnable(View v) {
            mUiSettings.setCompassEnabled(((CheckBox) v).isChecked());
        }
    
        public void locationSet(){
            mBaiduMap = mMapView.getMap();
            MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15f);
            mBaiduMap.setMapStatus(msu);
            // 定位初始化
            locationClient = new LocationClient(this);
            firstLocation =true;
            // 设置定位的相关配置
            LocationClientOption option = new LocationClientOption();
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
            option.setOpenGps(true);
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setScanSpan(1000);
            locationClient.setLocOption(option);
    
            // 设置自定义图标
            BitmapDescriptor myMarker = BitmapDescriptorFactory
                    .fromResource(R.drawable.navi_map);
            MyLocationConfigeration config = new MyLocationConfigeration(
                    MyLocationConfigeration.LocationMode.FOLLOWING, true, myMarker);
            locationClient.registerLocationListener(new BDLocationListener() {
                @Override
                public void onReceiveLocation(BDLocation location) {
                    // map view 销毁后不在处理新接收的位置
                    if (location == null || mMapView == null)
                        return;
                    // 构造定位数据
                    MyLocationData locData = new MyLocationData.Builder()
                            .accuracy(location.getRadius())
                                    // 此处设置开发者获取到的方向信息,顺时针0-360
                            .direction(100).latitude(location.getLatitude())
                            .longitude(location.getLongitude()).build();
                    // 设置定位数据
                    mBaiduMap.setMyLocationData(locData);
    
                    // 第一次定位时,将地图位置移动到当前位置
                    if (firstLocation)
                    {
                        firstLocation = false;
                        LatLng xy = new LatLng(location.getLatitude(),
                                location.getLongitude());
                        MapStatusUpdate status = MapStatusUpdateFactory.newLatLng(xy);
                        mBaiduMap.animateMapStatus(status);
                    }
                }
            });
        }
        @Override
        protected void onStart()
        {
            // 如果要显示位置图标,必须先开启图层定位
            mBaiduMap.setMyLocationEnabled(true);
            if (!locationClient.isStarted())
            {
                locationClient.start();
            }
            super.onStart();
        }
    
        @Override
        protected void onStop()
        {
            // 关闭图层定位
            mBaiduMap.setMyLocationEnabled(false);
            locationClient.stop();
            super.onStop();
        }
    
        @Override
        protected void onPause() {
            // MapView的生命周期与Activity同步,
            // 当activity挂起时需调用MapView.onPause()
            mMapView.onPause();
            super.onPause();
        }
    
        @Override
        protected void onResume() {
            // MapView的生命周期与Activity同步,
            // 当activity恢复时需调用MapView.onResume()
            mMapView.onResume();
            super.onResume();
        }
    
        @Override
        protected void onDestroy() {
            // MapView的生命周期与Activity同步,
            // 当activity销毁时需调用MapView.destroy()
            mMapView.onDestroy();
            super.onDestroy();
        }
    
    }
    作者:杰瑞教育
    出处:http://www.cnblogs.com/jerehedu/ 
    版权声明:本文版权归杰瑞教育技有限公司和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    技术咨询:JRedu技术交流
     
  • 相关阅读:
    发现了一个前端导航网站
    git 设置区分大小写
    分享一个 thinkphp 分页的24款样式
    thinkphp5结合layui表单和图片上传
    tp5分页+循环子字段
    tp5 + layui 分页
    composer的安装
    thinkphp 管道写法及volist标签属性
    把常见的分隔符按照自定义的格式分割
    spring mvc 框架下的maven打包发布方法
  • 原文地址:https://www.cnblogs.com/jerehedu/p/4916408.html
Copyright © 2011-2022 走看看