百度地图开发之获取定位地点

在前面几次我们分别完成了数据检索和线路规划的功能,但是如果我们不知道自己位置,检索起来说是不是会很麻烦呢?

知道自己位置就可以根据自己的位置进行检索和路线规划。

定位服务

在读地图的定位服务是与基本地图服务分开的所以需要引入另外的so文件盒jar包,如果你选择的是复合包的话,只用一如so文件就OK了。

首先在清单文件中加上如下的服务

<span class="sy0" style="color: rgb(51, 153, 51);"><</span>service android<span class="sy0" style="color: rgb(51, 153, 51);">:</span><span class="kw3" style="color: rgb(0, 0, 102);">name</span><span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(51, 102, 204);">"com.baidu.location.f"</span> android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>enabled<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(51, 102, 204);">"true"</span> android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>process<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(51, 102, 204);">":remote"</span><span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"></</span>service<span class="sy0" style="color: rgb(51, 153, 51);">></span>

然后就是加入定位所需要的权限

注意自己去除和地图权限相同的权限

<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 这个权限用于进行网络定位<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.ACCESS_COARSE_LOCATION"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 这个权限用于访问GPS定位<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.ACCESS_FINE_LOCATION"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 用于访问wifi网络信息,wifi信息会用于进行网络定位<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.ACCESS_WIFI_STATE"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 获取运营商信息,用于支持提供运营商信息相关的接口<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.ACCESS_NETWORK_STATE"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.CHANGE_WIFI_STATE"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 用于读取手机当前的状态<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.READ_PHONE_STATE"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.WRITE_EXTERNAL_STORAGE"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> 访问网络,网络定位需要上网<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.INTERNET"</span> <span class="sy0" style="color: rgb(51, 153, 51);">/></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span> SD卡读取权限,用户写入离线定位数据<span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.MOUNT_UNMOUNT_FILESYSTEMS"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><!--</span>允许应用读取低级别的系统日志文件 <span class="sy0" style="color: rgb(51, 153, 51);">--></span>
<span class="sy0" style="color: rgb(51, 153, 51);"><</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>name<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(0, 0, 255);">"android.permission.READ_LOGS"</span><span class="sy0" style="color: rgb(51, 153, 51);">></</span>uses<span class="sy0" style="color: rgb(51, 153, 51);">-</span>permission<span class="sy0" style="color: rgb(51, 153, 51);">></span>

依然是 key文件,地图和定位使用同一个key文件

在清单文件的的APPlication节点下配置

<span class="sy0" style="color: rgb(51, 153, 51);"><</span>meta<span class="sy0" style="color: rgb(51, 153, 51);">-</span>data
            android<span class="sy0" style="color: rgb(51, 153, 51);">:</span><span class="kw3" style="color: rgb(0, 0, 102);">name</span><span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(51, 102, 204);">"com.baidu.lbsapi.API_KEY"</span>
            android<span class="sy0" style="color: rgb(51, 153, 51);">:</span>value<span class="sy0" style="color: rgb(51, 153, 51);">=</span><span class="st0" style="color: rgb(51, 102, 204);">"key"</span> <span class="sy0" style="color: rgb(51, 153, 51);">/></span>  

涉及地图相关的知识,不再赘述

[java] view
plain
copyprint?

  1. // 获取地图控件引用
  2. mMapView = (MapView) findViewById(R.id.bmapView);
  3. map = mMapView.getMap();
  4. // 设置开启定位自己的位置
  5. map.setMyLocationEnabled(true);
  6. // 设置定位点图标,可以使用系统的也可以自定义
  7. mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
  8. // 如果使用系统的让mCurrentMarker为空即可
  9. map.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, mCurrentMarker));

基本的定位操作

[java] view
plain
copyprint?

  1. client = new LocationClient(getApplicationContext()); // 声明LocationClient类
  2. listener = Mylisetener;
  3. // 注册监听
  4. client.registerLocationListener(listener);
  5. LocationClientOption option = new LocationClientOption();
  6. option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
  7. option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
  8. option.setOpenGps(true);// 打开gps
  9. // option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
  10. // option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
  11. client.setLocOption(option);

具体实现代码

[java] view
plain
copyprint?

  1. package com.flyou.hellomap;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import com.baidu.location.BDLocation;
  5. import com.baidu.location.BDLocationListener;
  6. import com.baidu.location.LocationClient;
  7. import com.baidu.location.LocationClientOption;
  8. import com.baidu.mapapi.SDKInitializer;
  9. import com.baidu.mapapi.map.BaiduMap;
  10. import com.baidu.mapapi.map.BaiduMapOptions;
  11. import com.baidu.mapapi.map.BitmapDescriptor;
  12. import com.baidu.mapapi.map.BitmapDescriptorFactory;
  13. import com.baidu.mapapi.map.MapStatus;
  14. import com.baidu.mapapi.map.MapStatus.Builder;
  15. import com.baidu.mapapi.map.MapStatusUpdate;
  16. import com.baidu.mapapi.map.MapStatusUpdateFactory;
  17. import com.baidu.mapapi.map.MapView;
  18. import com.baidu.mapapi.map.MyLocationConfiguration;
  19. import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
  20. import com.baidu.mapapi.map.MyLocationData;
  21. import com.baidu.mapapi.model.LatLng;
  22. import com.baidu.platform.comapi.map.s;
  23. public class LocationMapActivity extends Activity {
  24. private LocationClient client;
  25. private BDLocationListener listener;
  26. MapView mMapView = null;
  27. BitmapDescriptor mCurrentMarker;
  28. private boolean isFirstLoc = true;
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. // 在使用SDK各组件之前初始化context信息,传入ApplicationContext
  33. // 注意该方法要再setContentView方法之前实现
  34. SDKInitializer.initialize(getApplicationContext());
  35. setContentView(R.layout.activity_main);
  36. // 获取地图控件引用
  37. mMapView = (MapView) findViewById(R.id.bmapView);
  38. map = mMapView.getMap();
  39. // 设置开启定位自己的位置
  40. map.setMyLocationEnabled(true);
  41. // 设置定位点图标,可以使用系统的也可以自定义
  42. mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
  43. // 如果使用系统的让mCurrentMarker为空即可
  44. map.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, mCurrentMarker));
  45. location();
  46. }
  47. private void location() {
  48. client = new LocationClient(getApplicationContext()); // 声明LocationClient类
  49. listener = Mylisetener;
  50. // 注册监听
  51. client.registerLocationListener(listener);
  52. LocationClientOption option = new LocationClientOption();
  53. option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02
  54. option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms
  55. option.setOpenGps(true);// 打开gps
  56. // option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
  57. // option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
  58. client.setLocOption(option);
  59. }
  60. @Override
  61. protected void onDestroy() {
  62. super.onDestroy();
  63. // 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
  64. mMapView.onDestroy();
  65. // map.setMyLocationEnabled(false);
  66. }
  67. @Override
  68. protected void onResume() {
  69. super.onResume();
  70. location();
  71. // 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
  72. mMapView.onResume();
  73. client.start();
  74. }
  75. @Override
  76. protected void onPause() {
  77. super.onPause();
  78. // 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
  79. mMapView.onPause();
  80. client.stop();
  81. }
  82. BDLocationListener Mylisetener = new BDLocationListener() {
  83. @Override
  84. public void onReceiveLocation(BDLocation location) {
  85. // map view 销毁后不在处理新接收的位置
  86. if (location == null || mMapView == null)
  87. return;
  88. MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())
  89. // 此处设置开发者获取到的方向信息,顺时针0-360
  90. .direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();
  91. map.setMyLocationData(locData);
  92. if (isFirstLoc) {
  93. isFirstLoc = false;
  94. LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
  95. // 缩放的范围是3-20
  96. MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 17f);
  97. map.animateMapStatus(u);
  98. }
  99. }
  100. };
  101. private BaiduMap map;
  102. }
时间: 2024-10-10 23:59:14

百度地图开发之获取定位地点的相关文章

C#的百度地图开发(五)IP定位

前面我们已经实现了坐标定位及前端显示,而坐标的获取一般只在移动设备上,对于PC端难以得到.但是在PC端,我们可以得到相应的IP.在得到了IP之后,我们就可以进行定们了.代码如下: public class BaiduMap { /// <summary> /// 依据IP获取定位信息的URL模板. /// 参数1:百度地图API的KEY. /// 参数2:IP. public const string IP_LOCATION_URL_TEMPLATE = "http://api.ma

百度地图,自动获取定位,拖拽获取地点,模糊查询获取当前位置

先看下效果图,因为没有美化,只是做一下功能. 完整代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <script src="../.

使用百度地图开发一个导航定位demo-android学习之旅(77)

首先介绍如何导入百度地图 步骤(其实官方文档写的很清楚了)http://developer.baidu.com/map/index.php?title=androidsdk/guide/introduction 1.注册开发者账号 2.注册你的应用,登陆控制台,然后输入数字签名和包名,得到开发Id 3. 下载android sdk进行配置,我用的是Android studio,配置步骤是,在app底下的libs下导入,没有的话新建,在src/main/目录下新建jniLibs目录,放下那些搜文件

百度地图开发-将多个地点标记在地图上,点击节点弹出PopupWindow

最近在写一个安卓程序,用到了百度地图API的一些内容,就随便玩耍了一下. 这个DEMO是用来将多个地点标记在地图上,然后点击节点弹出PopupWindow 下面是一些截图: main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout

微信小程序自动定位,通过百度地图根据经纬度获取该地点所在城市信息

微信小程序获得经纬度 var that = this wx.getLocation({ type: 'wgs84', success(res) { console.log(res) that.setData({ latitude: res.latitude, longitude: res.longitude }) } }) 百度地图api 'https://api.map.baidu.com/geocoder/v2/?location=' + res.latitude+',' + res.lon

百度地图开发之【定位】

在前面几次我们分别完成了数据检索和线路规划的功能,但是如果我们不知道自己位置,检索起来说是不是会很麻烦呢? 知道自己位置就可以根据自己的位置进行检索和路线规划. 定位服务 在读地图的定位服务是与基本地图服务分开的所以需要引入另外的so文件盒jar包,如果你选择的是复合包的话,只用一如so文件就OK了. 首先在清单文件中加上如下的服务 <service android:name="com.baidu.location.f" android:enabled="true&qu

[android] 百度地图开发 (三).定位当前位置及getLastKnownLocation获取location总为空问题

       前一篇百度地图开发讲述"(二).定位城市位置和城市POI搜索",主要通过监听对象MKSearchListener类实现城市兴趣点POI(Point of Interest)搜索.该篇讲述定位当前自己的位置及使用getLastKnownLocation获取location总时为空值的问题. 一. 定位当前位置的原理及实现       定位当前位置可以通过LBS(Location Based Service,基于位置的服务),主要工作原理是利用无线网络Network或GPS定

[android] 百度地图开发 (二).定位城市位置和城市POI搜索

一. 百度地图城市定位和POI搜索知识       上一篇文章"百度地图开发(一)"中讲述了如何申请百度APIKey及解决显示空白网格的问题.该篇文章主要讲述如何定位城市位置.定位自己的位置和进行城市兴趣点POI(Point of Interest)搜索.那么如何在百度地图上定位某一个位置呢?       通过类GeoPoint可以定义经纬度,它存放着纬度值和经度值,通过getLastKnownLocation()方法可以获取Location对象,再定位经纬度设置其为地图中心即可显示当

Arcgis andoid开发之应用百度地图接口实现精准定位与显示

怀着激动.兴奋的心情,在这个漫天柳絮的季节写下了这片博文,为什么呢,因为困扰我很久的一个技术性的问题得到了解决,发次博文,供大家参观.学习,同时,也以慰藉我长期困扰的心情,好了,废话不再,言归正传,看看这到底是个什么东西? 首先,简单地介绍一下功能:1.离线地图的加载:2.GPS的定位与显示.文字比较模糊,看看实际的效果图: 功能其实很简单,下面解释一下实现思路: 1.布局 <?xml version="1.0" encoding="utf-8"?> &