Android百度地图定位
在談到百度地圖。如今,每個人都知道這個時候應該可以了吧。而更多的字不拉。直接朝話題。
訪問百度地圖api您必須應用key,應用在這里key不用說,有官方的文件說明如何應用上述key。
在這里,百度地圖使用4.2版本號,api它是3.1.1版本號。key,那么就能夠進入編碼階段了,詳細實現例如以下:
1.引入百度地圖相關jar包及armeabi文件夾到libs文件夾中
2.在項目的AndroidManifest.xml文件里配置相關信息
配置權限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.GET_ACCOUNTS" /><uses-permission android:name="android.permission.USE_CREDENTIALS" /><uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /><uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.BROADCAST_STICKY" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.READ_LOGS" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />在application標簽中聲明Service標簽,每一個app擁有獨立的service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
設置百度密鑰
3.配置布局文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><com.baidu.mapapi.map.MapViewandroid:id="@+id/mv_map"android:layout_width="match_parent"android:layout_height="match_parent"android:clickable="true" /> </LinearLayout>4.代碼詳細實現
package com.example.map.activity;import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; 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.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; import android.app.Activity; import android.os.Bundle;public class MainActivity extends Activity{private LocationClient locationClient;//定位clientprivate MyLocationListener locationListener=new MyLocationListener();private MapView mvMap;//百度地圖控件private BaiduMap baiduMap;//地圖對象控制器private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//必須在setContentView前SDKInitializer.initialize(getApplicationContext());setContentView(R.layout.main_activity);initMap();//初始化}/*** 初始化地圖*/private void initMap(){//獲取地圖控件mvMap=(MapView) findViewById(R.id.mv_map);//獲取地圖對象控制器baiduMap=mvMap.getMap();baiduMap.setBuildingsEnabled(true);//設置顯示樓體baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(19f));//設置地圖狀態//創建定位clientlocationClient=new LocationClient(getApplicationContext());//注冊監聽器locationClient.registerLocationListener(locationListener);//實例化client定位參數LocationClientOption options=new LocationClientOption();options.setLocationMode(LocationMode.Hight_Accuracy);//設置定位模式options.setCoorType("gcj02");//返回定位結果options.setScanSpan(6000);//設置定位掃描間隔時間options.setIsNeedAddress(true);//設置定位結果中是否含地址信息,默認無options.setNeedDeviceDirect(true);//設置網絡定位時,須要設備方向locationClient.setLocOption(options);//設置定位參數locationClient.start();//開始定位}/*** 實現百度定位監聽器* @author Arvin_Li**/public class MyLocationListener implements BDLocationListener{@Overridepublic void onReceiveLocation(BDLocation location) {if (location == null) return ;//創建地理坐標點對象LatLng point=new LatLng(location.getLatitude(), location.getLongitude());//將國測局坐標轉為百度坐標point=gcjTobaidu(point);//開啟定位圖層baiduMap.setMyLocationEnabled(true);//構造定位數據MyLocationData locData=new MyLocationData.Builder().accuracy(location.getRadius())//設置位置的精度信息.direction(location.getDirection())//設置獲取到的方向信息,順時針0-360.latitude(point.latitude)//設置定位數據的緯度.longitude(point.longitude)//設置定位數據的經度.build();//構建生成定位數據對象//設置定位數據baiduMap.setMyLocationData(locData);//構建定位圖標constructionLocationIcon(point);}}/*** 構建定位圖標* @param point 圖標位置*/private void constructionLocationIcon(LatLng point){//創建Marker圖標BitmapDescriptor descriptor=BitmapDescriptorFactory.fromResource(R.drawable.xk);//構建MarkerOption,用于在地圖上加入MarkerOverlayOptions options=new MarkerOptions().icon(descriptor)//設置圖標.position(point)//設置圖標位置.draggable(true)//同意拖拽.zIndex(5);//設置圖標層次//清空地圖全部的 Overlay 覆蓋物以及 InfoWindowbaiduMap.clear();//在地圖上加入圖標baiduMap.addOverlay(options);//設置定位圖層配置信息,僅僅有先同意定位圖層后設置定位圖層配置信息才會生效baiduMap.setMyLocationConfigeration(new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING, true, descriptor));//關閉定位圖層baiduMap.setMyLocationEnabled(false);}@Overrideprotected void onPause() {super.onPause();mvMap.onPause();}@Overrideprotected void onResume() {super.onResume();mvMap.onResume();}@Overrideprotected void onDestroy() {super.onDestroy();if(null!=locationClient&&locationClient.isStarted()){locationClient.stop();//停止定位}locationClient=null;mvMap.onDestroy();//銷毀地圖}/*** 國測局轉換百度經緯度* @param point* @return*/public static LatLng gcjTobaidu(LatLng point) {// double x = gg_lon, y = gg_lat;double x = point.longitude, y = point.latitude;double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);double bd_lon = z * Math.cos(theta) + 0.0065;double bd_lat = z * Math.sin(theta) + 0.006;LatLng point1 = new LatLng(bd_lat,bd_lon);return point1;} }返回定位參數有三個值:
1.gcj02 返回國測局經緯度坐標系
2.bd09返回百度墨卡托坐標系
3.bd09ll 返回百度經緯度坐標
默認是gcj02
設置定位模式有三種:
1.Battery_Saving 低功耗模式
2.Device_Sensors 僅設備GPS模式
3.Hight_Accuracy 高精度模式
option.setLocationMode(LocationMode.Hight_Accuracy)
設置定位圖層配置信息,僅僅有先同意定位圖層后設置定位圖層配置信息才會生效
當中的定位圖層顯示方式有3中:
1.COMPASS ?羅盤態,顯示定位方向圈,保持定位圖標在地圖中心
2.NORMAL?普通態: 更新定位數據時不正確地圖做不論什么操作
3.FOLLOWING 尾隨態,保持定位圖標在地圖中心
baiduMap.setMyLocationConfigeration(new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING, true, descriptor)); 即使在這里定位的功能是多。版權聲明:本文博主原創文章。博客,未經同意不得轉載。
轉載于:https://www.cnblogs.com/hrhguanli/p/4777651.html
總結
以上是生活随笔為你收集整理的Android百度地图定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【读书笔记】iOS-NSString的l
- 下一篇: 需求:过滤下面这个网页里共723行 校对