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"/>
设置百度密钥
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="yMSCtrtXNOKOZnyXtVXaMA7O" />
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.MapView
android: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;//定位client
private MyLocationListener locationListener=new MyLocationListener();
private MapView mvMap;//百度地图控件
private BaiduMap baiduMap;//地图对象控制器
private static double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
@Override
protected 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));//设置地图状态 //创建定位client
locationClient=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{
@Override
public 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,用于在地图上加入Marker
OverlayOptions options=new MarkerOptions()
.icon(descriptor)//设置图标
.position(point)//设置图标位置
.draggable(true)//同意拖拽
.zIndex(5);//设置图标层次
//清空地图全部的 Overlay 覆盖物以及 InfoWindow
baiduMap.clear();
//在地图上加入图标
baiduMap.addOverlay(options);
//设置定位图层配置信息,仅仅有先同意定位图层后设置定位图层配置信息才会生效
baiduMap.setMyLocationConfigeration(new MyLocationConfiguration(com.baidu.mapapi.map.MyLocationConfiguration.LocationMode.FOLLOWING, true, descriptor));
//关闭定位图层
baiduMap.setMyLocationEnabled(false);
} @Override
protected void onPause() {
super.onPause();
mvMap.onPause();
} @Override
protected void onResume() {
super.onResume();
mvMap.onResume();
}
@Override
protected 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));
即使在这里定位的功能是多。
版权声明:本文博主原创文章。博客,未经同意不得转载。
Android百度地图定位的更多相关文章
- Android 百度地图定位(手动+自动) 安卓开发教程
近由于项目需要,研究了下百度地图定位,他们提供的实例基本都是用监听器实现自动定位的.我想实现一种效果:当用户进入UI时,不定位,用户需要定位的时候,自己手动点击按钮,再去定位当前位置. 经过2天研究 ...
- android 百度地图定位功能实现
历经几天时间,终于把定位功能给实现了,可谓是费劲千辛万苦啊,有定位知识还有图层知识,在这里我把代码给大家贴出来,一起分享一下下啦. package com.example.foreveross.off ...
- 我的Android进阶之旅------>Android百度地图定位SDK功能学习
因为项目需求,需要使用百度地图的定位功能,因此去百度地图开发平台下载了百度地图的Android定位SDK最新版本的开发包和示例代码学习. Android 定位SDK地址:http://develope ...
- android 百度地图定位开发2
先下载了示例代码 进行配置(可查看开发 指南 Hello BaiDuMap) 第一步:创建并配置工程(具体方法参见工程配置部分的介绍): 第二步:在AndroidManifest中添加开发密钥.所需权 ...
- android 百度地图定位开发1
首先注册成为百度开发者 然后进入百度开发者中心 点击LBS 跳到下一个页面 点击Android 开发 里面的基础地图 进入 点击获取密钥 进入 点击创建应用 进入 应用名称自己填 应用类 ...
- android 百度地图 定位功能
废话不多说 直接新建一个新android项目:location,然后花一分钟申请一个key,然后就是把百度定位demo抄一下即可 1:首先在AndroidManifest.xml中加入权限 <u ...
- android百度地图定位开发
一.activity import android.app.Activity; import android.graphics.Point;import android.graphics.PointF ...
- android 百度地图 定位获取位置失败 62错误
一切正常步骤进行但是还是没有获得定位,得到的坐标总是49E.xxxx,错误代码总是62 总是以为代码.或jar包.或还有什么权限没给.搞了好久,十分郁闷.在控制台上又没有什么具体的错误提示 经过无数次 ...
- 050 Android 百度地图的使用
1.初始化地图 //初始化地图 private void initMapView() { //1.获取地图控件引用 mMapView = findViewById(R.id.bmapView); mB ...
随机推荐
- Matlab中的静态(持久)变量和全局变量
1.静态变量(persistent) 在函数中声明的变量,当函数调用完之后就会释放.如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为静态变量.静态变量不能在声明的时候赋值,而且只能在 ...
- [转]Ubuntu 软件安装、查找、卸载--apt-get、apt-cache命令安全
# apt-get update——在修改/etc/apt/sources.list或者/etc/apt/preferences之後运行该命令.此外您需要定期运行这一命令以确保您的软件包列表是最新的. ...
- (转)CreateThread与_beginthreadex本质区别
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beg ...
- Lucence.Net+添加关键词+分页+排序
1.使用queryparser完成解析搜索请求 2.基本格式如: QueryParser parser=new QueryParser("字段名称","分析器实例&quo ...
- 磁盘性能,你可能不知道的IOPS计算方法
每个I/O 请求到磁盘都需要若干时间.主要是因为磁盘的盘边必须旋转,机头必须寻道.磁盘的旋转常常被称为”rotational delay”(RD),机头的移动称为”disk seek”(DS).一个I ...
- Protel 99SE铺铜问题总结
一.PCB电路板放置铺铜有什么作用? 散热: 屏蔽 抗干扰 pcb板子带有寄生电容: 提高板子强度: 美观: 增加被抄板的难度,尤其是覆铜+黑油. 二.PROTEL不规则铺铜的方法: 1.先要知道 ...
- Android 百度地图开发问题----解决地图有时候加载不出来问题
相信很多人在开发百度地图的时候会出现百度地图有时候会加载不出来,只显示网格图. 这个问题究其原因就是申请百度key的时候填写的SHA1也就是指纹证书有问题.估计很多开发者都是照着百度开放平台上介绍的流 ...
- jvm学习小结
1. JDK.JRE.JVM之间的关系.JDK包含JRE和其它开发工具库如编译器.调试期,jConsele性能检测工具等2. JVM的构成:类装载器子系统.执行引擎.运行时数据区,如下图: 3. JV ...
- Redis 命令总结
Redis命令总结 连接操作相关的命令 quit:关闭连接(connection) auth:简单密码认证 持久化 save:将数据同步保存到磁盘 bgsave:将数据异步保存到磁盘 lastsa ...
- In Action(最短路+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...