目标:
1.引入百度地图
2.实现定位功能
3.结合传感器实现方向定位
4.显示模式的切换
5.判断用户位置是否在指定的圆范围内
6.地理编码和反地理编码
步骤:
1.去官方androidsdk中心:[创建应用](http://lbsyun.baidu.com/apiconsole/key)
备注:
sha1:和我们的签名文件有关系,所以对应一个开发版(Debug)和Relise(发布版)
获取sha1值步骤:
获取Debug
1打开自己电脑c盘的.android文件夹---敲入cmd ,复制命令:keytool -list -v -keystore debug.keystore 获取sha1值
获取发布版:
1打开自己电脑c盘的.android文件夹---敲入cmd ,复制命令:keytool -list -v -keystore +签名文件的路径+签名文件的名字
--------------------------以上步骤是申请ak的步骤----------------------------------
2.[下载相关文件](http://lbsyun.baidu.com/sdk/download?selected=location_all)-----去他的Demo中拿文件 否则容易出错
3.配置ak和权限,复制自定义控件,调用自定义控件对应的方法,同步生命周期,
---------以上完成百度地图的helloWord-------------
需要配置的权限
<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" />
需要配置的ak
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的ak" />
最后别忘了配置一个服务
<service android:name="com.baidu.location.f" android:process=":remote" android:enabled="true">
<intent-filter>
<action android:name="com.baidu.location.service_v2.2"> </action>
</intent-filter>
</service>
4.改变百度地图的默认显示标尺
//1.获取mapView对象
mMapView = (MapView) findViewById(R.id.bmapView);
//2.获取操作mapView对象的对象
mbaidumap = mMapView.getMap();
//3.获取封装mapView状态数据的类
MapStatusUpdate stu = MapStatusUpdateFactory.zoomTo(15.0f);
//4.把数据给BaiduMap对象
mbaidumap.setMapStatus(stu);
5.改变地图正常地图和卫星图的切换
case 1://普通地图
mbaidumap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case 2://卫星图
mbaidumap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
6.交通状况切换
case 3://交通图
if(mbaidumap.isTrafficEnabled()){
mbaidumap.setTrafficEnabled(false);
}else{
mbaidumap.setTrafficEnabled(true);
}
break;
-----------以上是百度地图的基本设置 涉及一个展示对象和一个操作对象---------------
定位功能:
核心api: LocationClient类和BDLocationLinstener监听,因为是异步定位
//创建对象
client = new LocationClient(this);
//创建监听
MyLocationClientLin lin = new MyLocationClientLin();
//注册监听
client.registerLocationListener(lin);
//设置定位方式
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
//添加方式
client.setLocOption(option);
//回调接口
private class MyLocationClientLin implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//获取纬精度
MyLocationData data = new MyLocationData.Builder()
.accuracy(bdLocation.getRadius())
.latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude())
.build() ;
mbaidumap.setMyLocationData(data);
//第一次开启的时候设置初始位置
if(isfaris){
LatLng ff = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ff);
mbaidumap.animateMapStatus(msu);
isfaris=false;
}
//获取具体的地址
Toast.makeText(MainActivity.this,bdLocation.getAddrStr() , Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getCountry(), Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getProvince(), Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getCity(), Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getDistrict(), Toast.LENGTH_SHORT).show();
}
}
开启或者取消定位
@Override
protected void onStart() {
super.onStart();
mbaidumap.setMyLocationEnabled(true);
if(!client.isStarted())
client.start();
}
@Override
protected void onStop() {
super.onStop();
mbaidumap.setMyLocationEnabled(false);
client.stop();
}
------------------以上是定位的实现-----------------------
结合手机方向传感器,实现方向定位,地图不动 [具体教程参考链接](http://www.imooc.com/video/5687)
--------------模式切换 -------参考代码-----------------------
-------------判断用户位置是否在指定的圆范围内-------------[具体教程参考链接](http://developer.baidu.com/map/wiki/index.php?title=androidsdk/guide/tool)
/**
* 判断一个点 是否在这个圆内
*/
private void jisuankongjian() {
LatLng pt1 = new LatLng(113.592075, 34.765855);
LatLng pt2 = new LatLng(113.702459,34.814709);
/**
* 返回true代表在自定位置,参数1,为圆中心,参数2:半径 单位km 参数三:需要判断的位置
*/
boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(pt1, 1000, pt2);
Log.e("======",circleContainsPoint+"");
}
----------------- 地理编码-----------------[具体教程参考链接](http://lbsyun.baidu.com/index.php?title=lbscloud/cloudgc/about)
private void diLi() {
//新建编码查询对象
GeoCoder geocode = GeoCoder.newInstance();
//新建查询对象要查询的条件
GeoCodeOption GeoOption = new GeoCodeOption().city("郑州").address("金水区商务外环路11号");
//发起地理编码请求
geocode.geocode(GeoOption);
//设置查询结果监听者
geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
/**
*
* @param geoCodeResult 地理编码查询结果 输入
*/
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
LatLng location = geoCodeResult.getLocation();
Log.e("地理编码",location.toString());
}
/**
*
* @param reverseGeoCodeResult 反地理编码
*/
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
}
});
}
-------------------------反地理编码--------------------------------[具体教程参考链接](http://lbsyun.baidu.com/index.php?title=lbscloud/api/cloudrgc)
/**
* 反地理编码
*/
private void fanDiLi() {
//新建编码查询对象
GeoCoder geocode = GeoCoder.newInstance();
//查询的经纬度的封装类
LatLng ll = new LatLng(34.78143397742853,113.7254505942238);
//新建查询对象要查询的条件
ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(ll);
// 发起反地理编码请求
geocode.reverseGeoCode(options);
//设置查询结果监听者
geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
/**
* 地理编码
* @param geoCodeResult
*/
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
}
/**
* 反地理编码
* @param reverseGeoCodeResult
*/
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
Log.e("反地理编码","cuowu");
return;
}
if (reverseGeoCodeResult != null && reverseGeoCodeResult.error == SearchResult.ERRORNO.NO_ERROR) {
//得到位置
String address = reverseGeoCodeResult.getAddress();
Log.e("反地理编码",address);
}
}
});
}
1.引入百度地图
2.实现定位功能
3.结合传感器实现方向定位
4.显示模式的切换
5.判断用户位置是否在指定的圆范围内
6.地理编码和反地理编码
步骤:
1.去官方androidsdk中心:[创建应用](http://lbsyun.baidu.com/apiconsole/key)
备注:
sha1:和我们的签名文件有关系,所以对应一个开发版(Debug)和Relise(发布版)
获取sha1值步骤:
获取Debug
1打开自己电脑c盘的.android文件夹---敲入cmd ,复制命令:keytool -list -v -keystore debug.keystore 获取sha1值
获取发布版:
1打开自己电脑c盘的.android文件夹---敲入cmd ,复制命令:keytool -list -v -keystore +签名文件的路径+签名文件的名字
--------------------------以上步骤是申请ak的步骤----------------------------------
2.[下载相关文件](http://lbsyun.baidu.com/sdk/download?selected=location_all)-----去他的Demo中拿文件 否则容易出错
3.配置ak和权限,复制自定义控件,调用自定义控件对应的方法,同步生命周期,
---------以上完成百度地图的helloWord-------------
需要配置的权限
<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" />
需要配置的ak
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的ak" />
最后别忘了配置一个服务
<service android:name="com.baidu.location.f" android:process=":remote" android:enabled="true">
<intent-filter>
<action android:name="com.baidu.location.service_v2.2"> </action>
</intent-filter>
</service>
4.改变百度地图的默认显示标尺
//1.获取mapView对象
mMapView = (MapView) findViewById(R.id.bmapView);
//2.获取操作mapView对象的对象
mbaidumap = mMapView.getMap();
//3.获取封装mapView状态数据的类
MapStatusUpdate stu = MapStatusUpdateFactory.zoomTo(15.0f);
//4.把数据给BaiduMap对象
mbaidumap.setMapStatus(stu);
5.改变地图正常地图和卫星图的切换
case 1://普通地图
mbaidumap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case 2://卫星图
mbaidumap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
6.交通状况切换
case 3://交通图
if(mbaidumap.isTrafficEnabled()){
mbaidumap.setTrafficEnabled(false);
}else{
mbaidumap.setTrafficEnabled(true);
}
break;
-----------以上是百度地图的基本设置 涉及一个展示对象和一个操作对象---------------
定位功能:
核心api: LocationClient类和BDLocationLinstener监听,因为是异步定位
//创建对象
client = new LocationClient(this);
//创建监听
MyLocationClientLin lin = new MyLocationClientLin();
//注册监听
client.registerLocationListener(lin);
//设置定位方式
LocationClientOption option = new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true);
option.setOpenGps(true);
option.setScanSpan(1000);
//添加方式
client.setLocOption(option);
//回调接口
private class MyLocationClientLin implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//获取纬精度
MyLocationData data = new MyLocationData.Builder()
.accuracy(bdLocation.getRadius())
.latitude(bdLocation.getLatitude())
.longitude(bdLocation.getLongitude())
.build() ;
mbaidumap.setMyLocationData(data);
//第一次开启的时候设置初始位置
if(isfaris){
LatLng ff = new LatLng(bdLocation.getLatitude(),bdLocation.getLongitude());
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ff);
mbaidumap.animateMapStatus(msu);
isfaris=false;
}
//获取具体的地址
Toast.makeText(MainActivity.this,bdLocation.getAddrStr() , Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getCountry(), Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getProvince(), Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getCity(), Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this,bdLocation.getDistrict(), Toast.LENGTH_SHORT).show();
}
}
开启或者取消定位
@Override
protected void onStart() {
super.onStart();
mbaidumap.setMyLocationEnabled(true);
if(!client.isStarted())
client.start();
}
@Override
protected void onStop() {
super.onStop();
mbaidumap.setMyLocationEnabled(false);
client.stop();
}
------------------以上是定位的实现-----------------------
结合手机方向传感器,实现方向定位,地图不动 [具体教程参考链接](http://www.imooc.com/video/5687)
--------------模式切换 -------参考代码-----------------------
-------------判断用户位置是否在指定的圆范围内-------------[具体教程参考链接](http://developer.baidu.com/map/wiki/index.php?title=androidsdk/guide/tool)
/**
* 判断一个点 是否在这个圆内
*/
private void jisuankongjian() {
LatLng pt1 = new LatLng(113.592075, 34.765855);
LatLng pt2 = new LatLng(113.702459,34.814709);
/**
* 返回true代表在自定位置,参数1,为圆中心,参数2:半径 单位km 参数三:需要判断的位置
*/
boolean circleContainsPoint = SpatialRelationUtil.isCircleContainsPoint(pt1, 1000, pt2);
Log.e("======",circleContainsPoint+"");
}
----------------- 地理编码-----------------[具体教程参考链接](http://lbsyun.baidu.com/index.php?title=lbscloud/cloudgc/about)
private void diLi() {
//新建编码查询对象
GeoCoder geocode = GeoCoder.newInstance();
//新建查询对象要查询的条件
GeoCodeOption GeoOption = new GeoCodeOption().city("郑州").address("金水区商务外环路11号");
//发起地理编码请求
geocode.geocode(GeoOption);
//设置查询结果监听者
geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
/**
*
* @param geoCodeResult 地理编码查询结果 输入
*/
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
LatLng location = geoCodeResult.getLocation();
Log.e("地理编码",location.toString());
}
/**
*
* @param reverseGeoCodeResult 反地理编码
*/
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
}
});
}
-------------------------反地理编码--------------------------------[具体教程参考链接](http://lbsyun.baidu.com/index.php?title=lbscloud/api/cloudrgc)
/**
* 反地理编码
*/
private void fanDiLi() {
//新建编码查询对象
GeoCoder geocode = GeoCoder.newInstance();
//查询的经纬度的封装类
LatLng ll = new LatLng(34.78143397742853,113.7254505942238);
//新建查询对象要查询的条件
ReverseGeoCodeOption options = new ReverseGeoCodeOption().location(ll);
// 发起反地理编码请求
geocode.reverseGeoCode(options);
//设置查询结果监听者
geocode.setOnGetGeoCodeResultListener(new OnGetGeoCoderResultListener() {
/**
* 地理编码
* @param geoCodeResult
*/
@Override
public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
}
/**
* 反地理编码
* @param reverseGeoCodeResult
*/
@Override
public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
Log.e("反地理编码","cuowu");
return;
}
if (reverseGeoCodeResult != null && reverseGeoCodeResult.error == SearchResult.ERRORNO.NO_ERROR) {
//得到位置
String address = reverseGeoCodeResult.getAddress();
Log.e("反地理编码",address);
}
}
});
}