骑行应用开发《五》百度地图定位
来源:互联网 发布:adobe xd cc mac 编辑:程序博客网 时间:2024/05/22 16:00
百度地图定位算是比较简单的,用了百度地图官网的api,jar包,还有例子,在上面修修改改就可以了,我这里只有一个activity,代码有注释
package zoombigimage.com.mokeride;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import com.baidu.android.common.logging.Log;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.BitmapDescriptor;import com.baidu.mapapi.map.BitmapDescriptorFactory;import com.baidu.mapapi.map.MapStatus;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.MyLocationData;import com.baidu.mapapi.model.LatLng;import zoombigimage.com.mokeride.uitl.OrientationListener;public class MyLocationActivity extends Activity implements View.OnClickListener, BDLocationListener, OrientationListener.OnOrientationListener { private MapView mMapView = null; private TextView mMapNormal; private TextView mMapSate; private BaiduMap mBaiduMap; private BitmapDescriptor mCurrentMarker; /** * 当前定位的模式 */ private MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.NORMAL; private LocationClient mLocationClient; private double mCurrentLongitude; private double mCurrentLantitude; private boolean isFristLocation = true; private OrientationListener mOrientationListener; private int mXDirection; private float mCurrentAccracy; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_my_location); initMyLocation(); initOritationListener(); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mMapNormal = (TextView) findViewById(R.id.normal); mMapSate = (TextView) findViewById(R.id.satellite); mMapNormal.setOnClickListener(this); mMapSate.setOnClickListener(this); mBaiduMap = mMapView.getMap(); //普通地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //开启交通图 mBaiduMap.setTrafficEnabled(true); mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(mBaiduMap.getMaxZoomLevel()).build())); } private void initMyLocation() { // 定位初始化 mLocationClient = new LocationClient(getApplicationContext()); mLocationClient.registerLocationListener(this); // 设置定位的相关配置 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true);// 打开gps option.setCoorType("bd09ll"); // 设置坐标类型 option.setScanSpan(10000); //设置发起定位请求的间隔时间为5000ms mLocationClient.setLocOption(option); } @Override protected void onDestroy() { super.onDestroy(); mBaiduMap.setMyLocationEnabled(false); mLocationClient.unRegisterLocationListener(this); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 if (mMapView != null) { mMapView.onResume(); } } @Override protected void onStop() { mLocationClient.stop(); mOrientationListener.stop(); super.onStop(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override protected void onStart() { // 开启图层定位 mBaiduMap.setMyLocationEnabled(true); if (!mLocationClient.isStarted()) { mLocationClient.start(); } mOrientationListener.start(); super.onStart(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.normal: mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; case R.id.satellite: //卫星地图 mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; } mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(new MapStatus.Builder().zoom(mBaiduMap.getMaxZoomLevel()).build())); } @Override public void onReceiveLocation(BDLocation location) { //开启定位图层 mBaiduMap.setMyLocationEnabled(true); mCurrentAccracy = location.getRadius(); MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); mCurrentLantitude = location.getLatitude(); mCurrentLongitude = location.getLongitude(); // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标) mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.ihz); MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(config); // 第一次定位时,将地图位置移动到当前位置 if (isFristLocation) { isFristLocation = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(u); } } /** * 初始化方向传感器 */ private void initOritationListener() { mOrientationListener = new OrientationListener(getApplicationContext()); mOrientationListener.setOnOrientationListener(new OrientationListener.OnOrientationListener() { @Override public void onOrientationChanged(float x) { mXDirection = (int) x; Log.e("initOritationListener","initOritationListener === " + mXDirection); // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(mCurrentAccracy) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(mXDirection) .latitude(mCurrentLantitude) .longitude(mCurrentLongitude).build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); // 设置自定义图标 BitmapDescriptor mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.oritention); MyLocationConfiguration config = new MyLocationConfiguration( mCurrentMode, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(config); } }); } @Override public void onOrientationChanged(float x) { }}<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:orientation="vertical" android:layout_height="match_parent" > <com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/normal" android:text="街道视图" android:padding="10dp" android:layout_marginRight="10dp" android:background="#96325874" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/satellite" android:text="卫星视图" android:padding="10dp" android:background="#96325874" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout></FrameLayout>
我加上了一个方向传感器,值得注意的是定位时间不要过于频繁,我一般都是四到六秒
1 0
- 骑行应用开发《五》百度地图定位
- 百度地图定位开发
- C#的百度地图开发(五)IP定位
- Android开发 百度地图开发(定位、传感器应用)
- 百度地图-定位开发经验
- 百度地图开发之【定位】
- 百度地图开发(3)定位
- 百度地图开发之定位
- 百度地图定位开发流程
- Android 百度地图开发之地图定位
- 百度地图定位功能的简单应用
- 百度地图Android sdk开发笔记五修改定位位置的图标
- 百度地图 定位 地图
- 百度地图API开发的定位APK
- 百度地图定位开发流程经验分享
- iOS开发 - 百度地图后台持续定位
- 百度地图开发之获取定位地点
- Android定位SDK_百度地图开发
- C#基础教程(一)
- ANDROID SDK体系介绍
- Tomcat多应用共享Session
- 文章标题
- spark 1.6 preview
- 骑行应用开发《五》百度地图定位
- 数据库基础学习----基础概念篇2
- 模式识别基础知识
- 移动应用与API 服务器之间的安全通信解决方法
- RTMP协议推流到FMS/RED5/WOWZA等流媒体服务器的低码流高清摄像机
- 关于spring session redis共享session的一个坑
- 合并文件的FileChannel方式
- 【扩展欧几里得】Bzoj 1407: [Noi2002]Savage
- Centos7中安装Tomcat服务器