Android百度地图获取经纬度和好友定位

来源:互联网 发布:usb单片机转换电路 编辑:程序博客网 时间:2024/04/27 21:16

1.新建工程,libs目录下导入baidumapapi_v3_0_0.jarlocSDK_4.2.jar架包,so文件也需要导入。

 

2.关键类说明

public MapView mapView = null;获取地图(视图)

public BaiduMap baiduMap = null;获取地图引用控件

public LocationClient locationClient = null;实例化定位Location

BitmapDescriptor mCurrentMarker = null;自定义定位图标

static BDLocation BD_location = null;获取当前经纬度

private LocationBDLocationListener locationListener = new LocationBDLocationListener();注册监听函数

 

3.获取经纬度

onCreate方法里使用sdk各组件组件之前初始化context信息,传入ApplicationContext;要在setContentView方法前面实现。

SDKInitializer.initialize(getApplicationContext());

 

获取百度地图

mapView = (MapView) this.findViewById(R.id.mapView); 

baiduMap = mapView.getMap();

 

// 开启定位图层

baiduMap.setMyLocationEnabled(true);

MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(14.0f);

baiduMap.setMapStatus(msu);

 

监听当前经纬度位置

baiduMap.setOnMarkerClickListener(new LocationOnMarkerClickListener());

 

设置定位显示的图标

bdA = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);

 

locationClient = new LocationClient(getApplicationContext()); // 实例化LocationClient类

locationClient.registerLocationListener(locationListener); // 注册监听函数

this.setLocationOption(); // 设置定位参数

locationClient.start(); // 开始定位

以上都在onCreate方法里面实现。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

/**

 * 设置定位参数

 */

private void setLocationOption() {

LocationClientOption option = new LocationClientOption();

// 打开GPS

option.setOpenGps(true); 

// 设置定位模式option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);

// 返回的定位结果是百度经纬度,默认值gcj02

option.setCoorType("bd09ll"); 

// 设置发起定位请求的间隔时间为5000ms

option.setScanSpan(5000); 

// 返回的定位结果包含地址信息

option.setIsNeedAddress(true); 

// 返回的定位结果包含手机机头的方向

option.setNeedDeviceDirect(true); 

locationClient.setLocOption(option);

}

 

设置监听BDLocation

class LocationBDLocationListener implements BDLocationListener {

 

@Override

public void onReceiveLocation(BDLocation location) {

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

if (location == null || mapView == null)

return;

 

float radius = location.getRadius();

// 纬度

double latitude = location.getLatitude();

// 经度

    double longitude = location.getLongitude();

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

MyLocationData locData = new MyLocationData

.Builder().accuracy(radius).direction(100)

.latitude(latitude).longitude(longitude).build();

// 设置定位数据

baiduMap.setMyLocationData(locData); 

if (isFirstLoc) {

isFirstLoc = false;

 

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

 // 设置地图中心点以及缩放级别

MapStatusUpdate u = MapStatusUpdateFactory.newLatLngZoom(ll, 16);

baiduMap.animateMapStatus(u);

}

BD_location = location;

}

}

 

4.好友定位

使用OverlayOptions在地图上添加一个浮层,显示好友位置;

private void initOverlay() {

LatLng llA = new LatLng(31.193175, 121.430244);获取好友经纬度

OverlayOptions ooA = new MarkerOptions()设置属性

.position(llA).icon(bdA).zIndex(9);

mMarkerA = (Marker) (baiduMap.addOverlay(ooA));添加浮层

}

 

注册好友OnMarkerClickListener 监听

class LocationOnMarkerClickListener implements OnMarkerClickListener {

 

@Override

public boolean onMarkerClick(final Marker latlng) {

Button button = new Button(getApplicationContext());

button.setBackgroundResource(R.drawable.popup);

OnInfoWindowClickListener listener = null;

LatLng position = latlng.getPosition();

if (latlng == mMarkerA) {

Log.i("TAG""点击事件" + latlng);

点击好友图标显示好友经纬度

button.setText("当前位置:" + "东经" + position.longitude + " 北纬" + position.latitude);

listener = new OnInfoWindowClickListener() {

public void onInfoWindowClick() {

baiduMap.hideInfoWindow();

}

};

}

LatLng ll = latlng.getPosition();

mInfoWindow = new InfoWindow

(BitmapDescriptorFactory.fromView(button), ll, listener);

baiduMap.showInfoWindow(mInfoWindow);

return true;

}

}

 

5.onDestroy方法里面销毁定位

 @Override

protected void onDestroy() {

// 退出时销毁定位

locationClient.stop();

baiduMap.setMyLocationEnabled(false);

super.onDestroy();

mapView.onDestroy();

mapView = null;

bdA.recycle();

}

0 0
原创粉丝点击