您的位置:首页 > 其它

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

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

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

定位服务

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

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

<pre class="de1" name="code" style="word-wrap: break-word; padding: 0px; border: 0px none white; overflow: hidden; word-break: break-all; margin-top: 0px; margin-bottom: 0px; vertical-align: top; background-image: none;"><span style="font-size:14px;"><span class="sy0"><</span>service android<span class="sy0">:</span><span class="kw3">name</span><span class="sy0">=</span><span class="st0">"com.baidu.location.f"</span> android<span class="sy0">:</span>enabled<span class="sy0">=</span><span class="st0">"true"</span> android<span class="sy0">:</span>process<span class="sy0">=</span><span class="st0">":remote"</span><span class="sy0">></span>
<span class="sy0"></</span>service<span class="sy0">></span></span>



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

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

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




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

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

<pre name="code" class="java"><span style="font-size:14px;"><meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="key" />  </span>




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

[java] view
plaincopyprint?





// 获取地图控件引用

mMapView = (MapView) findViewById(R.id.bmapView);



map = mMapView.getMap();

// 设置开启定位自己的位置

map.setMyLocationEnabled(true);



// 设置定位点图标,可以使用系统的也可以自定义



mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);

// 如果使用系统的让mCurrentMarker为空即可

map.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, mCurrentMarker));

基本的定位操作

[java] view
plaincopyprint?





client = new LocationClient(getApplicationContext()); // 声明LocationClient类

listener = Mylisetener;

// 注册监听

client.registerLocationListener(listener);



LocationClientOption option = new LocationClientOption();

option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02

option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms

option.setOpenGps(true);// 打开gps

// option.setIsNeedAddress(true);// 返回的定位结果包含地址信息

// option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向

client.setLocOption(option);

具体实现代码

[java] view
plaincopyprint?





package com.flyou.hellomap;



import android.app.Activity;

import android.os.Bundle;



import com.baidu.location.BDLocation;

import com.baidu.location.BDLocationListener;

import com.baidu.location.LocationClient;

import com.baidu.location.LocationClientOption;

import com.baidu.mapapi.SDKInitializer;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.BaiduMapOptions;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.MapStatus;

import com.baidu.mapapi.map.MapStatus.Builder;

import com.baidu.mapapi.map.MapStatusUpdate;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.MyLocationConfiguration;

import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;

import com.baidu.mapapi.map.MyLocationData;

import com.baidu.mapapi.model.LatLng;

import com.baidu.platform.comapi.map.s;



public class LocationMapActivity extends Activity {

private LocationClient client;

private BDLocationListener listener;

MapView mMapView = null;

BitmapDescriptor mCurrentMarker;

private boolean isFirstLoc = true;



@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 在使用SDK各组件之前初始化context信息,传入ApplicationContext

// 注意该方法要再setContentView方法之前实现

SDKInitializer.initialize(getApplicationContext());



setContentView(R.layout.activity_main);

// 获取地图控件引用

mMapView = (MapView) findViewById(R.id.bmapView);



map = mMapView.getMap();

// 设置开启定位自己的位置

map.setMyLocationEnabled(true);



// 设置定位点图标,可以使用系统的也可以自定义



mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);

// 如果使用系统的让mCurrentMarker为空即可

map.setMyLocationConfigeration(new MyLocationConfiguration(LocationMode.NORMAL, true, mCurrentMarker));

location();

}



private void location() {

client = new LocationClient(getApplicationContext()); // 声明LocationClient类

listener = Mylisetener;

// 注册监听

client.registerLocationListener(listener);



LocationClientOption option = new LocationClientOption();

option.setCoorType("bd09ll");// 返回的定位结果是百度经纬度,默认值gcj02

option.setScanSpan(5000);// 设置发起定位请求的间隔时间为5000ms

option.setOpenGps(true);// 打开gps

// option.setIsNeedAddress(true);// 返回的定位结果包含地址信息

// option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向

client.setLocOption(option);

}



@Override

protected void onDestroy() {

super.onDestroy();

// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

mMapView.onDestroy();

// map.setMyLocationEnabled(false);

}



@Override

protected void onResume() {

super.onResume();

location();

// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

mMapView.onResume();



client.start();



}



@Override

protected void onPause() {

super.onPause();

// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

mMapView.onPause();



client.stop();

}



BDLocationListener Mylisetener = new BDLocationListener() {



@Override

public void onReceiveLocation(BDLocation location) {

// map view 销毁后不在处理新接收的位置

if (location == null || mMapView == null)

return;

MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())

// 此处设置开发者获取到的方向信息,顺时针0-360

.direction(100).latitude(location.getLatitude()).longitude(location.getLongitude()).build();

map.setMyLocationData(locData);

if (isFirstLoc) {

isFirstLoc = false;

LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());

// 缩放的范围是3-20

MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 17f);



map.animateMapStatus(u);



}

}



};

private BaiduMap map;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: