【CSDN博客迁移】Android高德地图开发(3)——路况+定
2017-05-26 本文已影响127人
IIGEOywq
在上篇的基础上,我们继续添加路况和定位功能:
1.路况图层显示
高德地图封装了交通路况信息,通过调用AMap 类的方法setTrafficEnabled(),显示路况信息。
在fragment_map中添加路况图层控制按钮
<!--路况图层控制按钮-->
<CheckBox
android:id="@+id/louk_btn"
android:layout_margin="20dp"
android:layout_alignParentRight="true"
android:layout_width="52dp"
android:button="@color/transparent"
android:background="@drawable/map_traffic"
android:layout_height="52dp" />
在initMap的setUpMap()方法中控制路况图层:
//路况图层触发事件
mCBLouk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//判断路况图层是否显示
if (mCBLouk.isChecked()){
aMap.setTrafficEnabled(true);
mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery));
mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic_hl));
}else{
aMap.setTrafficEnabled(false);
mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery));
mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic));
}
}
});
2.定位
2.0以上版本的定位和百度定位类似,专门开启了一个服务去定位,下面主要介绍2.0以上版本的定位:
2.1 首先在manifest.xml文件中配置服务
<service android:name="com.amap.api.location.APSService"></service>
2.2 在setUpMap(参考上篇)函数中加载startPostion()方法,开始请求定位。
/**
* 开始定位
*/
public void startPostion() {
// 初始化定位,
mlocationClient = new AMapLocationClient(getActivity().getApplicationContext());
// 初始化定位参数
mLocationOption = new AMapLocationClientOption();
//单次定位
mLocationOption.setOnceLocation(true);
// 设置定位模式为高精度定位
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// 设置定位回调监听
mlocationClient.setLocationListener(this);
// 设置定位参数
mlocationClient.setLocationOption(mLocationOption);
//请求位置
mlocationClient.startLocation();
}
/**
* long类型时间格式化
*/
public String convertToTime(long time) {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(time);
return df.format(date);
}
2.2 在onLocationChanged中返回定位数据,然后在地图上标注定位图标。
/**
* 混合定位回调函数
*/
@Override
public void onLocationChanged(AMapLocation location) {
if (location != null && location.getErrorCode() == 0) {
Double geoLat = location.getLatitude();
Double geoLng = location.getLongitude();
mMarkerA.setPosition(new LatLng(geoLat, geoLng));
u = CameraUpdateFactory.newLatLngZoom(new LatLng(geoLat, geoLng), 18);
aMap.animateCamera(u);
String cityCode = "";
String desc = "";
Bundle locBundle = location.getExtras();
if (locBundle != null) {
cityCode = locBundle.getString("citycode");
desc = locBundle.getString("desc");
}
String str = ("定位成功:(" + geoLng + "," + geoLat + ")"
+ "\n精 度 :" + location.getAccuracy() + "米"
+ "\n定位方式:" + location.getProvider() + "\n定位时间:"
+ convertToTime(location.getTime()) + "\n城市编码:"
+ cityCode + "\n位置描述:" + desc + "\n省:"
+ location.getProvince() + "\n市:" + location.getCity()
+ "\n区(县):" + location.getDistrict() + "\n区域编码:" + location
.getAdCode());
} else {
}
}
2.3 退出时,停止定位服务。
@Override
public void onPause() {
super.onPause();
// 停止定位
mlocationClient.stopLocation();
}
public void onDestroy() {
mlocationClient.onDestroy();
super.onDestroy();
}