百度地图marker

配置环境

1.获取AppKey

1.创建应用地址:http://lbsyun.baidu.com/apiconsole/key


2.创建应用:


3.获取SHA1值,首先cmd打开dos窗口



4.cd .android 切换到 .android目录

 

5.使用keytool -list -v -keystore debug.keystore获取指纹整数中的SHA1值,输入口令直接回车或者输入android即可:



6.得到的指纹整数SHA1值



7.获取应用的包名(PackageName):

这个是包名 PackageName

8.把SHA1和PackageName放到对应的位置点击确定,得到APPKEY


2.配置AndroidManifest.xml文件

1.设置你的APPKEY

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <meta-data  
  2.             android:name="com.baidu.lbsapi.API_KEY"  
  3.             android:value="你的 AppKey" />  


2.添加用户权限

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 百度地图需要的权限 -->  
  2.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  3.     <uses-permission android:name="android.permission.INTERNET" />  
  4.     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />  
  5.     <uses-permission android:name="android.permission.WAKE_LOCK" />  
  6.     <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />  
  7.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
  8.     <uses-permission android:name="android.permission.GET_TASKS" />  
  9.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
  10.     <uses-permission android:name="android.permission.WRITE_SETTINGS" />  

3.基础地图实现

效果图

1.在布局文件添加地图控件

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="match_parent"  
  6.     tools:context="com.demo.baidumapblog.ShowMapActivity">  
  7.   
  8.     <com.baidu.mapapi.map.MapView  
  9.         android:id="@+id/bmapView"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="fill_parent"  
  12.         android:clickable="true" />  
  13.   
  14. </RelativeLayout>  

2.初始化地图控件并管理控件的生命周期

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.demo.baidumapblog;  
  2.   
  3. import android.support.v7.app.AppCompatActivity;  
  4. import android.os.Bundle;  
  5.   
  6. import com.baidu.mapapi.SDKInitializer;  
  7. import com.baidu.mapapi.map.MapView;  
  8.   
  9. public class ShowMapActivity extends AppCompatActivity {  
  10.   
  11.     private MapView mMapView;  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  17.         //注意该方法要再setContentView方法之前实现  
  18.         //使用百度地图的任何功能都需要先初始化这段代码  最好放在全局中进行初始化  
  19.         //百度地图+定位+marker比较简单 我就不放到全局去了  
  20.         SDKInitializer.initialize(getApplicationContext());  
  21.         setContentView(R.layout.activity_show_map);  
  22.         //获取地图控件引用  
  23.         mMapView = (MapView) findViewById(R.id.bmapView);  
  24.     }  
  25.   
  26.     /** 
  27.      * 必须要实现 
  28.      */  
  29.     @Override  
  30.     protected void onDestroy() {  
  31.         super.onDestroy();  
  32.         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
  33.         mMapView.onDestroy();  
  34.     }  
  35.   
  36.     /** 
  37.      * 必须要实现 
  38.      */  
  39.     @Override  
  40.     protected void onResume() {  
  41.         super.onResume();  
  42.         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
  43.         mMapView.onResume();  
  44.     }  
  45.   
  46.     /** 
  47.      * 必须要实现 
  48.      */  
  49.     @Override  
  50.     protected void onPause() {  
  51.         super.onPause();  
  52.         //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
  53.         mMapView.onPause();  
  54.     }  
  55. }  


4.实现定位功能

效果图  和基础地图没有什么区别 因为没有加中心点以及marker 但是已经获取到了经纬度坐标


1.在AndroidManifest.xml中注册广播  注意这个广播一定要注册 否则定位会失败

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>  

2.添加定位需要的权限 去重之后的:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 这个权限用于进行网络定位-->  
  2.     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>  
  3.     <!-- 这个权限用于访问GPS定位-->  
  4.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>  
  5.     <!-- 用于读取手机当前的状态-->  
  6.     <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>  
  7.     <!-- SD卡读取权限,用户写入离线定位数据-->  
  8.     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>  

3.正式写代码 定位功能的全部代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.demo.baidumapblog;  
  2.   
  3. import android.support.v7.app.AppCompatActivity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6.   
  7. import com.baidu.location.BDLocation;  
  8. import com.baidu.location.BDLocationListener;  
  9. import com.baidu.location.LocationClient;  
  10. import com.baidu.location.LocationClientOption;  
  11. import com.baidu.location.Poi;  
  12. import com.baidu.mapapi.SDKInitializer;  
  13. import com.baidu.mapapi.map.MapView;  
  14.   
  15. import java.util.List;  
  16.   
  17. public class ShowMapActivity extends AppCompatActivity {  
  18.   
  19.     private MapView mMapView;  
  20.     public LocationClient mLocationClient = null;  
  21.     public BDLocationListener myListener = new MyLocationListener();  
  22.   
  23.     @Override  
  24.     protected void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  27.         //注意该方法要再setContentView方法之前实现  
  28.         //使用百度地图的任何功能都需要先初始化这段代码  最好放在全局中进行初始化  
  29.         //百度地图+定位+marker比较简单 我就不放到全局去了  
  30.         SDKInitializer.initialize(getApplicationContext());  
  31.         setContentView(R.layout.activity_show_map);  
  32.         //获取地图控件引用  
  33.         mMapView = (MapView) findViewById(R.id.bmapView);  
  34.   
  35.         //声明LocationClient类  
  36.         mLocationClient = new LocationClient(getApplicationContext());  
  37.         //注册监听函数  
  38.         mLocationClient.registerLocationListener( myListener );  
  39.   
  40.         //配置定位参数  
  41.         initLocation();  
  42.         //开始定位  
  43.         mLocationClient.start();  
  44.     }  
  45.   
  46.     /** 
  47.      * 配置定位参数 
  48.      */  
  49.     private void initLocation(){  
  50.         LocationClientOption option = new LocationClientOption();  
  51.         option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy  
  52.         );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备  
  53.         option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系  
  54.         int span=1000;  
  55.         option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的  
  56.         option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要  
  57.         option.setOpenGps(true);//可选,默认false,设置是否使用gps  
  58.         option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果  
  59.         option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”  
  60.         option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到  
  61.         option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死  
  62.         option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集  
  63.         option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要  
  64.         mLocationClient.setLocOption(option);  
  65.     }  
  66.   
  67.     /** 
  68.      * 实现定位监听 位置一旦有所改变就会调用这个方法 
  69.      * 可以在这个方法里面获取到定位之后获取到的一系列数据 
  70.      */  
  71.     public class MyLocationListener implements BDLocationListener {  
  72.   
  73.         private double lat;  
  74.         private double lon;  
  75.   
  76.         @Override  
  77.         public void onReceiveLocation(BDLocation location) {  
  78.             //Receive Location  
  79.             StringBuffer sb = new StringBuffer(256);  
  80.             sb.append("time : ");  
  81.             sb.append(location.getTime());  
  82.             sb.append("\nerror code : ");  
  83.             sb.append(location.getLocType());  
  84.             sb.append("\nlatitude : ");  
  85.             sb.append(location.getLatitude());  
  86.             sb.append("\nlontitude : ");  
  87.             sb.append(location.getLongitude());  
  88.             sb.append("\nradius : ");  
  89.             sb.append(location.getRadius());  
  90.             lat = location.getLatitude();  
  91.             lon = location.getLongitude();  
  92.             if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果  
  93.                 sb.append("\nspeed : ");  
  94.                 sb.append(location.getSpeed());// 单位:公里每小时  
  95.                 sb.append("\nsatellite : ");  
  96.                 sb.append(location.getSatelliteNumber());  
  97.                 sb.append("\nheight : ");  
  98.                 sb.append(location.getAltitude());// 单位:米  
  99.                 sb.append("\ndirection : ");  
  100.                 sb.append(location.getDirection());// 单位度  
  101.                 sb.append("\naddr : ");  
  102.                 sb.append(location.getAddrStr());  
  103.                 sb.append("\ndescribe : ");  
  104.                 sb.append("gps定位成功");  
  105.   
  106.             } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果  
  107.                 sb.append("\naddr : ");  
  108.                 sb.append(location.getAddrStr());  
  109.                 //运营商信息  
  110.                 sb.append("\noperationers : ");  
  111.                 sb.append(location.getOperators());  
  112.                 sb.append("\ndescribe : ");  
  113.                 sb.append("网络定位成功");  
  114.             } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果  
  115.                 sb.append("\ndescribe : ");  
  116.                 sb.append("离线定位成功,离线定位结果也是有效的");  
  117.             } else if (location.getLocType() == BDLocation.TypeServerError) {  
  118.                 sb.append("\ndescribe : ");  
  119.                 sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");  
  120.             } else if (location.getLocType() == BDLocation.TypeNetWorkException) {  
  121.                 sb.append("\ndescribe : ");  
  122.                 sb.append("网络不同导致定位失败,请检查网络是否通畅");  
  123.             } else if (location.getLocType() == BDLocation.TypeCriteriaException) {  
  124.                 sb.append("\ndescribe : ");  
  125.                 sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");  
  126.             }  
  127.             sb.append("\nlocationdescribe : ");  
  128.             sb.append(location.getLocationDescribe());// 位置语义化信息  
  129.             List<Poi> list = location.getPoiList();// POI数据  
  130.             if (list != null) {  
  131.                 sb.append("\npoilist size = : ");  
  132.                 sb.append(list.size());  
  133.                 for (Poi p : list) {  
  134.                     sb.append("\npoi= : ");  
  135.                     sb.append(p.getId() + " " + p.getName() + " " + p.getRank());  
  136.                 }  
  137.             }  
  138.             Log.v("pcw","lat : " + lat+" lon : " + lon);  
  139.             Log.i("BaiduLocationApiDem", sb.toString());  
  140.         }  
  141.     }  
  142.   
  143.     /** 
  144.      * 必须要实现 
  145.      */  
  146.     @Override  
  147.     protected void onDestroy() {  
  148.         super.onDestroy();  
  149.         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
  150.         mMapView.onDestroy();  
  151.     }  
  152.   
  153.     /** 
  154.      * 必须要实现 
  155.      */  
  156.     @Override  
  157.     protected void onResume() {  
  158.         super.onResume();  
  159.         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
  160.         mMapView.onResume();  
  161.     }  
  162.   
  163.     /** 
  164.      * 必须要实现 
  165.      */  
  166.     @Override  
  167.     protected void onPause() {  
  168.         super.onPause();  
  169.         //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
  170.         mMapView.onPause();  
  171.     }  
  172. }  

4.声明LocationClient类 并注册监听函数

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //声明LocationClient类  
  2.         mLocationClient = new LocationClient(getApplicationContext());  
  3.         //注册监听函数  
  4.         mLocationClient.registerLocationListener( myListener );  

5.配置定位参数

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 配置定位参数 
  3.      */  
  4.     private void initLocation(){  
  5.         LocationClientOption option = new LocationClientOption();  
  6.         option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy  
  7.         );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备  
  8.         option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系  
  9.         int span=1000;  
  10.         option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的  
  11.         option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要  
  12.         option.setOpenGps(true);//可选,默认false,设置是否使用gps  
  13.         option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果  
  14.         option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”  
  15.         option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到  
  16.         option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死  
  17.         option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集  
  18.         option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要  
  19.         mLocationClient.setLocOption(option);  
  20.     }  


6.实现定位监听

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /**  
  2.     * 实现定位监听 位置一旦有所改变就会调用这个方法  
  3.     * 可以在这个方法里面获取到定位之后获取到的一系列数据  
  4.     */  
  5.    public class MyLocationListener implements BDLocationListener {  
  6.   
  7.        private double lat;  
  8.        private double lon;  
  9.   
  10.        @Override  
  11.        public void onReceiveLocation(BDLocation location) {  
  12.            //Receive Location  
  13.            StringBuffer sb = new StringBuffer(256);  
  14.            sb.append("time : ");  
  15.            sb.append(location.getTime());  
  16.            sb.append("\nerror code : ");  
  17.            sb.append(location.getLocType());  
  18.            sb.append("\nlatitude : ");  
  19.            sb.append(location.getLatitude());  
  20.            sb.append("\nlontitude : ");  
  21.            sb.append(location.getLongitude());  
  22.            sb.append("\nradius : ");  
  23.            sb.append(location.getRadius());  
  24.            lat = location.getLatitude();  
  25.            lon = location.getLongitude();  
  26.            if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果  
  27.                sb.append("\nspeed : ");  
  28.                sb.append(location.getSpeed());// 单位:公里每小时  
  29.                sb.append("\nsatellite : ");  
  30.                sb.append(location.getSatelliteNumber());  
  31.                sb.append("\nheight : ");  
  32.                sb.append(location.getAltitude());// 单位:米  
  33.                sb.append("\ndirection : ");  
  34.                sb.append(location.getDirection());// 单位度  
  35.                sb.append("\naddr : ");  
  36.                sb.append(location.getAddrStr());  
  37.                sb.append("\ndescribe : ");  
  38.                sb.append("gps定位成功");  
  39.   
  40.            } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果  
  41.                sb.append("\naddr : ");  
  42.                sb.append(location.getAddrStr());  
  43.                //运营商信息  
  44.                sb.append("\noperationers : ");  
  45.                sb.append(location.getOperators());  
  46.                sb.append("\ndescribe : ");  
  47.                sb.append("网络定位成功");  
  48.            } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果  
  49.                sb.append("\ndescribe : ");  
  50.                sb.append("离线定位成功,离线定位结果也是有效的");  
  51.            } else if (location.getLocType() == BDLocation.TypeServerError) {  
  52.                sb.append("\ndescribe : ");  
  53.                sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");  
  54.            } else if (location.getLocType() == BDLocation.TypeNetWorkException) {  
  55.                sb.append("\ndescribe : ");  
  56.                sb.append("网络不同导致定位失败,请检查网络是否通畅");  
  57.            } else if (location.getLocType() == BDLocation.TypeCriteriaException) {  
  58.                sb.append("\ndescribe : ");  
  59.                sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");  
  60.            }  
  61.            sb.append("\nlocationdescribe : ");  
  62.            sb.append(location.getLocationDescribe());// 位置语义化信息  
  63.            List<Poi> list = location.getPoiList();// POI数据  
  64.            if (list != null) {  
  65.                sb.append("\npoilist size = : ");  
  66.                sb.append(list.size());  
  67.                for (Poi p : list) {  
  68.                    sb.append("\npoi= : ");  
  69.                    sb.append(p.getId() + " " + p.getName() + " " + p.getRank());  
  70.                }  
  71.            }  
  72.            Log.v("pcw","lat : " + lat+" lon : " + lon);  
  73.            Log.i("BaiduLocationApiDem", sb.toString());  
  74.        }  
  75.    }  

5.设置中心点和marker

效果图


1.基础地图+定位+设置中心点+marker 所有代码


[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.demo.baidumapblog;  
  2.   
  3. import android.os.Handler;  
  4. import android.os.Message;  
  5. import android.support.v7.app.AppCompatActivity;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8.   
  9. import com.baidu.location.BDLocation;  
  10. import com.baidu.location.BDLocationListener;  
  11. import com.baidu.location.LocationClient;  
  12. import com.baidu.location.LocationClientOption;  
  13. import com.baidu.location.Poi;  
  14. import com.baidu.mapapi.SDKInitializer;  
  15. import com.baidu.mapapi.map.BaiduMap;  
  16. import com.baidu.mapapi.map.BitmapDescriptor;  
  17. import com.baidu.mapapi.map.BitmapDescriptorFactory;  
  18. import com.baidu.mapapi.map.MapStatus;  
  19. import com.baidu.mapapi.map.MapStatusUpdate;  
  20. import com.baidu.mapapi.map.MapStatusUpdateFactory;  
  21. import com.baidu.mapapi.map.MapView;  
  22. import com.baidu.mapapi.map.MarkerOptions;  
  23. import com.baidu.mapapi.map.OverlayOptions;  
  24. import com.baidu.mapapi.model.LatLng;  
  25.   
  26. import java.util.List;  
  27.   
  28. public class ShowMapActivity extends AppCompatActivity {  
  29.   
  30.     private MapView mMapView;  
  31.   
  32.     private boolean isFirstLocation = true;  
  33.   
  34.     public LocationClient mLocationClient = null;  
  35.     public BDLocationListener myListener = new MyLocationListener();  
  36.     private BaiduMap mBaiduMap;  
  37.   
  38.     private double lat;  
  39.     private double lon;  
  40.   
  41.   
  42.     @Override  
  43.     protected void onCreate(Bundle savedInstanceState) {  
  44.         super.onCreate(savedInstanceState);  
  45.         //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
  46.         //注意该方法要再setContentView方法之前实现  
  47.         //使用百度地图的任何功能都需要先初始化这段代码  最好放在全局中进行初始化  
  48.         //百度地图+定位+marker比较简单 我就不放到全局去了  
  49.         SDKInitializer.initialize(getApplicationContext());  
  50.         setContentView(R.layout.activity_show_map);  
  51.         //获取地图控件引用  
  52.         mMapView = (MapView) findViewById(R.id.bmapView);  
  53.         //获取BaiduMap对象  
  54.         mBaiduMap = mMapView.getMap();  
  55.         //声明LocationClient类  
  56.         mLocationClient = new LocationClient(getApplicationContext());  
  57.         //注册监听函数  
  58.         mLocationClient.registerLocationListener(myListener);  
  59.   
  60.         //配置定位参数  
  61.         initLocation();  
  62.         //开始定位  
  63.         mLocationClient.start();  
  64.   
  65.     }  
  66.   
  67.   
  68.     /** 
  69.      * 添加marker 
  70.      */  
  71.     private void setMarker() {  
  72.         Log.v("pcw","setMarker : lat : "+ lat+" lon : " + lon);  
  73.         //定义Maker坐标点  
  74.         LatLng point = new LatLng(lat, lon);  
  75.         //构建Marker图标  
  76.         BitmapDescriptor bitmap = BitmapDescriptorFactory  
  77.                 .fromResource(R.drawable.location_marker);  
  78.         //构建MarkerOption,用于在地图上添加Marker  
  79.         OverlayOptions option = new MarkerOptions()  
  80.                 .position(point)  
  81.                 .icon(bitmap);  
  82.         //在地图上添加Marker,并显示  
  83.         mBaiduMap.addOverlay(option);  
  84.     }  
  85.   
  86.     /** 
  87.      * 设置中心点 
  88.      */  
  89.     private void setUserMapCenter() {  
  90.         Log.v("pcw","setUserMapCenter : lat : "+ lat+" lon : " + lon);  
  91.         LatLng cenpt = new LatLng(lat,lon);  
  92.         //定义地图状态  
  93.         MapStatus mMapStatus = new MapStatus.Builder()  
  94.                 .target(cenpt)  
  95.                 .zoom(18)  
  96.                 .build();  
  97.         //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化  
  98.         MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);  
  99.         //改变地图状态  
  100.         mBaiduMap.setMapStatus(mMapStatusUpdate);  
  101.   
  102.     }  
  103.   
  104.     /** 
  105.      * 配置定位参数 
  106.      */  
  107.     private void initLocation(){  
  108.         LocationClientOption option = new LocationClientOption();  
  109.         option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy  
  110.         );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备  
  111.         option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系  
  112.         int span=1000;  
  113.         option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的  
  114.         option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要  
  115.         option.setOpenGps(true);//可选,默认false,设置是否使用gps  
  116.         option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果  
  117.         option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”  
  118.         option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到  
  119.         option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死  
  120.         option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集  
  121.         option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要  
  122.         mLocationClient.setLocOption(option);  
  123.     }  
  124.   
  125.     /** 
  126.      * 实现定位监听 位置一旦有所改变就会调用这个方法 
  127.      * 可以在这个方法里面获取到定位之后获取到的一系列数据 
  128.      */  
  129.     public class MyLocationListener implements BDLocationListener {  
  130.   
  131.         @Override  
  132.         public void onReceiveLocation(BDLocation location) {  
  133.             //Receive Location  
  134.             StringBuffer sb = new StringBuffer(256);  
  135.             sb.append("time : ");  
  136.             sb.append(location.getTime());  
  137.             sb.append("\nerror code : ");  
  138.             sb.append(location.getLocType());  
  139.             sb.append("\nlatitude : ");  
  140.             sb.append(location.getLatitude());  
  141.             sb.append("\nlontitude : ");  
  142.             sb.append(location.getLongitude());  
  143.             sb.append("\nradius : ");  
  144.             sb.append(location.getRadius());  
  145.   
  146.             if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果  
  147.                 sb.append("\nspeed : ");  
  148.                 sb.append(location.getSpeed());// 单位:公里每小时  
  149.                 sb.append("\nsatellite : ");  
  150.                 sb.append(location.getSatelliteNumber());  
  151.                 sb.append("\nheight : ");  
  152.                 sb.append(location.getAltitude());// 单位:米  
  153.                 sb.append("\ndirection : ");  
  154.                 sb.append(location.getDirection());// 单位度  
  155.                 sb.append("\naddr : ");  
  156.                 sb.append(location.getAddrStr());  
  157.                 sb.append("\ndescribe : ");  
  158.                 sb.append("gps定位成功");  
  159.   
  160.             } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果  
  161.                 sb.append("\naddr : ");  
  162.                 sb.append(location.getAddrStr());  
  163.                 //运营商信息  
  164.                 sb.append("\noperationers : ");  
  165.                 sb.append(location.getOperators());  
  166.                 sb.append("\ndescribe : ");  
  167.                 sb.append("网络定位成功");  
  168.             } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果  
  169.                 sb.append("\ndescribe : ");  
  170.                 sb.append("离线定位成功,离线定位结果也是有效的");  
  171.             } else if (location.getLocType() == BDLocation.TypeServerError) {  
  172.                 sb.append("\ndescribe : ");  
  173.                 sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因");  
  174.             } else if (location.getLocType() == BDLocation.TypeNetWorkException) {  
  175.                 sb.append("\ndescribe : ");  
  176.                 sb.append("网络不同导致定位失败,请检查网络是否通畅");  
  177.             } else if (location.getLocType() == BDLocation.TypeCriteriaException) {  
  178.                 sb.append("\ndescribe : ");  
  179.                 sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机");  
  180.             }  
  181.             sb.append("\nlocationdescribe : ");  
  182.             sb.append(location.getLocationDescribe());// 位置语义化信息  
  183.             List<Poi> list = location.getPoiList();// POI数据  
  184.             if (list != null) {  
  185.                 sb.append("\npoilist size = : ");  
  186.                 sb.append(list.size());  
  187.                 for (Poi p : list) {  
  188.                     sb.append("\npoi= : ");  
  189.                     sb.append(p.getId() + " " + p.getName() + " " + p.getRank());  
  190.                 }  
  191.             }  
  192.             lat = location.getLatitude();  
  193.             lon = location.getLongitude();  
  194.               
  195.             //这个判断是为了防止每次定位都重新设置中心点和marker  
  196.             if(isFirstLocation){  
  197.                 isFirstLocation = false;  
  198.                 setMarker();  
  199.                 setUserMapCenter();  
  200.             }  
  201.             Log.v("pcw","lat : " + lat+" lon : " + lon);  
  202.             Log.i("BaiduLocationApiDem", sb.toString());  
  203.         }  
  204.     }  
  205.   
  206.     /** 
  207.      * 必须要实现 
  208.      */  
  209.     @Override  
  210.     protected void onDestroy() {  
  211.         super.onDestroy();  
  212.         //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
  213.         mMapView.onDestroy();  
  214.     }  
  215.   
  216.     /** 
  217.      * 必须要实现 
  218.      */  
  219.     @Override  
  220.     protected void onResume() {  
  221.         super.onResume();  
  222.         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
  223.         mMapView.onResume();  
  224.     }  
  225.   
  226.     /** 
  227.      * 必须要实现 
  228.      */  
  229.     @Override  
  230.     protected void onPause() {  
  231.         super.onPause();  
  232.         //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
  233.         mMapView.onPause();  
  234.     }  
  235. }  

2.设置中心点的代码:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.     * 设置中心点 
  3.     */  
  4.    private void setUserMapCenter() {  
  5.        Log.v("pcw","setUserMapCenter : lat : "+ lat+" lon : " + lon);  
  6.        LatLng cenpt = new LatLng(lat,lon);  
  7.        //定义地图状态  
  8.        MapStatus mMapStatus = new MapStatus.Builder()  
  9.                .target(cenpt)  
  10.                .zoom(18)  
  11.                .build();  
  12.        //定义MapStatusUpdate对象,以便描述地图状态将要发生的变化  
  13.        MapStatusUpdate mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(mMapStatus);  
  14.        //改变地图状态  
  15.        mBaiduMap.setMapStatus(mMapStatusUpdate);  
  16.   
  17.    }  

3.添加marker:

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 添加marker 
  3.      */  
  4.     private void setMarker() {  
  5.         Log.v("pcw","setMarker : lat : "+ lat+" lon : " + lon);  
  6.         //定义Maker坐标点  
  7.         LatLng point = new LatLng(lat, lon);  
  8.         //构建Marker图标  
  9.         BitmapDescriptor bitmap = BitmapDescriptorFactory  
  10.                 .fromResource(R.drawable.location_marker);  
  11.         //构建MarkerOption,用于在地图上添加Marker  
  12.         OverlayOptions option = new MarkerOptions()  
  13.                 .position(point)  
  14.                 .icon(bitmap);  
  15.         //在地图上添加Marker,并显示  
  16.         mBaiduMap.addOverlay(option);  
  17.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值