百度地图定位

权限 

<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" />

 

<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"></service>
<meta-data 
        android:name="com.baidu.lbsapi.API_KEY" 
        android:value="zehbNukknGVFc0PchtdEmzKxYRMnZ260" /> 

 

布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="
http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >
<LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/action_normal"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="普通地图" />

        <Button
            android:id="@+id/action_site"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="卫星地图" />

        <Button
            android:id="@+id/action_traffic"
           android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="实时交通图" />

        <Button
            android:id="@+id/action_mylocation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="我的位置" />

        <Button
            android:id="@+id/action_overlay"
           android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="添加覆盖物" />
   

    </LinearLayout>
    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/linearLayout1"
        android:clickable="true" />

   

</LinearLayout>

 

 

 

 

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.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

 private MapView mMapView;
 private BaiduMap mMap;
 private LocationClient mLocationClient;
 private MyBDLocationListener mBDLocationListener;
 private double mLat;
 private double mLong;
 private Button action_normal;
 private Button action_site;
 private Button action_traffic;
 private Button action_mylocation;
 private Button action_overlay;
 private boolean isEnable;
 private boolean isFirst=true;
 private double Latitude;
 private double Longitude;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  //在使用SDK各组件之前初始化context信息,传入ApplicationContext 
        //注意该方法要再setContentView方法之前实现 
        SDKInitializer.initialize(getApplicationContext()); 
  setContentView(R.layout.activity_main);
  
        init();
        // 初始化地图
      initMapView();
      // 定位
      initLocation();


 }
 public void init(){
  //获取地图控件引用 
        mMapView = (MapView) findViewById(R.id.bmapView);
        action_normal=(Button)findViewById(R.id.action_normal);
        action_normal.setOnClickListener(this);
        action_site=(Button)findViewById(R.id.action_site);
        action_site.setOnClickListener(this);
        action_traffic=(Button)findViewById(R.id.action_traffic);
        action_traffic.setOnClickListener(this);
        action_mylocation=(Button)findViewById(R.id.action_mylocation);
        action_mylocation.setOnClickListener(this);
        action_overlay=(Button)findViewById(R.id.action_overlay);
        action_overlay.setOnClickListener(this);
 }
 private void initLocation() {
  mLocationClient = new LocationClient(this);
  mBDLocationListener = new MyBDLocationListener();
  mLocationClient.registerLocationListener(mBDLocationListener);
  // 设置定位的一些参数
  LocationClientOption option = new LocationClientOption();
  option.setCoorType("bd09ll");
  option.setIsNeedAddress(true);
  option.setOpenGps(true);
  option.setScanSpan(1000);
  mLocationClient.setLocOption(option);
  mLocationClient.registerLocationListener(new BDLocationListener() {
   @Override
   public void onReceiveLocation(BDLocation location) {
    // TODO Auto-generated method stub
    if(location==null){
     return;
    }
    Latitude=location.getLatitude();
    Longitude=location.getLongitude();
   }
  });
 }

 private void initMapView() {
  // 获取地图控件引用
  mMap = mMapView.getMap();
  mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
  // 设置初始距离是500米
  MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f);
  mMap.setMapStatus(msu);
 }


 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
 @Override 
    protected void onDestroy() { 
        super.onDestroy(); 
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 
        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(); 
        } 
  
   
    private void ToMyLoaction() {
  //定位经纬度
  LatLng lat = new LatLng(mLat,mLong);
  MapStatusUpdate  msu =MapStatusUpdateFactory.newLatLng(lat );
  //设置给地图
  mMap.setMapStatus(msu);
 }
   
 @Override
 public void onClick(View arg0) {
  // TODO Auto-generated method stub
  switch (arg0.getId()) {
  case R.id.action_normal: // 普通地图
   mMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
   break;
  case R.id.action_site: // 卫星图
   mMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
   break;
  case R.id.action_traffic: // 实施交通图

   if (isEnable) {
    mMap.setTrafficEnabled(false);
    isEnable = false;
   } else {
    mMap.setTrafficEnabled(true);
    isEnable = true;
   }
   break;
  case R.id.action_mylocation:
   ToMyLoaction();
   break;
  case R.id.action_overlay:
   OverLay();
   break;

  default:
   break;
  }

 }
 private void OverLay() {
  mMap.clear();
               //需要覆盖物的Maker  OverLay
  BitmapDescriptor  bit = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher);
                LatLng lat =new LatLng(Latitude, Longitude); //给一个添加覆盖物的坐标
               //覆盖物设置
                 OverlayOptions option = new MarkerOptions().position(lat).icon(bit).zIndex(5);

                 MapStatusUpdate  msu =MapStatusUpdateFactory.newLatLng(lat);
                    //设置给地图
                  mMap.setMapStatus(msu);
                   //构建文字Option对象,用于在地图上添加文字 
                         /*option = new TextOptions() 
                         .bgColor(0xAAFFFF00) 
                         .fontSize(24) 
                         .fontColor(0xFFFF00FF) 
                         .text("我我") 
                         .rotate(-30) 
                         .position(lat);*/ 
               //在地图上添加该文字对象并显示 
                mMap.addOverlay(option); ///添加图层
 }

 public class MyBDLocationListener implements BDLocationListener {

  

  @Override
  public void onReceiveLocation(BDLocation location) {
   MyLocationData mLocationData = new MyLocationData.Builder()//
     .accuracy(location.getRadius())//
     .latitude(location.getLatitude())//
     .longitude(location.getLongitude())//
     .build();
   mMap.setMyLocationData(mLocationData); //把定位的一些数据设置给地图

   // 设置定位图标
//   MyLocationConfiguration config = new MyLocationConfiguration(
//     com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.NORMAL,
//     true, null);
   mLat = location.getLatitude();
   mLong = location.getLongitude();
   
   //判断是否第一次定位
   if (isFirst) {
    ToMyLoaction();
    isFirst =false;
    Toast.makeText(getApplicationContext(), location.getAddrStr(), Toast.LENGTH_SHORT).show();
   }

  }
 }
 @Override
 protected void onStart() {
  super.onStart();
  mMap.setMyLocationEnabled(true);
  if (!mLocationClient.isStarted())
  mLocationClient.start();
 }
 @Override
 protected void onStop() {
  super.onStop();
  mMap.setMyLocationEnabled(false);
  if(mLocationClient.isStarted())
  mLocationClient.stop();
 }

 

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值