基于Android的高德地图的定位和运动轨迹记录的功能
废话不多说,首先去高德地图的API上获取key(这一步很重要),因为没有KEY是无法获取高德地图的。
- 首先这是高德地图API的网址https://lbs.amap.com/,可以点击进去获取自己的key.这个流程在高德API上都是有教程的。
- 在AndroidManifest.xml中获取定位为权限
<!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission><!--用于获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET"></uses-permission><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission><!--用于写入缓存数据到扩展存储卡--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission><!--用于申请获取蓝牙信息进行室内定位--><uses-permission android:name="android.permission.BLUETOOTH"></uses-permission><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
- 在Layout中设置xml文件
<com.amap.api.maps.MapViewandroid:id="@+id/mapView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="40dp"app:layout_constraintTop_toBottomOf="@id/offlineMap"tools:ignore="MissingConstraints"tools:layout_editor_absoluteX="31dp"></com.amap.api.maps.MapView>
直接上我的代码然后注释给的很清楚
public class SportActivity extends AppCompatActivity {private static final String TAG = "MainActivity";private MapView mapView;private AMap aMap;private TextView offlineMap, record;private AMapLocationClient mLocationClient;private AMapLocationClientOption mLocationOption;private LocationSource.OnLocationChangedListener mListener;private AMapLocation privLocation;private SportMyView sportMyView;private double distance;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.sport_avtivity);//初始化DBFlowFlowManager.init(new FlowConfig.Builder(this).build());FlowManager.init(this);mapView = findViewById(R.id.mapView);mapView.onCreate(savedInstanceState);// 调用地图所必须重写if (aMap == null) {aMap = mapView.getMap();}aMap.getUiSettings().setZoomControlsEnabled(false);aMap.moveCamera(CameraUpdateFactory.zoomTo(15));aMap.setMapTextZIndex(2);setUpMap();init();insertModel();}private void setUpMap() {/*** 设置一些amap的属性*/UiSettings uiSettings = aMap.getUiSettings();uiSettings.setCompassEnabled(true);// 设置指南针是否显示uiSettings.setZoomControlsEnabled(true);// 设置缩放按钮是否显示uiSettings.setScaleControlsEnabled(true);// 设置比例尺是否显示uiSettings.setRotateGesturesEnabled(true);// 设置地图旋转是否可用uiSettings.setTiltGesturesEnabled(true);// 设置地图倾斜是否可用uiSettings.setMyLocationButtonEnabled(false);// 设置默认定位按钮是否显示/** 自定义系统定位小蓝点**/MyLocationStyle myLocationStyle = new MyLocationStyle();aMap.setMyLocationStyle(myLocationStyle);aMap.setLocationSource(mLocationSource);// 设置定位监听aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false}/*** 进入历史详情和地图管理页面*/private void init() {offlineMap = findViewById(R.id.offlineMap);offlineMap.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(SportActivity.this, OfflineMapActivity.class);startActivity(intent);}});//历史记录record = findViewById(R.id.record);record.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Intent intent = new Intent(SportActivity.this, RecordActivity.class);startActivity(intent);}});}public LocationSource mLocationSource = new LocationSource() {@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mListener = onLocationChangedListener;sportMyView = findViewById(R.id.sportMyView);sportMyView.setVisibility(View.INVISIBLE);sportMyView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//初始化定位initAmapLocation();}});sportMyView.setVisibility(View.VISIBLE);}@Overridepublic void deactivate() {mListener = null;if (mLocationClient != null) {mLocationClient.stopLocation();mLocationClient.onDestroy();}mLocationClient = null;}};/*** 初始化定位*/private void initAmapLocation() {//初始化定位mLocationClient = new AMapLocationClient(this);//设置定位回调监听mLocationClient.setLocationListener(mAMapLocationListener);//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();// 设置定位场景,目前支持三种场景(签到、出行、运动,默认无场景)mLocationOption.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.Transport);//设置定位模式为AMapLocationMode.Hight_Accuracy,设备定位模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。mLocationOption.setInterval(2000);//设置是否返回地址信息(默认返回地址信息)mLocationOption.setNeedAddress(true);//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。mLocationOption.setHttpTimeOut(20000);if (null != mLocationClient) {mLocationClient.setLocationOption(mLocationOption);//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效mLocationClient.startLocation();}}/*** 定位回调每1秒调用一次*/public AMapLocationListener mAMapLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation amapLocation) {if (amapLocation != null) {if (amapLocation.getErrorCode() == 0) {mListener.onLocationChanged(amapLocation);// 显示系统小蓝点,不写这一句无法显示到当前位置amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表Log.e(TAG, "获取经纬度集合" + privLocation);//打Log记录点是否正确amapLocation.getAccuracy();//获取精度信息amapLocation.getBearing();//获取方向角信息amapLocation.getSpeed();//获取速度信息 单位:米/秒amapLocation.getLocationType();//查看是什么类型的点Log.e(TAG, "获取点的类型" + amapLocation.getLocationType());if (amapLocation.getLocationType() == 1) {Location location = new Location();location.latitude = amapLocation.getLatitude();location.longitutd = amapLocation.getLongitude();drawLines(amapLocation);//一边定位一边连线distance += distance;Toast.makeText(SportActivity.this, "经纬度"+distance+"KM",Toast.LENGTH_SHORT).show();Log.e("DDDDDDDDD", String.valueOf(distance));Log.e(TAG, "获取点的类型" + amapLocation.getLocationType());Log.e("LLLLL", String.valueOf(location.latitude));Log.e("LLLLLLLL", String.valueOf(location.longitutd));}//获取定位时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = new Date(amapLocation.getTime());sdf.format(date);privLocation = amapLocation;} else {//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError", "location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo());}}}};/*** 绘制运动路线** @param curLocation*/public void drawLines(AMapLocation curLocation) {if (null == privLocation) {return;}PolylineOptions options = new PolylineOptions();//上一个点的经纬度options.add(new LatLng(privLocation.getLatitude(), privLocation.getLongitude()));//当前的经纬度options.add(new LatLng(curLocation.getLatitude(), curLocation.getLongitude()));options.width(10).geodesic(true).color(Color.GREEN);aMap.addPolyline(options);//距离的计算distance = AMapUtils.calculateLineDistance(new LatLng(privLocation.getLatitude(),privLocation.getLongitude()), new LatLng(curLocation.getLatitude(),curLocation.getLongitude()));}/*** 向数据库中传递数据*/private void insertModel() {MyDataBase myDatabase = new MyDataBase();myDatabase.averagespeed = "100";myDatabase.duration = "23";myDatabase.distance = distance;myDatabase.time = "2018-10-23";//myDatabase.save();Log.e("TEST", String.valueOf(myDatabase.averagespeed));Log.e("Sunday", String.valueOf(myDatabase.id));Log.e("Location", String.valueOf(myDatabase.location));}/*** 必须重写的方法*/@Overrideprotected void onDestroy() {mapView.onDestroy();super.onDestroy();}/*** 必须重写的方法*/@Overrideprotected void onPause() {mapView.onPause();super.onPause();}/*** 必须重写的方法*/@Overrideprotected void onResume() {mapView.onResume();super.onResume();} }
上面的代码中直接复制就行,泛红的方法删除就可以是用了。
其实高德地图定位有三种模式:基站定位、Wi-Fi定位、GPS定位。其中基站,精度在500米-5000米之间、Wi-Fi定位精度较高,在5米-200米之间、GPS精度较高,在10米-100米左右。所以记录运动轨迹是一般会把基站定位和Wi-Fi定位的点过滤掉,这样就很少飘点。
写的不好请指教。
文章地址:https://github.com/xindiyang/coddonGMap.git
基于Android的高德地图的定位和运动轨迹记录的功能相关推荐
- android 图片运动轨迹,基于Android的高德地图的定位和运动轨迹记录的功能
直接上我的代码然后注释给的很清楚 public class SportActivity extends AppCompatActivity { private static final String ...
- 计算机设计基于Android实现高德地图校内导航出行app【项目源码+简要论文说明】
基于Android实现高德地图校内导航出行app项目演示 如今手机的发展非常迅速,手机越来越成为人们不可缺少的东西.手机从最初功能简单的功能机,发展到如今几乎无所不能的智能机,满足了人们的日常需求,手 ...
- 基于Android实现高德地图校内导航出行app项目演示【项目源码+简要论文说明】分享
基于Android实现高德地图校内导航出行app项目演示 如今手机的发展非常迅速,手机越来越成为人们不可缺少的东西.手机从最初功能简单的功能机,发展到如今几乎无所不能的智能机,满足了人们的日常需求,手 ...
- Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS
/*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...
- Android使用高德地图api实现基础定位
Android使用高德地图api实现基础定位(一) 关于 会获取SHA1的可自行跳过这一步 第二步引用高德sdk 第三步修改MainActivity.java 关于 这篇主要讲如何使用高德sdk(不是 ...
- android使用高德地图SDK获取定位信息
注册账号.创建应用.获取API KEY等这些就不说了,按照官网来就行,我们来讲讲项目的配置及示例代码. 高德地图获取定位信息配置要比百度地图简单多了,这是我比较喜欢的一点,而且之前用百度地图嵌入一个应 ...
- Android Studio之高德地图实现定位和3D地图显示
在应用开发中,地图开发是经常需要使用的"组件",国内比较出名的是就是百度地图和高德地图. 此博客讲的是高德地图实现定位和3D地图显示,并标注相应位置,话不多说,先看看效果,在上代码 ...
- android高德地图默认当前位置,【报Bug】1.9.2 android 高德地图无法定位到当前位置...
详细问题描述 (DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题) [内容] 1.9.2版本 a ...
- android室内定位+3d,基于Android平台的手机室内定位及导航的设计与实现
摘要: 随着无线通信网络技术的发展,智能手机逐渐融入到人们的日常生活中.它不仅满足当今人们对于通话短信等基本功能的需求,而且还满足人们对于娱乐.上网.社交等功能的需求.导航功能是现在人们常用的一个功能 ...
最新文章
- 计算机网络知到马惜平答案,计算机网络实习用Dreamweaver搭建个人网站
- 利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
- java开发http协议接口_java开发接口利用http协议传输数据
- 文本分析用GUI界面显示
- 有效解决vue动态绑定多个class的官方实例语法无效的问题
- android 模拟器测试之旅
- 雕虫小技 - 签名图片生成器
- android8.1如何升级,关于android8.1实现多个app升级时的注意事项
- 在‘句子迷’爬取网友总结的方文山歌词并作词频统计
- 计算机毕业优秀作品展观后感,毕业设计作品展观后感
- websocket简单聊天室
- 刚入职的新人如何快速了解公司业务
- 852955-00-1,Cyclo(D-Trp-Tyr),大环化合物
- 【软件架构】Michael Perry关于不可变架构、CAP定理和CRDTs
- open cv均值 中值 高斯 双边高斯 滤波及模糊
- AIoT时代存储如何升级?长江存储发布高速闪存芯片UFS 3.1
- 陆奇新东家落定,YC入华将开创另类创投
- File size exceeds....(文件大小超过限制处理)
- wireshark抓包常用命令
- 尚观第15天nagios安装配置