您的位置:首页 > 其它

百度地图基本地图和定位

2016-06-27 08:28 260 查看
com.demo.map

先根据百度地图开发平台配置环境和权限,

自己申请秘钥

xml文件

    <com.baidu.mapapi.map.MapView

        android:id="@+id/bmapView"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        android:clickable="true"

         />

    

    <TextView

        android:id="@+id/address"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text=""

        android:textSize="20sp"

        />

Activity类

package com.demo.map;

 

import java.util.List;

 

import android.app.Activity;

import android.os.Bundle;

import android.util.Log;

import android.widget.TextView;

 

import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

importcom.baidu.location.LocationClientOption.LocationMode;

import com.baidu.location.Poi;

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.MapStatusUpdate;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.MarkerOptions;

import com.baidu.mapapi.map.MyLocationConfiguration;

import com.baidu.mapapi.map.MyLocationData;

import com.baidu.mapapi.map.OverlayOptions;

import com.baidu.mapapi.model.LatLng;

 

public class MainActivity extends Activity {

 

    privateMapView mMapView;

     boolean isFirstLoc = true;// 是否首次定位

    privateBaiduMap mBaiduMap;

    publicLocationClient mLocationClient = null;

    publicBDLocationListener myListener = new MyLocationListener();

   

    privateTextView text;

    @Override

    protectedvoid 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(); 

         

       

 

            //开启定位图层

            mBaiduMap.setMyLocationEnabled(true);

            // 设置定位模式,定位图片

            mBaiduMap

                    .setMyLocationConfigeration(newMyLocationConfiguration(

                           com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL,

                            true, null));

            // 定位初始化

            mLocationClient = newLocationClient(getApplicationContext());

           mLocationClient.registerLocationListener(myListener);

            initLocation();

        //定义Maker坐标点 

          LatLng point = new LatLng(39.963175,116.400244); 

          //构建Marker图标 

          BitmapDescriptor bitmap =BitmapDescriptorFactory 

             .fromResource(R.drawable.icon_marka); 

          //构建MarkerOption,用于在地图上添加Marker 

          OverlayOptions option = newMarkerOptions() 

              .position(point) 

              .icon(bitmap); 

          //在地图上添加Marker,并显示 

          mBaiduMap.addOverlay(option);

         

            

     

       

           

    }

 

    private voidinitLocation(){

       LocationClientOption option = new LocationClientOption();

       option.setLocationMode(LocationMode.Hight_Accuracy

);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备

       option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系

        intspan=1000;

       option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的

       option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要

        option.setOpenGps(true);//可选,默认false,设置是否使用gps

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

       option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”

       option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到

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

       option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集

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

       mLocationClient.setLocOption(option);

       mLocationClient.start();

    }

   

   

   

    public classMyLocationListener implements BDLocationListener {

         

       @Override

        publicvoid onReceiveLocation(BDLocation location) {

           

             

              MyLocationData locData = newMyLocationData.Builder()

             .accuracy(location.getRadius())

                     // 此处设置开发者获取到的方向信息,顺时针0-360

             .direction(100).latitude(location.getLatitude())

             .longitude(location.getLongitude()).build();

 

              mBaiduMap.setMyLocationData(locData);

              

              if(isFirstLoc) {

                  isFirstLoc = false;

                 LatLng ll = new LatLng(location.getLatitude(),

                         location.getLongitude());

                 MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);

 

                 mBaiduMap.animateMapStatus(u);

              }

              getLocationInfo(location);

        }

    }

   

   

   

   

   

   

   

    private voidgetLocationInfo(BDLocation location) {
       StringBuffer sb = new StringBuffer(256);

       sb.append("time : ");

        sb.append(location.getTime());

       sb.append("\nerror code : ");

       sb.append(location.getLocType());

       sb.append("\nlatitude : ");

       sb.append(location.getLatitude());

       sb.append("\nlontitude : ");

       sb.append(location.getLongitude());

       sb.append("\nradius : ");

       sb.append(location.getRadius());

        if(location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果

           sb.append("\nspeed : ");

           sb.append(location.getSpeed());// 单位:公里每小时

           sb.append("\nsatellite : ");

           sb.append(location.getSatelliteNumber());

           sb.append("\nheight : ");

           sb.append(location.getAltitude());// 单位:米

           sb.append("\ndirection : ");

            sb.append(location.getDirection());// 单位度

           sb.append("\naddr : ");

           sb.append(location.getAddrStr());

           sb.append("\ndescribe : ");

           sb.append("gps定位成功");

 

        } elseif (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果

           sb.append("\naddr : ");

           sb.append(location.getAddrStr());

            // 运营商信息

           sb.append("\noperationers : ");

           sb.append(location.getOperators());

           sb.append("\ndescribe : ");

           sb.append("网络定位成功");

        } elseif (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果

           sb.append("\ndescribe : ");

           sb.append("离线定位成功,离线定位结果也是有效的");

        } elseif (location.getLocType() == BDLocation.TypeServerError) {

           sb.append("\ndescribe : ");

           sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");

        } elseif (location.getLocType() == BDLocation.TypeNetWorkException) {

            sb.append("\ndescribe : ");

           sb.append("网络不同导致定位失败,请检查网络是否通畅");

        } elseif (location.getLocType() == BDLocation.TypeCriteriaException) {

           sb.append("\ndescribe : ");

           sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");

        }

       sb.append("\nlocationdescribe : ");

       sb.append(location.getLocationDescribe());// 位置语义化信息

       List<Poi> list = location.getPoiList();// POI数据

        if (list!= null) {

           sb.append("\npoilist size = : ");

           sb.append(list.size());

            for(Poi p : list) {

               sb.append("\npoi= : ");

               sb.append(p.getId() + " " + p.getName() + " " +p.getRank());

            }

        }

        Log.i("BaiduLocationApiDem",sb.toString());

    }

   

   

   

   

   

   

   

   @Override 

    protectedvoid onDestroy() { 

       super.onDestroy(); 

        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 

       mMapView.onDestroy(); 

    } 

   @Override 

    protectedvoid onResume() { 

       super.onResume(); 

        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 

       mMapView.onResume(); 

        } 

   @Override 

    protectedvoid onPause() { 

        super.onPause(); 

        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 

       mMapView.onPause(); 

        } 

   

   

   

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: