我是靠谱客的博主 小巧小丸子,最近开发中收集的这篇文章主要介绍Android接入百度地图SDK,实现地图定位功能,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

开始写代码之前,需要到百度地图官网下载最新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,实现地图定位功能所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部