概述
开始写代码之前,需要到百度地图官网下载最新SDK,拷贝so文件到项目中
图中4个so文件和BaiduLBS_Android.jar,直接拷贝就可以,然后
OK,准备工作完成了。
布局文件
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
代码中,private MapView mMapView;
private BaiduMap mBaiduMap;
private PoiSearch mPoiSearch = null;
// 按钮 添加覆盖物
private Button addOverlayBtn;
// 是否显示覆盖物 1-显示 0-不显示
private int isShowOverlay = 1;
// 按钮 定位当前位置
private TextView locCurplaceBtn;
// 是否首次定位
private boolean isFirstLoc = true;
// 定位SDK的核心类
// private LocationClient mLocClient;
// 定位图层显示模式 (普通-跟随-罗盘)
private LocationMode mCurrentMode;
// 定位图标描述
private BitmapDescriptor mCurrentMarker = null;
// 当前位置经纬度
private double latitude;
private double longitude;
String latLongString;
LocationClient locationClient;
private Double lon;
private Double lat;
private LatLng ll;
private String name;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());//注意这里
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.mapofqiandao);
initView();
initData();
initEvent();
}
@Override
public void initView() {
mMapView = (MapView) findViewById(R.id.bmapView);
mylocation = (TextView) findViewById(R.id.mylocation);
}
@Override
public void initData() {
title.setText("签到签退");
locationClient = new LocationClient(getApplicationContext());
mBaiduMap = mMapView.getMap();
MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(16.0f);
mBaiduMap.setMapStatus(msu);
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
initLocation();
// 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
mPoiSearch = PoiSearch.newInstance();
LatLng pt1 = new LatLng(39.93923, 116.357428);
LatLng pt2 = new LatLng(39.91923, 116.327428);
LatLng pt3 = new LatLng(39.89923, 116.347428);
LatLng pt4 = new LatLng(39.89923, 116.367428);
LatLng pt5 = new LatLng(39.91923, 116.387428);
List<LatLng> pts = new ArrayList<LatLng>();
pts.add(pt1);
pts.add(pt2);
pts.add(pt3);
pts.add(pt4);
pts.add(pt5);
// 构建用户绘制多边形的Option对象
OverlayOptions polygonOption = new PolygonOptions().points(pts).stroke(new Stroke(1, 0xAA00FF00))
.fillColor(0xAAFFFF00);
// 在地图上添加多边形Option,用于显示
mBaiduMap.addOverlay(polygonOption);
loc();
}
private void initLocation() {
locationClient = new LocationClient(this);
// 选项Options
LocationClientOption mOption = new LocationClientOption();
mOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
mOption = new LocationClientOption();
mOption.setCoorType("bd09ll");// 可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
mOption.setScanSpan(3000);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
mOption.setIsNeedAddress(true);// 可选,设置是否需要地址信息,默认不需要
mOption.setIsNeedLocationDescribe(true);// 可选,设置是否需要地址描述
mOption.setNeedDeviceDirect(false);// 可选,设置是否需要设备方向结果
mOption.setLocationNotify(false);// 可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
mOption.setIgnoreKillProcess(true);// 可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
mOption.setIsNeedLocationDescribe(true);// 可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
mOption.setIsNeedLocationPoiList(true);// 可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
mOption.SetIgnoreCacheException(false);// 可选,默认false,设置是否收集CRASH信息,默认收集
mOption.setIsNeedAltitude(false);// 可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
locationClient.setLocOption(mOption);
// 更新
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));
mBaiduMap.clear();
// addOverlayBtn.setEnabled(true);
// 定义Maker坐标点
LatLng point = new LatLng(latitude, longitude);
// 构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_openmap_mark);
// 构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
// 在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
mMapView.onDestroy();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
mMapView.onPause();
}
private void loc() {
locationClient.registerLocationListener(new BDLocationListener() {
@Override
public void onReceiveLocation(BDLocation loc) {
// MyLocationData.Builder定位数据建造器
MyLocationData locData = new MyLocationData.Builder().accuracy(loc.getRadius()).direction(100)
.latitude(loc.getLatitude()).longitude(loc.getLongitude()).build();
// 设置定位数据
mBaiduMap.setMyLocationData(locData);
mCurrentMode = LocationMode.NORMAL;
LatLng loc1 = new LatLng(loc.getLatitude(), loc.getLongitude());
// MapStatusUpdate描述地图将要发生的变化
// MapStatusUpdateFactory生成地图将要反生的变化
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(loc1);
lon = (Double) loc.getLongitude();
lat = (Double) loc.getLatitude();
//这里已经得到了经纬度,想得到什么就直接用loc.就行了
List<Poi> list = loc.getPoiList();// POI数据
Log.e("hahhahaha", loc.getLocationDescribe() + "");
if (list != null) {
// sb.append("npoilist size = : ");
// sb.append(list.size());
name = list.get(0).getName();
mylocation.setText(name);
if (name != null) {
locationClient.stop();
}
}
}
});
locStart();
}
public void locStart() {
locationClient.start();// 开始定位
}
OK,到这里就全部完成了。
最后
以上就是小巧小丸子为你收集整理的Android接入百度地图SDK,实现地图定位功能的全部内容,希望文章能够帮你解决Android接入百度地图SDK,实现地图定位功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复